public void Can_insert_document_when_constraints_are_free() { var user1 = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; var user2 = new User { Id = "users/2", Email = "*****@*****.**", Name = "Watson" }; var user3 = new User { Id = "users/3", Email = "*****@*****.**", Name = "Sherlock" }; using (var session = DocumentStore.OpenSession()) { session.Store(user1); session.Store(user2); session.Store(user3); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { var checkUser = new User { Id = "users/5", Email = "*****@*****.**", Name = "McLovin" }; var checkResult = session.CheckForUniqueConstraints(checkUser); Assert.True(checkResult.ConstraintsAreFree()); session.Store(checkUser); Assert.DoesNotThrow(delegate { session.SaveChanges(); }); } }
public void Will_create_documents_with_different_constraints() { var user = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; var otherUser = new User { Id = "users/2", Email = "*****@*****.**", Name = "John" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.Store(otherUser); session.SaveChanges(); } Assert.NotNull(user.Id); Assert.NotNull(otherUser.Id); }
public void Will_return_null_when_there_is_no_constraint_doc() { var user = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { var loadedUser = session.LoadByUniqueConstraint<User>(x => x.Email, "*****@*****.**"); Assert.Null(loadedUser); } }
public void Will_multiload_with_array_of_values() { var user1 = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; var user2 = new User { Id = "users/2", Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user1); session.Store(user2); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { var results = session.LoadByUniqueConstraint<User>(u => u.Email, "*****@*****.**", "*****@*****.**"); Assert.Equal(2, results.Length); } }
public void Will_load_existing_doc_by_constraint() { var user = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { var loadedUser = session.LoadByUniqueConstraint<User>(x => x.Email, "*****@*****.**"); Assert.NotNull(loadedUser); Assert.Equal(user.Id,loadedUser.Id); } }
public void Will_create_constraint_document() { var user = new User { Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { var constraintDocument = session.Load<dynamic>("UniqueConstraints/Users/Email/" + Util.EscapeUniqueValue("*****@*****.**")); Assert.NotNull(constraintDocument); Assert.Equal(constraintDocument.RelatedId, user.Id); } }
public void Will_create_correct_metadata() { var user = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { var loadedUser = session.Load<User>(user.Id); var userMetadata = session.Advanced.GetMetadataFor(loadedUser); var constraintsMeta = userMetadata.Value<RavenJArray>("Ensure-Unique-Constraints"); Assert.NotNull(constraintsMeta); Assert.Equal(1, constraintsMeta.Length); } }
public void Does_not_delete_base_document_when_constraint_is_deleted() { var user = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); // Ensures constraint was created Assert.NotNull(session.Advanced.DatabaseCommands.Get("UniqueConstraints/Users/Email/[email protected]")); Assert.NotNull(session.Advanced.DatabaseCommands.Get("users/1")); session.Advanced.DatabaseCommands.Delete("UniqueConstraints/Users/Email/[email protected]", null); // Base doc still intact Assert.NotNull(session.Advanced.DatabaseCommands.Get("users/1")); } }
public void Check_works_on_enumerable_property() { var user1 = new User { Id = "users/1", Email = "*****@*****.**", Name = "James", TaskIds = new []{"TaskA", "TaskB"}}; var checkUser1 = new User { Id = "users/2", Email = "*****@*****.**", Name = "Watson", TaskIds = new[] { "TaskA"} }; var checkUser2 = new User { Id = "users/3", Email = "*****@*****.**", Name = "Sherlock", TaskIds = new[] { "TaskB", "TaskC" } }; var checkUser3 = new User { Id = "users/3", Email = "*****@*****.**", Name = "Sherlock", TaskIds = new[] { "TaskC", "TaskD" } }; using (var session = DocumentStore.OpenSession()) { session.Store(user1); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { Assert.False(session.CheckForUniqueConstraints(checkUser1).ConstraintsAreFree()); Assert.False(session.CheckForUniqueConstraints(checkUser2).ConstraintsAreFree()); Assert.True(session.CheckForUniqueConstraints(checkUser3).ConstraintsAreFree());; } }
public void Updating_constraint_field_on_document_propagates_to_constraint_document() { var user = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); // Ensures constraint was created Assert.NotNull(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/Email/" + Util.EscapeUniqueValue("*****@*****.**"))); Assert.NotNull(DocumentStore.DatabaseCommands.Get("users/1")); user.Email = "*****@*****.**"; session.SaveChanges(); // Both docs should be deleted Assert.Null(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/Email/" + Util.EscapeUniqueValue("*****@*****.**"))); Assert.NotNull(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/Email/" + Util.EscapeUniqueValue("*****@*****.**"))); } }
public void Will_veto_on_same_constraint() { var user = new User { Email = "*****@*****.**", Name = "Khan" }; var sameEmailUser = new User { Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); } Assert.Throws<database::Raven.Database.Exceptions.OperationVetoedException>( () => { using (var session = DocumentStore.OpenSession()) { session.Store(sameEmailUser); session.SaveChanges(); } }); }
public void Deletes_constraint_document_when_base_document_is_deleted() { var user = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); // Ensures constraint was created Assert.NotNull( DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/Email/" + Util.EscapeUniqueValue(("*****@*****.**")))); Assert.NotNull(DocumentStore.DatabaseCommands.Get("users/1")); DocumentStore.DatabaseCommands.Delete("users/1", null); // Both docs should be deleted Assert.Null(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/Email/" + Util.EscapeUniqueValue("*****@*****.**"))); Assert.Null(DocumentStore.DatabaseCommands.Get("users/1")); } }
public void Updating_constraint_array_field_on_document_propagates_to_constraint_documents() { var user = new User {Id = "users/1", Email = "*****@*****.**", Name = "James", TaskIds = new []{"Task1", "Task2"}}; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); // Ensures constraint was created Assert.NotNull(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/TaskIds/" + Util.EscapeUniqueValue("Task1"))); Assert.NotNull(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/TaskIds/" + Util.EscapeUniqueValue("Task2"))); Assert.NotNull(DocumentStore.DatabaseCommands.Get("users/1")); user.TaskIds = new[] {"Task1", "Task3"}; session.SaveChanges(); Assert.NotNull(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/TaskIds/" + Util.EscapeUniqueValue("Task1"))); Assert.Null(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/TaskIds/" + Util.EscapeUniqueValue("Task2"))); Assert.NotNull(DocumentStore.DatabaseCommands.Get("UniqueConstraints/Users/TaskIds/" + Util.EscapeUniqueValue("Task3"))); } }
public void Will_load_all_documents_based_on_constraint() { var user1 = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; var user2 = new User { Id = "users/2", Email = "*****@*****.**", Name = "Watson" }; var user3 = new User { Id = "users/3", Email = "*****@*****.**", Name = "Sherlock" }; using (var session = DocumentStore.OpenSession()) { session.Store(user1); session.Store(user2); session.Store(user3); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { var checkUser = new User { Id = "users/5", Email = "*****@*****.**", Name = "Watson" }; var checkResult = session.CheckForUniqueConstraints(checkUser); Assert.Equal(checkResult.LoadedDocuments.Count(), 1); Assert.Equal(checkUser.Email, checkResult.DocumentForProperty(x => x.Email).Email); } }
public void Will_return_parallel_array_with_array_of_values() { var user1 = new User { Id = "users/1", Email = "*****@*****.**", Name = "James" }; var user3 = new User { Id = "users/3", Email = "*****@*****.**", Name = "James" }; using (var session = DocumentStore.OpenSession()) { session.Store(user1); session.Store(user3); session.SaveChanges(); } using (var session = DocumentStore.OpenSession()) { var results = session.LoadByUniqueConstraint<User>(u => u.Email, "*****@*****.**", "*****@*****.**", "*****@*****.**"); Assert.Equal(user1.Email, results[0].Email); Assert.Equal(null, results[1]); Assert.Equal(user3.Email, results[2].Email); } }
public void Will_veto_on_same_constraint_array() { var user = new User {Email = "*****@*****.**", TaskIds = new[] {"TaskA", "TaskB"}}; var sameTaskUser = new User { Email = "*****@*****.**", TaskIds = new[] { "TaskA", "TaskC" } }; using (var session = DocumentStore.OpenSession()) { session.Store(user); session.SaveChanges(); } Assert.Throws<OperationVetoedException>( () => { using (var session = DocumentStore.OpenSession()) { session.Store(sameTaskUser); session.SaveChanges(); } }); }