/src/FluentMigrator.Tests/Unit/Generators/MySql/MySqlAlterTableTestscs.cs

https://github.com/timosaikkonen/fluentmigrator · C# · 227 lines · 194 code · 32 blank · 1 comment · 0 complexity · a49074110b4a4f152c467ac5a972c6b2 MD5 · raw file

  1. using System.Data;
  2. using FluentMigrator.Expressions;
  3. using FluentMigrator.Runner.Generators;
  4. using FluentMigrator.Runner.Generators.MySql;
  5. using NUnit.Framework;
  6. using NUnit.Should;
  7. namespace FluentMigrator.Tests.Unit.Generators.MySql
  8. {
  9. public class MySqlAlterTableTestscs : BaseTableAlterTests
  10. {
  11. private MySqlGenerator _generator;
  12. [SetUp]
  13. public void Setup()
  14. {
  15. _generator = new MySqlGenerator();
  16. }
  17. [Test]
  18. public override void CanAddColumn()
  19. {
  20. var expression = GeneratorTestHelper.GetCreateColumnExpression();
  21. var sql = _generator.Generate(expression);
  22. sql.ShouldBe("ALTER TABLE `TestTable1` ADD COLUMN `TestColumn1` VARCHAR(5) NOT NULL");
  23. }
  24. [Test]
  25. public override void CanAddDecimalColumn()
  26. {
  27. var expression = GeneratorTestHelper.GetCreateDecimalColumnExpression();
  28. var sql = _generator.Generate(expression);
  29. sql.ShouldBe("ALTER TABLE `TestTable1` ADD COLUMN `TestColumn1` DECIMAL(19,2) NOT NULL");
  30. }
  31. [Test]
  32. public override void CanRenameColumn()
  33. {
  34. // MySql does not appear to have a way to change column without re-specifying the existing column definition
  35. var expression = GeneratorTestHelper.GetRenameColumnExpression();
  36. var result = _generator.Generate(expression);
  37. result.ShouldBe("ALTER TABLE `TestTable1` CHANGE `TestColumn1` `TestColumn2` ");
  38. }
  39. [Test]
  40. public override void CanRenameTable()
  41. {
  42. var expression = GeneratorTestHelper.GetRenameTableExpression();
  43. var sql = _generator.Generate(expression);
  44. sql.ShouldBe("RENAME TABLE `TestTable1` TO `TestTable2`");
  45. }
  46. [Test]
  47. public override void CanAlterColumn()
  48. {
  49. var expression = GeneratorTestHelper.GetAlterColumnExpression();
  50. var sql = _generator.Generate(expression);
  51. sql.ShouldBe("ALTER TABLE `TestTable1` MODIFY COLUMN `TestColumn1` VARCHAR(20) NOT NULL");
  52. }
  53. [Test]
  54. public override void CanCreateForeignKey()
  55. {
  56. var expression = GeneratorTestHelper.GetCreateForeignKeyExpression();
  57. var sql = _generator.Generate(expression);
  58. sql.ShouldBe(
  59. "ALTER TABLE `TestTable1` ADD CONSTRAINT `FK_Test` FOREIGN KEY (`TestColumn1`) REFERENCES `TestTable2` (`TestColumn2`)");
  60. }
  61. [TestCase(Rule.SetDefault, "SET DEFAULT"), TestCase(Rule.SetNull, "SET NULL"), TestCase(Rule.Cascade, "CASCADE")]
  62. public void CanCreateForeignKeyWithOnUpdateOptions(Rule rule, string output)
  63. {
  64. var expression = GeneratorTestHelper.GetCreateForeignKeyExpression();
  65. expression.ForeignKey.OnUpdate = rule;
  66. var sql = _generator.Generate(expression);
  67. sql.ShouldBe(
  68. string.Format("ALTER TABLE `TestTable1` ADD CONSTRAINT `FK_Test` FOREIGN KEY (`TestColumn1`) REFERENCES `TestTable2` (`TestColumn2`) ON UPDATE {0}", output));
  69. }
  70. [TestCase(Rule.SetDefault, "SET DEFAULT"), TestCase(Rule.SetNull, "SET NULL"), TestCase(Rule.Cascade, "CASCADE")]
  71. public void CanCreateForeignKeyWithOnDeleteOptions(Rule rule, string output)
  72. {
  73. var expression = GeneratorTestHelper.GetCreateForeignKeyExpression();
  74. expression.ForeignKey.OnDelete = rule;
  75. var sql = _generator.Generate(expression);
  76. sql.ShouldBe(
  77. string.Format("ALTER TABLE `TestTable1` ADD CONSTRAINT `FK_Test` FOREIGN KEY (`TestColumn1`) REFERENCES `TestTable2` (`TestColumn2`) ON DELETE {0}", output));
  78. }
  79. [Test]
  80. public void CanCreateForeignKeyWithOnDeleteAndOnUpdateOptions()
  81. {
  82. var expression = GeneratorTestHelper.GetCreateForeignKeyExpression();
  83. expression.ForeignKey.OnDelete = Rule.Cascade;
  84. expression.ForeignKey.OnUpdate = Rule.SetDefault;
  85. var sql = _generator.Generate(expression);
  86. sql.ShouldBe(
  87. "ALTER TABLE `TestTable1` ADD CONSTRAINT `FK_Test` FOREIGN KEY (`TestColumn1`) REFERENCES `TestTable2` (`TestColumn2`) ON DELETE CASCADE ON UPDATE SET DEFAULT");
  88. }
  89. [Test]
  90. public override void CanCreateMulitColumnForeignKey()
  91. {
  92. var expression = GeneratorTestHelper.GetCreateMultiColumnForeignKeyExpression();
  93. var sql = _generator.Generate(expression);
  94. sql.ShouldBe(
  95. "ALTER TABLE `TestTable1` ADD CONSTRAINT `FK_Test` FOREIGN KEY (`TestColumn1`, `TestColumn3`) REFERENCES `TestTable2` (`TestColumn2`, `TestColumn4`)");
  96. }
  97. [Test]
  98. public override void CanCreateAutoIncrementColumn()
  99. {
  100. var expression = GeneratorTestHelper.GetAlterColumnAddAutoIncrementExpression();
  101. var sql = _generator.Generate(expression);
  102. sql.ShouldBe("ALTER TABLE `TestTable1` MODIFY COLUMN `TestColumn1` INTEGER NOT NULL AUTO_INCREMENT");
  103. }
  104. [Test]
  105. public override void CanAlterSchema()
  106. {
  107. var expression = new AlterSchemaExpression();
  108. var result = _generator.Generate(expression);
  109. result.ShouldBe(string.Empty);
  110. }
  111. [Test]
  112. public void CanAlterSchemaInStrictMode()
  113. {
  114. _generator.compatabilityMode = Runner.CompatabilityMode.STRICT;
  115. Assert.Throws<DatabaseOperationNotSupportedException>(() => _generator.Generate(new CreateSchemaExpression()));
  116. }
  117. [Test]
  118. public void CanDropPrimaryKeyConstraint()
  119. {
  120. var expression = GeneratorTestHelper.GetDeletePrimaryKeyExpression();
  121. var result = _generator.Generate(expression);
  122. result.ShouldBe("ALTER TABLE `TestTable1` DROP PRIMARY KEY");
  123. }
  124. [Test]
  125. public void CanDropUniqueConstraint()
  126. {
  127. var expression = GeneratorTestHelper.GetDeleteUniqueConstraintExpression();
  128. var result = _generator.Generate(expression);
  129. result.ShouldBe("ALTER TABLE `TestTable1` DROP INDEX `TESTUNIQUECONSTRAINT`");
  130. }
  131. [Test]
  132. public void CanCreatePrimaryKeyConstraint()
  133. {
  134. var expression = GeneratorTestHelper.GetCreatePrimaryKeyExpression();
  135. var result = _generator.Generate(expression);
  136. result.ShouldBe("ALTER TABLE `TestTable1` ADD CONSTRAINT `PK_TestTable1_TestColumn1` PRIMARY KEY (`TestColumn1`)");
  137. }
  138. [Test]
  139. public void CanCreateNamedPrimaryKeyConstraint()
  140. {
  141. var expression = GeneratorTestHelper.GetCreateNamedPrimaryKeyExpression();
  142. var result = _generator.Generate(expression);
  143. result.ShouldBe("ALTER TABLE `TestTable1` ADD CONSTRAINT `TESTPRIMARYKEY` PRIMARY KEY (`TestColumn1`)");
  144. }
  145. [Test]
  146. public void CanCreateMultiColmnPrimaryKeyConstraint()
  147. {
  148. var expression = GeneratorTestHelper.GetCreateMultiColumnPrimaryKeyExpression();
  149. var result = _generator.Generate(expression);
  150. result.ShouldBe("ALTER TABLE `TestTable1` ADD CONSTRAINT `PK_TestTable1_TestColumn1_TestColumn2` PRIMARY KEY (`TestColumn1`, `TestColumn2`)");
  151. }
  152. [Test]
  153. public void CanCreateMultiColmnNamedPrimaryKeyConstraint()
  154. {
  155. var expression = GeneratorTestHelper.GetCreateMultiColumnNamedPrimaryKeyExpression();
  156. var result = _generator.Generate(expression);
  157. result.ShouldBe("ALTER TABLE `TestTable1` ADD CONSTRAINT `TESTPRIMARYKEY` PRIMARY KEY (`TestColumn1`, `TestColumn2`)");
  158. }
  159. [Test]
  160. public void CanCreateUniqueConstraint()
  161. {
  162. var expression = GeneratorTestHelper.GetCreateUniqueConstraintExpression();
  163. var result = _generator.Generate(expression);
  164. result.ShouldBe("ALTER TABLE `TestTable1` ADD CONSTRAINT `UC_TestTable1_TestColumn1` UNIQUE (`TestColumn1`)");
  165. }
  166. [Test]
  167. public void CanCreateNamedUniqueConstraint()
  168. {
  169. var expression = GeneratorTestHelper.GetCreateNamedUniqueConstraintExpression();
  170. var result = _generator.Generate(expression);
  171. result.ShouldBe("ALTER TABLE `TestTable1` ADD CONSTRAINT `TESTUNIQUECONSTRAINT` UNIQUE (`TestColumn1`)");
  172. }
  173. [Test]
  174. public void CanCreateMultiColmnUniqueConstraint()
  175. {
  176. var expression = GeneratorTestHelper.GetCreateMultiColumnUniqueConstraintExpression();
  177. var result = _generator.Generate(expression);
  178. result.ShouldBe("ALTER TABLE `TestTable1` ADD CONSTRAINT `UC_TestTable1_TestColumn1_TestColumn2` UNIQUE (`TestColumn1`, `TestColumn2`)");
  179. }
  180. [Test]
  181. public void CanCreateMultiColmnNamedUniqueConstraint()
  182. {
  183. var expression = GeneratorTestHelper.GetCreateMultiColumnNamedUniqueConstraintExpression();
  184. var result = _generator.Generate(expression);
  185. result.ShouldBe("ALTER TABLE `TestTable1` ADD CONSTRAINT `TESTUNIQUECONSTRAINT` UNIQUE (`TestColumn1`, `TestColumn2`)");
  186. }
  187. [Test]
  188. public void CanDropForiegnKeyConstraint()
  189. {
  190. var expression = GeneratorTestHelper.GetDeleteForeignKeyExpression();
  191. var result = _generator.Generate(expression);
  192. result.ShouldBe("ALTER TABLE `TestTable1` DROP FOREIGN KEY `FK_Test`");
  193. }
  194. }
  195. }