public void Maps_Templates_Correctly()
        {
            // Arrange
            var provider   = new PetaPocoUnitOfWorkProvider(Logger);
            var unitOfWork = provider.GetUnitOfWork();

            using (var templateRepo = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of <ILogger>(), SqlSyntax, Mock.Of <IFileSystem>(), Mock.Of <IFileSystem>(), Mock.Of <ITemplatesSection>()))
                using (var repository = CreateRepository(unitOfWork))
                {
                    var templates = new[]
                    {
                        new Template("test1.cshtml", "test1", "test1"),
                        new Template("test2.cshtml", "test2", "test2"),
                        new Template("test3.cshtml", "test3", "test3")
                    };
                    foreach (var template in templates)
                    {
                        templateRepo.AddOrUpdate(template);
                    }
                    unitOfWork.Commit();

                    var contentType = MockedContentTypes.CreateSimpleContentType();
                    contentType.AllowedTemplates = new[] { templates[0], templates[1] };
                    contentType.SetDefaultTemplate(templates[0]);
                    repository.AddOrUpdate(contentType);
                    unitOfWork.Commit();

                    //re-get
                    var result = repository.Get(contentType.Id);

                    Assert.AreEqual(2, result.AllowedTemplates.Count());
                    Assert.AreEqual(templates[0].Id, result.DefaultTemplate.Id);
                }
        }
        public void Can_Perform_Add_MasterPage()
        {
            // Arrange
            var provider = new PetaPocoUnitOfWorkProvider();
            var unitOfWork = provider.GetUnitOfWork();
            var repository = new TemplateRepository(unitOfWork, NullCacheProvider.Current, _masterPageFileSystem, _viewsFileSystem);

            // Act
            var template = new Template("test-add-masterpage.master", "test", "test") { Content = @"<%@ Master Language=""C#"" %>" };
            repository.AddOrUpdate(template);
            unitOfWork.Commit();

            //Assert
            Assert.That(repository.Get("test"), Is.Not.Null);
            Assert.That(_masterPageFileSystem.FileExists("test.master"), Is.True);
        }
        public void Can_Perform_Delete_On_Nested_Templates()
        {
            // Arrange
            var provider = new PetaPocoUnitOfWorkProvider();
            var unitOfWork = provider.GetUnitOfWork();
            var repository = new TemplateRepository(unitOfWork, NullCacheProvider.Current, _masterPageFileSystem, _viewsFileSystem);

            var parent = new Template("test-parent-masterpage.master", "parent", "parent") { Content = @"<%@ Master Language=""C#"" %>" };
            var child = new Template("test-child-masterpage.master", "child", "child") { Content = @"<%@ Master Language=""C#"" %>" };
            var baby = new Template("test-baby-masterpage.master", "baby", "baby") { Content = @"<%@ Master Language=""C#"" %>" };            
            child.MasterTemplateAlias = parent.Alias;
            child.MasterTemplateId = new Lazy<int>(() => parent.Id);
            baby.MasterTemplateAlias = child.Alias;
            baby.MasterTemplateId = new Lazy<int>(() => child.Id);
            repository.AddOrUpdate(parent);
            repository.AddOrUpdate(child);
            repository.AddOrUpdate(baby);
            unitOfWork.Commit();

            // Act
            var templates = repository.Get("parent");
            repository.Delete(templates);
            unitOfWork.Commit();

            // Assert
            Assert.IsNull(repository.Get("test"));
        }
        public void Can_Get_Template_Tree()
        {
            // Arrange
            var provider = new PetaPocoUnitOfWorkProvider();
            var unitOfWork = provider.GetUnitOfWork();
            var repository = new TemplateRepository(unitOfWork, NullCacheProvider.Current, _masterPageFileSystem, _viewsFileSystem);

            var parent = new Template("test-parent-masterpage.master", "parent", "parent") { Content = @"<%@ Master Language=""C#"" %>" };
            
            var child1 = new Template("test-child1-masterpage.master", "child1", "child1") { Content = @"<%@ Master Language=""C#"" %>" };
            var toddler1 = new Template("test-toddler1-masterpage.master", "toddler1", "toddler1") { Content = @"<%@ Master Language=""C#"" %>" };
            var toddler2 = new Template("test-toddler2-masterpage.master", "toddler2", "toddler2") { Content = @"<%@ Master Language=""C#"" %>" };
            var baby1 = new Template("test-baby1-masterpage.master", "baby1", "baby1") { Content = @"<%@ Master Language=""C#"" %>" };

            var child2 = new Template("test-child2-masterpage.master", "child2", "child2") { Content = @"<%@ Master Language=""C#"" %>" };
            var toddler3 = new Template("test-toddler3-masterpage.master", "toddler3", "toddler3") { Content = @"<%@ Master Language=""C#"" %>" };
            var toddler4 = new Template("test-toddler4-masterpage.master", "toddler4", "toddler4") { Content = @"<%@ Master Language=""C#"" %>" };
            var baby2 = new Template("test-baby2-masterpage.master", "baby2", "baby2") { Content = @"<%@ Master Language=""C#"" %>" };
            
            
            child1.MasterTemplateAlias = parent.Alias;
            child1.MasterTemplateId = new Lazy<int>(() => parent.Id);
            child2.MasterTemplateAlias = parent.Alias;
            child2.MasterTemplateId = new Lazy<int>(() => parent.Id);

            toddler1.MasterTemplateAlias = child1.Alias;
            toddler1.MasterTemplateId = new Lazy<int>(() => child1.Id);
            toddler2.MasterTemplateAlias = child1.Alias;
            toddler2.MasterTemplateId = new Lazy<int>(() => child1.Id);

            toddler3.MasterTemplateAlias = child2.Alias;
            toddler3.MasterTemplateId = new Lazy<int>(() => child2.Id);
            toddler4.MasterTemplateAlias = child2.Alias;
            toddler4.MasterTemplateId = new Lazy<int>(() => child2.Id);

            baby1.MasterTemplateAlias = toddler2.Alias;
            baby1.MasterTemplateId = new Lazy<int>(() => toddler2.Id);

            baby2.MasterTemplateAlias = toddler4.Alias;
            baby2.MasterTemplateId = new Lazy<int>(() => toddler4.Id);

            repository.AddOrUpdate(parent);
            repository.AddOrUpdate(child1);
            repository.AddOrUpdate(child2);
            repository.AddOrUpdate(toddler1);
            repository.AddOrUpdate(toddler2);
            repository.AddOrUpdate(toddler3);
            repository.AddOrUpdate(toddler4);
            repository.AddOrUpdate(baby1);
            repository.AddOrUpdate(baby2);
            unitOfWork.Commit();

            // Act
            var rootNode = repository.GetTemplateNode("parent");
            
            // Assert
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "parent"));
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "child1"));
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "child2"));
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "toddler1"));
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "toddler2"));
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "toddler3"));
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "toddler4"));
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "baby1"));
            Assert.IsNotNull(repository.FindTemplateInTree(rootNode, "baby2"));
        }
        public void Can_Perform_Delete()
        {
            // Arrange
            var provider = new PetaPocoUnitOfWorkProvider();
            var unitOfWork = provider.GetUnitOfWork();
            var repository = new TemplateRepository(unitOfWork, NullCacheProvider.Current, _masterPageFileSystem, _viewsFileSystem);

            var template = new Template("test-add-masterpage.master", "test", "test") { Content = @"<%@ Master Language=""C#"" %>" };
            repository.AddOrUpdate(template);
            unitOfWork.Commit();

            // Act
            var templates = repository.Get("test");
            repository.Delete(templates);
            unitOfWork.Commit();

            // Assert
            Assert.IsNull(repository.Get("test"));
        }