public void can_resolve_conflicts_using_load() { const string userDocumentId = "users/someuser"; using (var store1 = CreateStore(databaseName: DefaultDatabase)) using (var store2 = CreateStore(databaseName: DefaultDatabase)) { store1.Initialize(); store2.Initialize(); using (var session1 = store1.OpenSession()) using (var session2 = store2.OpenSession()) { session1.Store(new User { Name = "Name" }, userDocumentId); session1.SaveChanges(); session2.Store(new User { Name = "AnotherName" }, userDocumentId); session2.SaveChanges(); } store2.RegisterListener(new MergeConflicts()); var changes = store2.Changes(); using (var conflictObserver = new ConflictObserver()) using (changes.ForAllReplicationConflicts().Subscribe(conflictObserver)) { changes.WaitForAllPendingSubscriptions(); var destinations = new List <RavenJObject> { new RavenJObject { { "Url", store2.Url }, { "Database", store2.DefaultDatabase }, { "TransitiveReplicationBehavior", "Replicate" } } }; store1.DatabaseCommands.Put(Constants.RavenReplicationDestinations, null, new RavenJObject { { "Destinations", new RavenJArray(destinations) } }, new RavenJObject()); conflictObserver.WaitOne(); } using (var session = store2.OpenSession()) { var user = session.Load <User>(userDocumentId); Assert.Equal(user.Name, "AnotherName Name"); } } }
public void can_resolve_conflicts_using_query() { using (var store1 = CreateStore(databaseName: DefaultDatabase)) using (var store2 = CreateStore(databaseName: DefaultDatabase)) { store1.Initialize(); store2.Initialize(); using (var session1 = store1.OpenSession()) using (var session2 = store2.OpenSession()) { session1.Store(new User { Name = "Name" }); session1.Store(new User { Name = "Name2" }); session1.SaveChanges(); session2.Store(new User { Name = "AnotherName" }); session2.Store(new User { Name = "AnotherName2" }); session2.SaveChanges(); } store2.RegisterListener(new MergeConflicts()); var changes = store2.Changes(); using (var conflictObserver = new ConflictObserver()) using (changes.ForAllReplicationConflicts().Subscribe(conflictObserver)) { changes.WaitForAllPendingSubscriptions(); conflictObserver.DesiredConflicts = 2; var destinations = new List <RavenJObject> { new RavenJObject { { "Url", store2.Url }, { "Database", store2.DefaultDatabase }, { "TransitiveReplicationBehavior", "Replicate" } } }; store1.DatabaseCommands.Put(Constants.RavenReplicationDestinations, null, new RavenJObject { { "Destinations", new RavenJArray(destinations) } }, new RavenJObject()); conflictObserver.WaitOne(); } using (var session = store2.OpenSession()) { var users = session.Query <User>().ToList(); Assert.Equal(2, users.Count); Assert.True(users[0].Name == "AnotherName Name" || users[0].Name == "AnotherName2 Name2"); Assert.True(users[1].Name == "AnotherName Name" || users[1].Name == "AnotherName2 Name2"); } } }