コード例 #1
0
		// No wip files left behind
		public void Migrate_Succeeds_CleansUpWipFilesAndBackupFiles()
		{
			using (var e = new EnvironmentForTest())
			{
				e.WriteTestFile(EnvironmentForTest.XmlVersion1);
				var migrator = new FileMigrator(3, e.TestFilePath);
				migrator.AddVersionStrategy(new XPathVersion(3, "/configuration/@version"));
				migrator.AddMigrationStrategy(new XslStringMigrator(1, 2, EnvironmentForTest.Xsl1To2));
				migrator.AddMigrationStrategy(new XslStringMigrator(2, 3, EnvironmentForTest.Xsl2To3));

				migrator.Migrate();

				var files = Directory.GetFiles(e.Path);

				Assert.That(files.Length, Is.EqualTo(1));
				Assert.That(files, Has.Some.SamePath(e.TestFilePath));
			}
		}
コード例 #2
0
		public void GetFileVersion_FileHasNoVersionUsingDefaultStrategy_ReturnsZero()
		{
			using (var e = new EnvironmentForTest())
			{
				e.WriteTestFile(EnvironmentForTest.XmlNoVersion);

				var migrator = new FileMigrator(1, e.TestFilePath);
				migrator.AddVersionStrategy(new XPathVersion(1, "/configuration/@version"));
				migrator.AddVersionStrategy(new DefaultVersion(0, 0));

				Assert.AreEqual(0, migrator.GetFileVersion(e.TestFilePath));
			}
		}
コード例 #3
0
		public void Migrate_MissingMigrationStrategy_LeavesWipFiles()
		{
			using (var e = new EnvironmentForTest())
			{
				e.WriteTestFile(EnvironmentForTest.XmlVersion1);
				var migrator = new FileMigrator(3, e.TestFilePath);
				migrator.AddVersionStrategy(new XPathVersion(3, "/configuration/@version"));
				migrator.AddMigrationStrategy(new XslStringMigrator(1, 2, EnvironmentForTest.Xsl1To2));

				Assert.Throws<InvalidOperationException>(() => migrator.Migrate());

				var files = Directory.GetFiles(e.Path);
				Assert.That(files, Has.Some.SamePath(e.TestFilePath));
				Assert.That(files, Has.Some.SamePath(e.TestFilePath + ".bak"));
				Assert.That(files, Has.Some.SamePath(e.TestFilePath + ".Migrate_1_2"));
			}
		}
コード例 #4
0
		public void GetFileVersion_DataHasVersion_CorrectVersion()
		{
			using (var e = new EnvironmentForTest())
			{
				e.WriteTestFile(EnvironmentForTest.XmlVersion1);

				var migrator = new FileMigrator(7, e.TestFilePath);
				migrator.AddVersionStrategy(new XPathVersion(1, "/configuration/@version"));

				Assert.AreEqual(1, migrator.GetFileVersion(e.TestFilePath));
			}
		}
コード例 #5
0
		public void GetFileVersion_FileHasNoVersionAndNoDefaultStrategy_Throws()
		{
			using (var e = new EnvironmentForTest())
			{
				e.WriteTestFile(EnvironmentForTest.XmlNoVersion);

				var migrator = new FileMigrator(1, e.TestFilePath);
				migrator.AddVersionStrategy(new XPathVersion(1, "/configuration/@version"));

				Assert.Throws<ApplicationException>(
					() => migrator.GetFileVersion(e.TestFilePath)
				);
			}
		}
コード例 #6
0
		public void Migrate_UsingXslAndXml_ArrviesAtVersion3()
		{
			using (var e = new EnvironmentForTest())
			{
				e.WriteTestFile(EnvironmentForTest.XmlVersion1);
				var migrator = new FileMigrator(3, e.TestFilePath);
				migrator.AddVersionStrategy(new XPathVersion(3, "/configuration/@version"));
				migrator.AddMigrationStrategy(new XslStringMigrator(1, 2, EnvironmentForTest.Xsl1To2));
				migrator.AddMigrationStrategy(new XslStringMigrator(2, 3, EnvironmentForTest.Xsl2To3));

				migrator.Migrate();

				AssertThatXmlIn.File(e.TestFilePath).HasAtLeastOneMatchForXpath("configuration[@version='3']");
				AssertThatXmlIn.File(e.TestFilePath).HasAtLeastOneMatchForXpath("/configuration/blah");
			}
		}
コード例 #7
0
		public void Migrate_MissingMigrationStrategy_ThrowsAndSourceFileSameVersion()
		{
			using (var e = new EnvironmentForTest())
			{
				e.WriteTestFile(EnvironmentForTest.XmlVersion1);
				var migrator = new FileMigrator(3, e.TestFilePath);
				migrator.AddVersionStrategy(new XPathVersion(3, "/configuration/@version"));
				migrator.AddMigrationStrategy(new XslStringMigrator(1, 2, EnvironmentForTest.Xsl1To2));

				Assert.Throws<InvalidOperationException>(migrator.Migrate);

				AssertThatXmlIn.File(e.TestFilePath).HasAtLeastOneMatchForXpath("configuration[@version='1']");
				AssertThatXmlIn.File(e.TestFilePath).HasAtLeastOneMatchForXpath("/configuration/blah");
			}
		}
コード例 #8
0
		public void Migrate_WithBackupFileInTheWay_DoesntThrow()
		{
			using (var e = new EnvironmentForTest())
			{
				e.WriteTestFile(EnvironmentForTest.XmlVersion1);
				var migrator = new FileMigrator(3, e.TestFilePath);
				File.Copy(migrator.SourceFilePath, migrator.BackupFilePath); // Place the backup file in the way.
				migrator.AddVersionStrategy(new XPathVersion(3, "/configuration/@version"));
				migrator.AddMigrationStrategy(new XslStringMigrator(1, 2, EnvironmentForTest.Xsl1To2));
				migrator.AddMigrationStrategy(new XslStringMigrator(2, 3, EnvironmentForTest.Xsl2To3));

				migrator.Migrate();
			}
		}
コード例 #9
0
		public void NeedsMigration_WithSameVersion_False()
		{
			var migrator = new FileMigrator(10, "somefile");
			migrator.AddVersionStrategy(new VersionStrategyThatsGood(10, 10));
			Assert.That(migrator.NeedsMigration(), Is.False);
		}
コード例 #10
0
		public void NeedsMigration_WithDifferentFileVersion_True()
		{
			var migrator = new FileMigrator(10, "somefile");
			migrator.AddVersionStrategy(new VersionStrategyThatsGood(8, 10));
			Assert.That(migrator.NeedsMigration(), Is.True);
		}
コード例 #11
0
		public void FileVersion_TwoStragiesSort_UsesHigherStrategyFirst()
		{
			var migrator = new FileMigrator(10, "somefile");
			migrator.AddVersionStrategy(new VersionStrategyThatThrows(2));
			migrator.AddVersionStrategy(new VersionStrategyThatsGood(8, 10));
			Assert.That(migrator.GetFileVersion(), Is.EqualTo(8));
		}
コード例 #12
0
		public void FileVersion_OneStrategy_Correct()
		{
			var migrator = new FileMigrator(10, "somefile");
			migrator.AddVersionStrategy(new VersionStrategyThatsGood(8, 10));
			Assert.That(migrator.GetFileVersion(), Is.EqualTo(8));
		}