public void Enumerate_LoadsTextFilesCorrectly()
        {
            // ARRANGE
            var fsMock = new Mock<IFileSystem>();
            fsMock.Setup(m => m.ExistDir(It.IsAny<string>())).Returns(true);

            var fsMock2 = new InMemoryFileSystem(fsMock.Object);

            var defaultCulture = "en-US";
            CreateTemplateSet(fsMock2, @"c:\mock", "t1", null, defaultCulture, "txt");
            CreateTemplateSet(fsMock2, @"c:\mock", "t1", "de", defaultCulture, "txt");
            CreateTemplateSet(fsMock2, @"c:\mock", "t2", null, defaultCulture, "txt");
            CreateTemplateSet(fsMock2, @"c:\notinrightdir", "t3", null, defaultCulture, "txt");

            var configMock = new Mock<IConfiguration>();
            configMock.Setup(m => m.GetValue(FileFolderTemplateRepository.APP_KEY_FOLDER))
                .Returns(@"c:\mock");
            configMock.Setup(m => m.GetValue(FileFolderTemplateRepository.APP_KEY_DEFLANG))
                .Returns(defaultCulture);

            // ACT
            var queue = new FileFolderTemplateRepository(
                configuration: configMock.Object,
                fileSystem: fsMock2);

            var templates = new List<Template>();
            queue.EnumerateTemplates(templates.Add);

            // ASSERT
            Assert.AreEqual(3, templates.Count);

            AssertTemplateContents(templates, "t1", "en-US");
            AssertTemplateContents(templates, "t1", "de");
            AssertTemplateContents(templates, "t2", "en-US");
        }
        public void RemoveWorks()
        {
            // ARRANGE
            var fsMock = new Mock<IFileSystem>();
            fsMock.Setup(m => m.ExistDir(It.IsAny<string>())).Returns(true);

            var subject = new InMemoryFileSystem(fsMock.Object);

            var dir1 = @"c:\temp\one";

            var file1a = Path.Combine(dir1, @"file1");

            // ACT
            subject.Save(file1a, file1a);
            subject.Remove(file1a);

            // ASSERT
            var actual = subject.PeekOldest(dir1);
            Assert.IsNull(actual);
        }
        public void Enumerate_LoadsTextAndHtmlFilesCorrectlyWithincludes()
        {
            // ARRANGE
            var fsMock = new Mock<IFileSystem>();
            fsMock.Setup(m => m.ExistDir(It.IsAny<string>())).Returns(true);

            var fsMock2 = new InMemoryFileSystem(fsMock.Object);
            var basedir = @"c:\mock";
            var defaultCulture = "en-US";

            fsMock2.Save(Path.Combine(basedir, "t1", "body.txt"), "Hi @inc(body2.txt) bob");
            fsMock2.Save(Path.Combine(basedir, "t1", "body2.txt"), "alice");

            fsMock2.Save(Path.Combine(basedir, "t1", "body.html"), "Hi @inc(body2.html) john");
            fsMock2.Save(Path.Combine(basedir, "t1", "body2.html"), "mary");
           
            var configMock = new Mock<IConfiguration>();
            configMock.Setup(m => m.GetValue(FileFolderTemplateRepository.APP_KEY_FOLDER))
                .Returns(basedir);
            configMock.Setup(m => m.GetValue(FileFolderTemplateRepository.APP_KEY_DEFLANG))
                .Returns(defaultCulture);

            // ACT
            var queue = new FileFolderTemplateRepository(
                configuration: configMock.Object,
                fileSystem: fsMock2);

            var templates = new List<Template>();
            queue.EnumerateTemplates(templates.Add);

            // ASSERT
            Assert.AreEqual(1, templates.Count);

            var t = templates.FirstOrDefault(x => x.Key =="t1" && x.Language.Name.StartsWith("en"));

            Assert.AreEqual("Hi alice bob", t.Content.TextBody);
            Assert.AreEqual("Hi mary john", t.Content.Body);

        }
        public void MultipleFiles()
        {
            // ARRANGE
            var fsMock = new Mock<IFileSystem>();
            fsMock.Setup(m => m.ExistDir(It.IsAny<string>())).Returns(true);

            var subject = new InMemoryFileSystem(fsMock.Object);

            var dir1 = @"c:\temp\one";

            var file1a = Path.Combine(dir1, @"file1");
            var file1b = Path.Combine(dir1, @"file2");

            // ACT
            subject.Save(file1a, file1a);
            subject.Save(file1b, file1b);

            // ASSERT
            var actual1 = subject.PeekOldest(dir1);
            Assert.AreEqual(file1a, actual1);
            subject.Remove(file1a);

            var actual2 = subject.PeekOldest(dir1);
            Assert.AreEqual(file1b, actual2);
        }
        public void GetContentsReadFiles()
        {
            // ARRANGE
            var fsMock = new Mock<IFileSystem>();
            fsMock.Setup(m => m.ExistDir(It.IsAny<string>())).Returns(true);

            var subject = new InMemoryFileSystem(fsMock.Object);

            var dir1 = @"c:\temp\one";
            var dir2 = @"c:\temp\two";

            var file1a = Path.Combine(dir1, @"file1");
            var file1b = Path.Combine(dir1, @"file2");

            var file2a = Path.Combine(dir2, @"file1");
            var file2b = Path.Combine(dir2, @"file2");

            subject.Save(file1a, file1a);
            subject.Save(file2a, file2a);
            subject.Save(file1b, file1b);
            subject.Save(file2b, file2b);

          
            // ACT
            var contents = subject.GetContents(file1a.ToUpper());

            // ASSERT
            Assert.AreEqual(file1a, contents);
            
        }
        public void EnumerateGetAllFilesInDir()
        {
            // ARRANGE
            var fsMock = new Mock<IFileSystem>();
            fsMock.Setup(m => m.ExistDir(It.IsAny<string>())).Returns(true);

            var subject = new InMemoryFileSystem(fsMock.Object);

            var dir1 = @"c:\temp\one";
            var dir11 = @"c:\temp\one\a";
            var dir12 = @"c:\temp\one\b";

            var dir2 = @"c:\temp\two";

            var file1a = Path.Combine(dir1, @"file1");
            var file1b = Path.Combine(dir1, @"file2");

            var file11a = Path.Combine(dir11, @"file11");
            var file12a = Path.Combine(dir12, @"file12");
            
            var file2a = Path.Combine(dir2, @"file1");
            var file2b = Path.Combine(dir2, @"file2");

            subject.Save(file1a, file1a);
            subject.Save(file2a, file2a);
            subject.Save(file1b, file1b);
            subject.Save(file2b, file2b);
            subject.Save(file11a, file11a);
            subject.Save(file12a, file12a);

            var subdirs0 = new List<string>();
            var subdirs1 = new List<string>();
            var subdirs2 = new List<string>();
            
            // ACT
            subject.EnumerateDirectory(@"c:\temp", subdirs0.Add);
            subject.EnumerateDirectory(dir1, subdirs1.Add);
            subject.EnumerateDirectory(dir2, subdirs2.Add);

            // ASSERT
            Assert.AreEqual(2, subdirs0.Count);
            Assert.AreEqual("one", subdirs0.First());
            Assert.AreEqual("two", subdirs0.Last());

            Assert.AreEqual(2, subdirs1.Count);
            Assert.AreEqual("a", subdirs1.First());
            Assert.AreEqual("b", subdirs1.Last());

            Assert.AreEqual(0, subdirs2.Count);            
        }