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();
				});
			}
		}
Exemple #2
0
		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);
			}
		}
Exemple #6
0
		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);
			}
		}
Exemple #7
0
		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);
			}
		}
Exemple #8
0
		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());;
            }
        }
Exemple #10
0
		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("*****@*****.**")));
			}
		}
Exemple #11
0
		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();
						}
					});
		}
Exemple #12
0
		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"));
			}
		}
Exemple #13
0
	    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);
			}
		}
Exemple #16
0
	    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();
                    }
                });
	    }