Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

366 lines
14 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity.Migrations
{
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Migrations.Model;
using System.Linq;
using Xunit;
public class DbMigrationTests
{
[Fact]
public void AddPrimaryKey_single_column_creates_add_primary_key_operation()
{
var migration = new TestMigration();
migration.AddPrimaryKey("t", "c", "pk");
var addPrimaryKeyOperation = migration.Operations.Cast<AddPrimaryKeyOperation>().Single();
Assert.Equal("t", addPrimaryKeyOperation.Table);
Assert.Equal("c", addPrimaryKeyOperation.Columns.Single());
Assert.Equal("pk", addPrimaryKeyOperation.Name);
Assert.True(addPrimaryKeyOperation.IsClustered);
}
[Fact]
public void AddPrimaryKey_multiple_columns_creates_add_primary_key_operation()
{
var migration = new TestMigration();
migration.AddPrimaryKey("t", new[] { "c1", "c2" }, "pk");
var addPrimaryKeyOperation = migration.Operations.Cast<AddPrimaryKeyOperation>().Single();
Assert.Equal("t", addPrimaryKeyOperation.Table);
Assert.Equal("c1", addPrimaryKeyOperation.Columns.First());
Assert.Equal("c2", addPrimaryKeyOperation.Columns.Last());
Assert.Equal("pk", addPrimaryKeyOperation.Name);
Assert.True(addPrimaryKeyOperation.IsClustered);
}
[Fact]
public void AddPrimaryKey_can_set_clustered_parameter()
{
var migration = new TestMigration();
migration.AddPrimaryKey("t", "c", "pk", clustered: false);
var addPrimaryKeyOperation = migration.Operations.Cast<AddPrimaryKeyOperation>().Single();
Assert.False(addPrimaryKeyOperation.IsClustered);
}
[Fact]
public void DropPrimaryKey_by_name_creates_drop_primary_key_operation()
{
var migration = new TestMigration();
migration.DropPrimaryKey("t", "pk");
var dropForeignKeyOperation = migration.Operations.Cast<DropPrimaryKeyOperation>().Single();
Assert.Equal("t", dropForeignKeyOperation.Table);
Assert.Equal("pk", dropForeignKeyOperation.Name);
}
[Fact]
public void DropPrimaryKey_by_table_name_creates_drop_primary_key_operation()
{
var migration = new TestMigration();
migration.DropPrimaryKey("t");
var dropForeignKeyOperation = migration.Operations.Cast<DropPrimaryKeyOperation>().Single();
Assert.Equal("t", dropForeignKeyOperation.Table);
}
[Fact]
public void AddForeignKey_creates_add_foreign_key_operation()
{
var migration = new TestMigration();
migration.AddForeignKey("d", "dc", "p", "pc", true, "fk");
var addForeignKeyOperation = migration.Operations.Cast<AddForeignKeyOperation>().Single();
Assert.Equal("d", addForeignKeyOperation.DependentTable);
Assert.Equal("dc", addForeignKeyOperation.DependentColumns.Single());
Assert.Equal("p", addForeignKeyOperation.PrincipalTable);
Assert.Equal("pc", addForeignKeyOperation.PrincipalColumns.Single());
Assert.Equal("fk", addForeignKeyOperation.Name);
Assert.True(addForeignKeyOperation.CascadeDelete);
}
[Fact]
public void AddForeignKey_creates_add_foreign_key_operation_when_composite_key()
{
var migration = new TestMigration();
migration.AddForeignKey("d", new[] { "dc1", "dc2" }, "p", new[] { "pc1", "pc2" }, true, "fk");
var addForeignKeyOperation = migration.Operations.Cast<AddForeignKeyOperation>().Single();
Assert.Equal("d", addForeignKeyOperation.DependentTable);
Assert.Equal("dc1", addForeignKeyOperation.DependentColumns.First());
Assert.Equal("dc2", addForeignKeyOperation.DependentColumns.Last());
Assert.Equal("p", addForeignKeyOperation.PrincipalTable);
Assert.Equal("pc1", addForeignKeyOperation.PrincipalColumns.First());
Assert.Equal("pc2", addForeignKeyOperation.PrincipalColumns.Last());
Assert.Equal("fk", addForeignKeyOperation.Name);
Assert.True(addForeignKeyOperation.CascadeDelete);
}
[Fact]
public void DropForeignKey_creates_drop_foreign_key_operation()
{
var migration = new TestMigration();
migration.DropForeignKey("d", "dc", "p");
var dropForeignKeyOperation = migration.Operations.Cast<DropForeignKeyOperation>().Single();
Assert.Equal("d", dropForeignKeyOperation.DependentTable);
Assert.Equal("dc", dropForeignKeyOperation.DependentColumns.Single());
Assert.Equal("p", dropForeignKeyOperation.PrincipalTable);
Assert.Equal(dropForeignKeyOperation.DefaultName, dropForeignKeyOperation.Name);
}
[Fact]
public void DropForeignKey_creates_drop_foreign_key_operation_when_composite_key()
{
var migration = new TestMigration();
migration.DropForeignKey("d", new[] { "dc1", "dc2" }, "p", new[] { "pc1", "pc2" });
var dropForeignKeyOperation = migration.Operations.Cast<DropForeignKeyOperation>().Single();
Assert.Equal("d", dropForeignKeyOperation.DependentTable);
Assert.Equal("dc1", dropForeignKeyOperation.DependentColumns.First());
Assert.Equal("dc2", dropForeignKeyOperation.DependentColumns.Last());
Assert.Equal("p", dropForeignKeyOperation.PrincipalTable);
Assert.Equal(dropForeignKeyOperation.DefaultName, dropForeignKeyOperation.Name);
}
[Fact]
public void DropForeignKey_creates_drop_foreign_key_operation_with_name()
{
var migration = new TestMigration();
migration.DropForeignKey("Foo", "fk");
var dropForeignKeyOperation = migration.Operations.Cast<DropForeignKeyOperation>().Single();
Assert.Equal("Foo", dropForeignKeyOperation.DependentTable);
Assert.Equal("fk", dropForeignKeyOperation.Name);
}
[Fact]
public void DropColumn_creates_drop_column_operation()
{
var migration = new TestMigration();
migration.DropColumn("Customers", "OldColumn");
var dropColumnOperation = migration.Operations.Cast<DropColumnOperation>().Single();
Assert.Equal("Customers", dropColumnOperation.Table);
Assert.Equal("OldColumn", dropColumnOperation.Name);
}
[Fact]
public void Can_call_create_table_with_anonymous_arguments()
{
var migration = new TestMigration();
migration.CreateTable(
"Foo", cs => new
{
Id = cs.Int()
}, new
{
Foo = 123
});
var createTableOperation = migration.Operations.Cast<CreateTableOperation>().Single();
Assert.Equal(123, createTableOperation.AnonymousArguments["Foo"]);
}
[Fact]
public void AddColumn_creates_add_column_operation_with_column_model()
{
var migration = new TestMigration();
migration.AddColumn("Customers", "NewColumn", c => c.Byte(nullable: false));
var addColumnOperation = migration.Operations.Cast<AddColumnOperation>().Single();
Assert.Equal("Customers", addColumnOperation.Table);
Assert.Equal("NewColumn", addColumnOperation.Column.Name);
Assert.Equal(PrimitiveTypeKind.Byte, addColumnOperation.Column.Type);
Assert.False(addColumnOperation.Column.IsNullable.Value);
}
[Fact]
public void CreateTable_can_build_table_with_columns()
{
var migration = new TestMigration();
migration.CreateTable(
"Customers",
cs => new
{
Id = cs.Int(),
Name = cs.String()
});
var createTableOperation = migration.Operations.Cast<CreateTableOperation>().Single();
Assert.Equal("Customers", createTableOperation.Name);
Assert.Equal(2, createTableOperation.Columns.Count());
var column = createTableOperation.Columns.First();
Assert.Equal("Id", column.Name);
Assert.Equal(PrimitiveTypeKind.Int32, column.Type);
column = createTableOperation.Columns.Last();
Assert.Equal("Name", column.Name);
Assert.Equal(PrimitiveTypeKind.String, column.Type);
}
[Fact]
public void CreateTable_can_build_table_with_custom_column_name()
{
var migration = new TestMigration();
migration.CreateTable(
"Customers",
cs => new
{
Id = cs.Int(name: "Customer Id")
});
var createTableOperation = migration.Operations.Cast<CreateTableOperation>().Single();
var column = createTableOperation.Columns.Single();
Assert.Equal("Customer Id", column.Name);
Assert.Equal(PrimitiveTypeKind.Int32, column.Type);
}
[Fact]
public void CreateTable_can_build_table_with_index()
{
var migration = new TestMigration();
migration.CreateTable(
"Customers",
cs => new
{
Id = cs.Int(),
Name = cs.String()
})
.Index(
t => new
{
t.Id,
t.Name
}, unique: true, clustered: true);
var createIndexOperation = migration.Operations.OfType<CreateIndexOperation>().Single();
Assert.NotNull(createIndexOperation.Table);
Assert.Equal(2, createIndexOperation.Columns.Count());
Assert.True(createIndexOperation.IsUnique);
Assert.True(createIndexOperation.IsClustered);
}
[Fact]
public void DropTable_should_add_drop_table_operation()
{
var migration = new TestMigration();
migration.DropTable("Customers");
var dropTableOperation = migration.Operations.Cast<DropTableOperation>().Single();
Assert.NotNull(dropTableOperation);
Assert.Equal("Customers", dropTableOperation.Name);
}
[Fact]
public void RenameTable_should_add_rename_table_operation()
{
var migration = new TestMigration();
migration.RenameTable("old", "new");
var renameTableOperation = migration.Operations.Cast<RenameTableOperation>().Single();
Assert.NotNull(renameTableOperation);
Assert.Equal("old", renameTableOperation.Name);
Assert.Equal("new", renameTableOperation.NewName);
}
[Fact]
public void RenameColumn_should_add_rename_column_operation()
{
var migration = new TestMigration();
migration.RenameColumn("table", "old", "new");
var renameColumnOperation = migration.Operations.Cast<RenameColumnOperation>().Single();
Assert.NotNull(renameColumnOperation);
Assert.Equal("table", renameColumnOperation.Table);
Assert.Equal("old", renameColumnOperation.Name);
Assert.Equal("new", renameColumnOperation.NewName);
}
[Fact]
public void CreateIndex_should_add_create_index_operation()
{
var migration = new TestMigration();
migration.CreateIndex("table", new[] { "Foo", "Bar" }, true);
var createIndexOperation = migration.Operations.Cast<CreateIndexOperation>().Single();
Assert.Equal("table", createIndexOperation.Table);
Assert.Equal("Foo", createIndexOperation.Columns.First());
Assert.Equal("Bar", createIndexOperation.Columns.Last());
Assert.True(createIndexOperation.IsUnique);
Assert.False(createIndexOperation.IsClustered);
}
[Fact]
public void CreateIndex_can_set_clustered_parameter()
{
var migration = new TestMigration();
migration.CreateIndex("table", new[] { "Foo", "Bar" }, clustered: true);
var createIndexOperation = migration.Operations.Cast<CreateIndexOperation>().Single();
Assert.True(createIndexOperation.IsClustered);
}
[Fact]
public void Sql_should_add_sql_operation()
{
var migration = new TestMigration();
migration.Sql("foo");
var sqlOperation = migration.Operations.Cast<SqlOperation>().Single();
Assert.Equal("foo", sqlOperation.Sql);
}
}
}