Skip to content

Instantly share code, notes, and snippets.

@mattjohnsonpint
Created October 19, 2012 00:13
Show Gist options
  • Select an option

  • Save mattjohnsonpint/3915532 to your computer and use it in GitHub Desktop.

Select an option

Save mattjohnsonpint/3915532 to your computer and use it in GitHub Desktop.
RavenDB issue with getting versioned documents from a tenant db
using System;
using System.Linq;
using Raven.Abstractions.Data;
using Raven.Client;
using Raven.Client.Bundles.Versioning;
using Raven.Client.Document;
using Raven.Client.Extensions;
using Xunit;
namespace RavenTests
{
public class Tests
{
private readonly string _dbid = Guid.NewGuid().ToString("N");
private readonly IDocumentStore _documentStore = new DocumentStore { Url = "http://localhost:8080" };
public Tests()
{
_documentStore.Initialize();
// Create a tenant database with versioning settings
_documentStore.DatabaseCommands.CreateDatabase(new DatabaseDocument
{
Id = _dbid,
Settings =
{
{ "Raven/DataDir", @"~\\Databases\\" + _dbid },
{ "Raven/ActiveBundles", "Versioning" }
}
});
// Configure the default versioning configuration
using (var session = _documentStore.OpenSession(_dbid))
{
session.Store(new VersioningConfiguration
{
Id = "Raven/Versioning/DefaultConfiguration",
MaxRevisions = 5
});
session.SaveChanges();
}
// Add an entity, creating the first version.
using (var session = _documentStore.OpenSession(_dbid))
{
session.Store(new Ball { Id = "balls/1", Color = "Red" });
session.SaveChanges();
}
// Change the entity, creating the second version.
using (var session = _documentStore.OpenSession(_dbid))
{
var ball = session.Load<Ball>("balls/1");
ball.Color = "Blue";
session.SaveChanges();
}
}
[Fact]
public void Test_That_Versioning_Documents_Were_Created()
{
// Passes
var revisions = _documentStore.DatabaseCommands.ForDatabase(_dbid).StartsWith("balls/1/revisions/", null, 0, 10);
Assert.Equal(2, revisions.Length);
}
[Fact]
public void Test_GetRevisionsFor_Extension_Method()
{
// Should pass. Fails.
using (var session = _documentStore.OpenSession(_dbid))
{
var revisions = session.Advanced.GetRevisionsFor<Ball>("balls/1", 0, 10);
Assert.Equal(2, revisions.Length);
Assert.Equal("Red", revisions[0].Color);
Assert.Equal("Blue", revisions[1].Color);
}
}
[Fact]
public void Test_GetRevisionIdsFor_Extension_Method()
{
// Should pass. Fails.
using (var session = _documentStore.OpenSession(_dbid))
{
var revisionIds = session.Advanced.GetRevisionIdsFor<Ball>("balls/1", 0, 10);
Assert.Equal(2, revisionIds.Length);
Assert.Equal("balls/1/revisions/1", revisionIds[0]);
Assert.Equal("balls/1/revisions/2", revisionIds[1]);
}
}
[Fact]
public void Test_GetRevisionIdsFor_Fixed_Extension_Method()
{
// Passes
using (var session = _documentStore.OpenSession(_dbid))
{
var revisionIds = session.Advanced.GetRevisionIdsFor_Fixed<Ball>("balls/1", 0, 10);
Assert.Equal(2, revisionIds.Length);
Assert.Equal("balls/1/revisions/1", revisionIds[0]);
Assert.Equal("balls/1/revisions/2", revisionIds[1]);
}
}
[Fact]
public void Test_GetRevisionsFor_Fixed_Extension_Method()
{
// Passes
using (var session = _documentStore.OpenSession(_dbid))
{
var revisions = session.Advanced.GetRevisionsFor_Fixed<Ball>("balls/1", 0, 10);
Assert.Equal(2, revisions.Length);
Assert.Equal("Red", revisions[0].Color);
Assert.Equal("Blue", revisions[1].Color);
}
}
}
public static class Extensions
{
public static T[] GetRevisionsFor_Fixed<T>(this ISyncAdvancedSessionOperation session, string id, int start, int pageSize)
{
var inMemoryDocumentSessionOperations = ((InMemoryDocumentSessionOperations) session);
//original: var jsonDocuments = session.DocumentStore.DatabaseCommands.StartsWith(id + "/revisions/", null, start, pageSize);
var jsonDocuments = ((DocumentSession)session).DatabaseCommands.StartsWith(id + "/revisions/", null, start, pageSize);
return jsonDocuments
.Select(inMemoryDocumentSessionOperations.TrackEntity<T>)
.ToArray();
}
public static string[] GetRevisionIdsFor_Fixed<T>(this ISyncAdvancedSessionOperation session, string id, int start, int pageSize)
{
//original: var jsonDocuments = session.DocumentStore.DatabaseCommands.StartsWith(id + "/revisions/", null, start, pageSize, metadataOnly: true);
var jsonDocuments = ((DocumentSession)session).DatabaseCommands.StartsWith(id + "/revisions/", null, start, pageSize, metadataOnly: true);
return jsonDocuments
.Select(document => document.Key)
.ToArray();
}
}
public class Ball
{
public string Id { get; set; }
public string Color { get; set; }
}
public class VersioningConfiguration
{
public string Id { get; set; }
public int MaxRevisions { get; set; }
public bool Exclude { get; set; }
public bool PurgeOnDelete { get; set; }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment