public void Can_create_columns_with_default_values_for_all_types()
        {
            ResetDatabase();

            var migrator = CreateMigrator <ShopContext_v1>();

            migrator.Update();

            var defaultValuesMigration = new DefaultValuesMigration();

            var createTableOperation
                = (CreateTableOperation)defaultValuesMigration.GetOperations().Single();

            WhenSqlCe(
                () =>
            {
                createTableOperation.Columns.Remove(createTableOperation.Columns.Single(c => c.Name == "DateTimeOffset"));
                createTableOperation.Columns.Remove(createTableOperation.Columns.Single(c => c.Name == "Time"));
            });

            migrator = CreateMigrator <ShopContext_v1>(defaultValuesMigration);

            migrator.Update();

            var table = Info.Tables.Single(t => t.Name == "DefaultValues");

            Assert.True(table.Columns.Any(c => c.Name == "Binary" && c.Default.Contains("0x")));
            Assert.True(table.Columns.Any(c => c.Name == "Boolean" && c.Default.Contains("1")));
            Assert.True(table.Columns.Any(c => c.Name == "Byte" && c.Default.Contains("42")));
            Assert.True(table.Columns.Any(c => c.Name == "DateTime" && c.Default.Contains("'0001-01-01T00:00:00.000'")));
            Assert.True(table.Columns.Any(c => c.Name == "Decimal" && c.Default.Contains("42.23")));
            Assert.True(table.Columns.Any(c => c.Name == "Double" && c.Default.Contains("123.45")));
            Assert.True(table.Columns.Any(c => c.Name == "Guid" && c.Default.Contains("'00000000-0000-0000-0000-000000000000'")));
            Assert.True(table.Columns.Any(c => c.Name == "Int" && c.Default.Contains("0")));
            Assert.True(table.Columns.Any(c => c.Name == "Long" && c.Default.Contains("3456789")));
            Assert.True(table.Columns.Any(c => c.Name == "Short" && c.Default.Contains("256")));
            Assert.True(table.Columns.Any(c => c.Name == "Single" && c.Default.Contains("234.999")));
            Assert.True(table.Columns.Any(c => c.Name == "String" && c.Default.Contains("''")));

            WhenNotSqlCe(
                () =>
            {
                Assert.True(table.Columns.Any(c => c.Name == "DateTimeOffset" && c.Default == "('0001-01-01T00:00:00.000+00:00')"));
                Assert.True(table.Columns.Any(c => c.Name == "Time" && c.Default == "('00:00:00')"));
            });
        }
        public void Can_create_columns_with_default_values_for_all_types()
        {
            ResetDatabase();

            var migrator = CreateMigrator<ShopContext_v1>();

            migrator.Update();

            var defaultValuesMigration = new DefaultValuesMigration();

            var createTableOperation
                = (CreateTableOperation)defaultValuesMigration.GetOperations().Single();

            WhenSqlCe(
                () =>
                    {
                        createTableOperation.Columns.Remove(createTableOperation.Columns.Single(c => c.Name == "DateTimeOffset"));
                        createTableOperation.Columns.Remove(createTableOperation.Columns.Single(c => c.Name == "Time"));
                    });

            migrator = CreateMigrator<ShopContext_v1>(defaultValuesMigration);

            migrator.Update();

            var table = Info.Tables.Single(t => t.Name == "DefaultValues");
            Assert.True(table.Columns.Any(c => c.Name == "Binary" && c.Default.Contains("0x")));
            Assert.True(table.Columns.Any(c => c.Name == "Boolean" && c.Default.Contains('1')));
            Assert.True(table.Columns.Any(c => c.Name == "Byte" && c.Default.Contains("42")));
            Assert.True(table.Columns.Any(c => c.Name == "DateTime" && c.Default.Contains("'0001-01-01T00:00:00.000'")));
            Assert.True(table.Columns.Any(c => c.Name == "Decimal" && c.Default.Contains("42.23")));
            Assert.True(table.Columns.Any(c => c.Name == "Double" && c.Default.Contains("123.45")));
            Assert.True(table.Columns.Any(c => c.Name == "Guid" && c.Default.Contains("'00000000-0000-0000-0000-000000000000'")));
            Assert.True(table.Columns.Any(c => c.Name == "Int" && c.Default.Contains("0")));
            Assert.True(table.Columns.Any(c => c.Name == "Long" && c.Default.Contains("3456789")));
            Assert.True(table.Columns.Any(c => c.Name == "Short" && c.Default.Contains("256")));
            Assert.True(table.Columns.Any(c => c.Name == "Single" && c.Default.Contains("234.999")));
            Assert.True(table.Columns.Any(c => c.Name == "String" && c.Default.Contains("''")));

            WhenNotSqlCe(
                () =>
                    {
                        Assert.True(table.Columns.Any(c => c.Name == "DateTimeOffset" && c.Default == "('0001-01-01T00:00:00.000+00:00')"));
                        Assert.True(table.Columns.Any(c => c.Name == "Time" && c.Default == "('00:00:00')"));
                    });
        }