/// <summary>
        /// Generates a new version number for assignment.
        /// </summary>
        private long GetNewVersionNumber(GenerateScriptCommandArgs args)
        {
            var factory = new VersionStrategyFactory(_configurationManager);
            IVersionStrategy strategy = factory.GetStrategy();
            long             version  = strategy.GetNewVersionNumber(this, args);

            return(version);
        }
        public void Validation_should_succeed_if_MigrationName_has_value()
        {
            //  arrange
            var argSet = ArgumentSet.Parse(new string[] { "-n", "my_migration_name" });
            var args   = new GenerateScriptCommandArgs();

            //  act
            args.Parse(argSet);

            //  assert
            Assert.IsTrue(args.IsValid);
        }
        public void Validation_should_fail_if_MigrationName_is_null_or_empty()
        {
            //  arrange
            var argSet = ArgumentSet.Parse(new string[] { string.Empty });
            var args   = new GenerateScriptCommandArgs();

            //  act
            args.Parse(argSet);

            //  assert
            Assert.IsFalse(args.IsValid);
            Assert.AreEqual(1, args.Errors.Count());
        }
예제 #4
0
        public void Run_should_call_IMigrationDirectory_CreateBlankScript_with_correct_args()
        {
            //  arrange
            var mockMigrationDir = new Mock <IMigrationDirectory>();

            mockMigrationDir.Setup(dir => dir.CreateBlankScript("my_name")).Returns("C:\\1234_my_name.sql");

            var cmd = new GenerateScriptCommand(mockMigrationDir.Object);

            cmd.Log = new MockLog1();
            var cmdArgs = new GenerateScriptCommandArgs();

            cmdArgs.MigrationName = "my_name";

            //  act
            cmd.Run(cmdArgs);

            //  assert
            mockMigrationDir.Verify(dir => dir.CreateBlankScript("my_name"));
        }
예제 #5
0
        public void Run_should_log_file_name_of_new_migration_script()
        {
            //  arrange
            var mockMigrationDir = new Mock <IMigrationDirectory>();

            mockMigrationDir.Setup(dir => dir.CreateBlankScript("my_name")).Returns("C:\\1234_my_name.sql");

            var cmd     = new GenerateScriptCommand(mockMigrationDir.Object);
            var mockLog = new MockLog1();

            cmd.Log = mockLog;
            var cmdArgs = new GenerateScriptCommandArgs();

            cmdArgs.MigrationName = "my_name";

            //  act
            cmd.Run(cmdArgs);

            //  assert
            mockLog.Output.Contains(" 1234_my_name.sql ");
        }
        /// <summary>
        /// Creates a blank migration script with the given name.
        /// </summary>
        /// <returns>The path to the new migration script.</returns>
        public string CreateBlankScript(GenerateScriptCommandArgs args)
        {
            long version = GetNewVersionNumber(args);
            var  path    = GetPath(null, args);

            path = Path.Combine(path, version + "_" + SanitizeMigrationName(args.MigrationName) + ".sql");

            var setup = new System.Text.StringBuilder();

            setup.AppendLine("SET XACT_ABORT ON;");
            setup.AppendLine("");
            setup.Append("-- TODO: Replace with script implementation");

            var contents = new MigrationScriptContents(setup.ToString(), null);

            var file = new MigrationScriptFile(path);

            file.Write(contents);

            return(path);
        }