public void LoadOrCreateConfigTest()
{
ConfigFile config = null;
List<string> dirs = new List<string>()
{
@"c:\test1",
@"c:\test2",
@"c:\test3",
@"c:\test4"
};
Dictionary<string, MockFileData> tests = new Dictionary<string, MockFileData>();
tests.Add(Path.Combine(dirs[0], "config.xml"),
new MockFileData(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<config>" +
"</config>"));
tests.Add(Path.Combine(dirs[1], "config.xml"),
new MockFileData(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<config>" +
" <skipRules>" +
" <skipRule></skipRule>" +
" </skipRules>" +
"</config>"));
tests.Add(Path.Combine(dirs[2], "config.xml"),
new MockFileData(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<config>" +
" <skipRules>" +
" <skipRule isDirectory=\"true\">skip1</skipRule>" +
" </skipRules>" +
"</config>"));
tests.Add(Path.Combine(dirs[3], "config.xml"),
new MockFileData(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<config>" +
" <skipRules>" +
" <skipRule isDirectory=\"false\">skip1</skipRule>" +
" <skipRule>skip2</skipRule>" +
" </skipRules>" +
"</config>"));
var expected = new[]{
new List<SkipRule>(),
new List<SkipRule>(){new SkipRule()},
new List<SkipRule>(){new SkipRule(){Expression = "skip1", IsDirectory = true}},
new List<SkipRule>(){
new SkipRule(){Expression = "skip1", IsDirectory = false},
new SkipRule(){Expression = "skip2", IsDirectory = false}
}
};
FileHelper.FileSystem = new MockFileSystem(tests);
for(int i = 0; i < dirs.Count; i++)
{
_mockEnv.Setup(m => m.SiteReplicatorPath).Returns(dirs[i]);
config = new ConfigFile();
config.LoadOrCreate();
VerifySkipEnumerables(expected[i].AsEnumerable(), config.SkipRules);
}
// Test file creation
_mockEnv.Setup(m => m.SiteReplicatorPath).Returns(@"c:\foo");
config = new ConfigFile();
config.LoadOrCreate();
Assert.IsTrue(FileHelper.FileSystem.File.Exists(@"c:\foo\config.xml"), "Didn't create a new config file");
VerifySkipEnumerables(new List<SkipRule>().AsEnumerable(), config.SkipRules);
}