1+ using System ;
12using System . Linq ;
23using DotNetProjects . Migrator . Framework ;
34using DotNetProjects . Migrator . Providers . Impl . SQLite ;
@@ -12,7 +13,7 @@ namespace Migrator.Tests.Providers.SQLite;
1213public class SQLiteTransformationProvider_AddTableTests : SQLiteTransformationProviderTestBase
1314{
1415 [ Test ]
15- public void AddForeignKey ( )
16+ public void AddTable_UniqueOnly_ContainsNull ( )
1617 {
1718 const string tableName = "MyTableName" ;
1819 const string columnName = "MyColumnName" ;
@@ -22,9 +23,96 @@ public void AddForeignKey()
2223
2324 // Assert
2425 var createScript = ( ( SQLiteTransformationProvider ) Provider ) . GetSqlCreateTableScript ( tableName ) ;
25- Assert . That ( "CREATE TABLE MyTableName (MyColumnName INTEGER UNIQUE)" , Is . EqualTo ( createScript ) ) ;
26+ Assert . That ( "CREATE TABLE MyTableName (MyColumnName INTEGER NULL UNIQUE)" , Is . EqualTo ( createScript ) ) ;
2627
2728 var sqliteInfo = ( ( SQLiteTransformationProvider ) Provider ) . GetSQLiteTableInfo ( tableName ) ;
2829 Assert . That ( sqliteInfo . Uniques . Single ( ) . KeyColumns . Single ( ) , Is . EqualTo ( columnName ) ) ;
2930 }
31+
32+ [ Test ]
33+ public void AddTable_CompositePrimaryKey_ContainsNull ( )
34+ {
35+ const string tableName = "MyTableName" ;
36+ const string columnName1 = "Column1" ;
37+ const string columnName2 = "Column2" ;
38+
39+ // Arrange/Act
40+ Provider . AddTable ( tableName ,
41+ new Column ( columnName1 , System . Data . DbType . Int32 , ColumnProperty . PrimaryKey ) ,
42+ new Column ( columnName2 , System . Data . DbType . Int32 , ColumnProperty . PrimaryKey | ColumnProperty . NotNull )
43+ ) ;
44+
45+ Provider . ExecuteNonQuery ( $ "INSERT INTO { tableName } ({ columnName1 } , { columnName2 } ) VALUES (1,1)") ;
46+ Assert . Throws < Exception > ( ( ) => Provider . ExecuteNonQuery ( $ "INSERT INTO { tableName } ({ columnName1 } , { columnName2 } ) VALUES (1,1)") ) ;
47+
48+ // Assert
49+ var createScript = ( ( SQLiteTransformationProvider ) Provider ) . GetSqlCreateTableScript ( tableName ) ;
50+ Assert . That ( "CREATE TABLE MyTableName (Column1 INTEGER NOT NULL, Column2 INTEGER NOT NULL, PRIMARY KEY (Column1,Column2) )" , Is . EqualTo ( createScript ) ) ;
51+
52+ var pragmaTableInfos = ( ( SQLiteTransformationProvider ) Provider ) . GetPragmaTableInfoItems ( tableName ) ;
53+ Assert . That ( pragmaTableInfos . All ( x => x . NotNull ) , Is . True ) ;
54+
55+ var sqliteInfo = ( ( SQLiteTransformationProvider ) Provider ) . GetSQLiteTableInfo ( tableName ) ;
56+ Assert . That ( sqliteInfo . Columns . First ( ) . Name , Is . EqualTo ( columnName1 ) ) ;
57+ Assert . That ( sqliteInfo . Columns [ 1 ] . Name , Is . EqualTo ( columnName2 ) ) ;
58+ }
59+
60+ [ Test ]
61+ public void AddTable_SinglePrimaryKey_ContainsNull ( )
62+ {
63+ const string tableName = "MyTableName" ;
64+ const string columnName1 = "Column1" ;
65+ const string columnName2 = "Column2" ;
66+
67+ // Arrange/Act
68+ Provider . AddTable ( tableName ,
69+ new Column ( columnName1 , System . Data . DbType . Int32 , ColumnProperty . PrimaryKey ) ,
70+ new Column ( columnName2 , System . Data . DbType . Int32 , ColumnProperty . NotNull )
71+ ) ;
72+
73+ Provider . ExecuteNonQuery ( $ "INSERT INTO { tableName } ({ columnName1 } , { columnName2 } ) VALUES (1,1)") ;
74+ Assert . Throws < Exception > ( ( ) => Provider . ExecuteNonQuery ( $ "INSERT INTO { tableName } ({ columnName1 } , { columnName2 } ) VALUES (1,2)") ) ;
75+
76+ // Assert
77+ var createScript = ( ( SQLiteTransformationProvider ) Provider ) . GetSqlCreateTableScript ( tableName ) ;
78+ Assert . That ( "CREATE TABLE MyTableName (Column1 INTEGER NOT NULL PRIMARY KEY, Column2 INTEGER NOT NULL)" , Is . EqualTo ( createScript ) ) ;
79+
80+ var pragmaTableInfos = ( ( SQLiteTransformationProvider ) Provider ) . GetPragmaTableInfoItems ( tableName ) ;
81+ Assert . That ( pragmaTableInfos . All ( x => x . NotNull ) , Is . True ) ;
82+
83+ var sqliteInfo = ( ( SQLiteTransformationProvider ) Provider ) . GetSQLiteTableInfo ( tableName ) ;
84+ Assert . That ( sqliteInfo . Columns . First ( ) . Name , Is . EqualTo ( columnName1 ) ) ;
85+ Assert . That ( sqliteInfo . Columns [ 1 ] . Name , Is . EqualTo ( columnName2 ) ) ;
86+ }
87+
88+ [ Test ]
89+ public void AddTable_MiscellaneousColumns_Succeeds ( )
90+ {
91+ const string tableName = "MyTableName" ;
92+ const string columnName1 = "Column1" ;
93+ const string columnName2 = "Column2" ;
94+
95+ // Arrange/Act
96+ Provider . AddTable ( tableName ,
97+ new Column ( columnName1 , System . Data . DbType . Int32 , ColumnProperty . NotNull | ColumnProperty . Identity | ColumnProperty . PrimaryKey ) ,
98+ new Column ( columnName2 , System . Data . DbType . Int32 , ColumnProperty . Null | ColumnProperty . Unique )
99+ ) ;
100+
101+ Provider . ExecuteNonQuery ( $ "INSERT INTO { tableName } ({ columnName1 } , { columnName2 } ) VALUES (1,1)") ;
102+ Assert . Throws < Exception > ( ( ) => Provider . ExecuteNonQuery ( $ "INSERT INTO { tableName } ({ columnName1 } , { columnName2 } ) VALUES (1,1)") ) ;
103+
104+ // Assert
105+ var createScript = ( ( SQLiteTransformationProvider ) Provider ) . GetSqlCreateTableScript ( tableName ) ;
106+ Assert . That ( "CREATE TABLE MyTableName (Column1 INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Column2 INTEGER NULL UNIQUE)" , Is . EqualTo ( createScript ) ) ;
107+
108+ var pragmaTableInfos = ( ( SQLiteTransformationProvider ) Provider ) . GetPragmaTableInfoItems ( tableName ) ;
109+ Assert . That ( pragmaTableInfos . First ( ) . NotNull , Is . True ) ;
110+ Assert . That ( pragmaTableInfos [ 1 ] . NotNull , Is . False ) ;
111+
112+ var sqliteInfo = ( ( SQLiteTransformationProvider ) Provider ) . GetSQLiteTableInfo ( tableName ) ;
113+ Assert . That ( sqliteInfo . Columns . First ( ) . Name , Is . EqualTo ( columnName1 ) ) ;
114+ Assert . That ( sqliteInfo . Columns [ 1 ] . Name , Is . EqualTo ( columnName2 ) ) ;
115+ }
116+
117+
30118}
0 commit comments