public static void AddIndex(this TransformationProvider database, string indexName, string tableName, params string[] columns)
		{
			ICreateIndexOnColumnSyntax builder = new CreateExpressionRoot(database.Context).Index(indexName)
				.OnTable(tableName);

			foreach (var column in columns)
			{
				builder = builder.OnColumn(column).Ascending();
			}
		}
		public static void AddTable(this TransformationProvider database, string name, params Column[] columns)
		{
			var tableBuilder = new CreateExpressionRoot(database.Context).Table(name);

			foreach (var column in columns)
			{
				var builder = tableBuilder.WithColumn(column.Name, column.Type, column.Size);
				ColumnExtensions.ApplyColumnOptions(builder, column.ColumnProperty, column.DefaultValue);
			}
		}
        public void CallingColumnReturnsCreateColumnExpression()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();
            var contextMock = new Mock<IMigrationContext>();
            contextMock.Setup(x => x.Expressions).Returns(collectionMock.Object);

            var root = new CreateExpressionRoot(contextMock.Object);
            var builder = root.Column("Bacon");

            builder.ShouldBeOfType<CreateColumnExpressionBuilder>();
            contextMock.VerifyGet(x => x.Expressions);
        }
        public void CallingForeignKeyCreatesCreateForeignKeyExpression()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();
            var contextMock = new Mock<IMigrationContext>();
            contextMock.SetupGet(x => x.Expressions).Returns(collectionMock.Object).AtMostOnce();

            var root = new CreateExpressionRoot(contextMock.Object);
            var builder = root.ForeignKey("FK_Bacon");

            builder.ShouldBeOfType<CreateForeignKeyExpressionBuilder>();
            contextMock.VerifyAll();
        }
		public static void AddUniqueConstraint(this TransformationProvider database, string name, string table, params string[] columns)
		{
			var indexBuilder = new CreateExpressionRoot(database.Context).Index(name);
			var tabledIndexBuilder = indexBuilder.OnTable(table);

			foreach (string column in columns)
			{
				tabledIndexBuilder.OnColumn(column).Ascending();
			}

			tabledIndexBuilder.WithOptions().Unique();
		}
        public void CallingForeignKeyAddsCreateForeignKeyExpressionToContextWithSpecifiedNameSet()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();

            var contextMock = new Mock<IMigrationContext>();
            contextMock.Setup(x => x.Expressions).Returns(collectionMock.Object);

            var root = new CreateExpressionRoot(contextMock.Object);
            root.ForeignKey("FK_Bacon");

            collectionMock.Verify(x => x.Add(It.Is<CreateForeignKeyExpression>(e => e.ForeignKey.Name.Equals("FK_Bacon"))));
            contextMock.VerifyGet(x => x.Expressions);
        }
        public void CallingColumnAddsCreateColumnExpressionToContextWithSpecifiedNameSet()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();
            collectionMock.Setup(x => x.Add(It.Is<CreateColumnExpression>(e => e.Column.Name.Equals("Bacon")))).AtMostOnce();

            var contextMock = new Mock<IMigrationContext>();
            contextMock.SetupGet(x => x.Expressions).Returns(collectionMock.Object).AtMostOnce();

            var root = new CreateExpressionRoot(contextMock.Object);
            root.Column("Bacon");

            collectionMock.VerifyAll();
            contextMock.VerifyAll();
        }
        public void CallingIndexWithoutNameAddsCreateIndexExpressionToContext()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();

            var contextMock = new Mock<IMigrationContext>();
            contextMock.Setup(x => x.Expressions).Returns(collectionMock.Object);

            var root = new CreateExpressionRoot(contextMock.Object);
            root.Index();

            collectionMock.Verify(x => x.Add(It.IsAny<CreateIndexExpression>()));
            contextMock.VerifyGet(x => x.Expressions);
        }
        public void CallingForeignKeyWithoutNameReturnsCreateForeignKeyExpression()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();
            var contextMock = new Mock<IMigrationContext>();
            contextMock.Setup(x => x.Expressions).Returns(collectionMock.Object);

            var root = new CreateExpressionRoot(contextMock.Object);
            var builder = root.ForeignKey();

            builder.ShouldBeOfType<CreateForeignKeyExpressionBuilder>();
            contextMock.VerifyGet(x => x.Expressions);
        }
        public void CallingForeignKeyWithoutNameAddsCreateForeignKeyExpressionToContext()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();
            collectionMock.Setup(x => x.Add(It.IsAny<CreateForeignKeyExpression>())).AtMostOnce();

            var contextMock = new Mock<IMigrationContext>();
            contextMock.SetupGet(x => x.Expressions).Returns(collectionMock.Object).AtMostOnce();

            var root = new CreateExpressionRoot(contextMock.Object);
            root.ForeignKey();

            collectionMock.VerifyAll();
            contextMock.VerifyAll();
        }
        public void CallingIndexWithoutNameReturnsCreateIndexExpression()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();
            var contextMock = new Mock<IMigrationContext>();
            contextMock.SetupGet(x => x.Expressions).Returns(collectionMock.Object).AtMostOnce();

            var root = new CreateExpressionRoot(contextMock.Object);
            var builder = root.Index();

            builder.ShouldBeOfType<CreateIndexExpressionBuilder>();
            contextMock.VerifyAll();
        }
 public void CallingUniqueConstraintShouldCreateAConstraintExpressionWithATypeOfUnique()
 {
     var contextMock = new Mock<IMigrationContext>();
     var root = new CreateExpressionRoot(contextMock.Object);
     var builder = root.UniqueConstraint();
     builder.ShouldBeOfType<CreateConstraintExpression>();
 }
        public void CallingTableReturnsCreateTableExpressionBuilder()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();
            var contextMock = new Mock<IMigrationContext>();
            contextMock.Setup(x => x.Expressions).Returns(collectionMock.Object);
            contextMock.VerifyGet(x => x.Expressions, Times.AtMostOnce());

            var root = new CreateExpressionRoot(contextMock.Object);
            var builder = root.Table("Bacon");

            builder.ShouldBeOfType<CreateTableExpressionBuilder>();
            contextMock.VerifyAll();
        }
        public void CallingIndexAddsCreateIndexExpressionToContextWithSpecifiedNameSet()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();
            collectionMock.Verify(x => x.Add(It.Is<CreateIndexExpression>(e => e.Index.Name.Equals("IX_Bacon"))), Times.AtMostOnce());

            var contextMock = new Mock<IMigrationContext>();
            contextMock.Setup(x => x.Expressions).Returns(collectionMock.Object);
            contextMock.VerifyGet(x => x.Expressions, Times.AtMostOnce());

            var root = new CreateExpressionRoot(contextMock.Object);
            root.Index("IX_Bacon");

            collectionMock.VerifyAll();
            contextMock.VerifyAll();
        }
        public void CallingUniqueConstraintCreateColumnExpressionToContextWithSpecifiedNameSet()
        {
            var collectionMock = new Mock<ICollection<IMigrationExpression>>();

            var contextMock = new Mock<IMigrationContext>();
            contextMock.Setup(x => x.Expressions).Returns(collectionMock.Object);

            var root = new CreateExpressionRoot(contextMock.Object);
            root.UniqueConstraint("UC_Bacon");

            collectionMock.Verify(x => x.Add(It.Is<CreateConstraintExpression>(
                e => e.Constraint.ConstraintName.Equals("UC_Bacon")
                     && e.Constraint.IsUniqueConstraint
            )));
            contextMock.VerifyGet(x => x.Expressions);
        }