public void Should_Replace_Known_Tokens_When_Logged_In_As_Editor()
        {
            // Arrange
            string menuMarkup   = "* %categories%\r\n\r\n%allpages%\r\n%mainpage%\r\n%newpage%\r\n%managefiles%\r\n%sitesettings%\r\n";
            string expectedHtml = "<ul><li><a href=\"/pages/alltags\">Categories</a></li></ul>" +
                                  "<a href=\"/pages/allpages\">All pages</a>" +
                                  "<a href=\"/\">Main Page</a>" +
                                  "<a href=\"/pages/new\">New page</a><a href=\"/filemanager\">Manage files</a>";

            RepositoryMock repository = new RepositoryMock();

            repository.SiteSettings            = new SiteSettings();
            repository.SiteSettings.MarkupType = "Markdown";
            repository.SiteSettings.MenuMarkup = menuMarkup;

            UserContextStub userContext = new UserContextStub();

            userContext.IsAdmin    = false;
            userContext.IsLoggedIn = true;

            ApplicationSettings applicationSettings = new ApplicationSettings();

            applicationSettings.Installed = true;
            CacheMock cache     = new CacheMock();
            SiteCache siteCache = new SiteCache(applicationSettings, cache);

            MarkupConverter converter = new MarkupConverter(applicationSettings, repository, _pluginFactory);
            MenuParser      parser    = new MenuParser(converter, repository, siteCache, userContext);

            // Act
            string actualHtml = parser.GetMenu();

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml), actualHtml);
        }
        public void Should_Remove_Empty_UL_Tags_For_Logged_In_Tokens_When_Not_Logged_In(string markupType, string expectedHtml)
        {
            // Arrange - \r\n is important so the markdown is valid
            string menuMarkup = "%mainpage%\r\n\r\n* %newpage%\r\n* %managefiles%\r\n* %sitesettings%\r\n";

            RepositoryMock repository = new RepositoryMock();

            repository.SiteSettings            = new SiteSettings();
            repository.SiteSettings.MarkupType = markupType;
            repository.SiteSettings.MenuMarkup = menuMarkup;

            UserContextStub userContext = new UserContextStub();

            userContext.IsLoggedIn = false;

            ApplicationSettings applicationSettings = new ApplicationSettings();

            applicationSettings.Installed = true;
            CacheMock cache     = new CacheMock();
            SiteCache siteCache = new SiteCache(applicationSettings, cache);

            MarkupConverter converter = new MarkupConverter(applicationSettings, repository, _pluginFactory);
            MenuParser      parser    = new MenuParser(converter, repository, siteCache, userContext);

            // Act
            string actualHtml = parser.GetMenu();

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml));
        }
        public void MenuParser_ParseFromXml_HandlesTopLevelElement()
        {
            var menu = MenuParser.ParseFromXml("<menu></menu>");

            menu.Should().NotBeNull();
            menu.Items.Should().HaveCount(0, "becuase there are no child elements in the xml");
        }
        public void MisnamedAttributeMenuItemParseIgnored()
        {
            //Arrange
            string        testXml   = @"
                <menu>
	                <item>
		                <displayName>Home</displayName>
		                <path value='/Default.aspx'/>
	                </item>
	                <item>
		                <displayName>Misnamed path</displayName>
		                <path wrongvalue='/Default.aspx'/>
	                </item>
                </menu>";
            XPathDocument testInput = CreateXmLDocument(testXml);

            //Act
            MenuParser menu   = new MenuParser("/Default.aspx");
            bool       result = menu.Parse(testInput);

            //Assert
            Assert.IsNotNull(menu);
            Assert.IsTrue(result);
            Assert.IsTrue(1 == menu.Items.Count);
        }
        public void Should_Replace_Markdown_With_External_Link()
        {
            // Arrange
            string menuMarkup   = "* [First link](http://www.google.com)\r\n";
            string expectedHtml = "<ul><li><a href=\"http://www.google.com\" rel=\"nofollow\" class=\"external-link\">First link</a></li></ul>";

            RepositoryMock repository = new RepositoryMock();

            repository.SiteSettings            = new SiteSettings();
            repository.SiteSettings.MarkupType = "Markdown";
            repository.SiteSettings.MenuMarkup = menuMarkup;

            UserContextStub     userContext         = new UserContextStub();
            ApplicationSettings applicationSettings = new ApplicationSettings();

            applicationSettings.Installed = true;

            CacheMock cache     = new CacheMock();
            SiteCache siteCache = new SiteCache(applicationSettings, cache);

            MarkupConverter converter = new MarkupConverter(applicationSettings, repository, _pluginFactory);
            MenuParser      parser    = new MenuParser(converter, repository, siteCache, userContext);

            // Act
            string actualHtml = parser.GetMenu();

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml));
        }
        public void Should_Replace_Markdown_With_Internal_Link()
        {
            // Arrange
            string menuMarkup   = "* [First link](my-page)\r\n";
            string expectedHtml = "<ul><li><a href=\"/wiki/1/my-page\">First link</a></li></ul>";

            RepositoryMock repository = new RepositoryMock();

            repository.AddNewPage(new Page()
            {
                Title = "my page", Id = 1
            }, "text", "user", DateTime.Now);

            repository.SiteSettings            = new SiteSettings();
            repository.SiteSettings.MarkupType = "Markdown";
            repository.SiteSettings.MenuMarkup = menuMarkup;

            UserContextStub     userContext         = new UserContextStub();
            ApplicationSettings applicationSettings = new ApplicationSettings();

            applicationSettings.Installed = true;

            CacheMock cache     = new CacheMock();
            SiteCache siteCache = new SiteCache(applicationSettings, cache);

            MarkupConverter converter = new MarkupConverter(applicationSettings, repository, _pluginFactory);
            MenuParser      parser    = new MenuParser(converter, repository, siteCache, userContext);

            // Act
            string actualHtml = parser.GetMenu();

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml));
        }
Exemple #7
0
    public static async Task <WeekMenu> LoadAsync(CancellationToken cancellation = default)
    {
        var menuHtml = await MenuRequester.RequestMenuHtmlAsync(cancellation);

        var menus = MenuParser.ParseAllDayMenu(menuHtml);

        return(new WeekMenu(menus));
    }
        public void ParseMenuExample1Success()
        {
            //Arrange
            // This test covers just the basis that parsing happens successfully.
            string        testXml   = @"<menu>
	            <item>
		            <displayName>Home</displayName>
		            <path value='/Default.aspx'/>
	            </item>
	            <item>
		            <displayName>Trips</displayName>
		            <path value='/Requests/Quotes/CreateQuote.aspx'/>
		            <subMenu>
			            <item>
				            <displayName>Create Quote</displayName>
				            <path value='/Requests/Quotes/CreateQuote.aspx'/>
			            </item>
			            <item>
				            <displayName>Open Quotes</displayName>
				            <path value='/Requests/OpenQuotes.aspx'/>
			            </item>
			            <item superOverride='true'>
				            <displayName>Scheduled Trips</displayName>
				            <path value='/Requests/Trips/ScheduledTrips.aspx'/>
			            </item>
		            </subMenu>
	            </item>
	            <item>
		            <displayName>Company</displayName>
		            <path value='/mvc/company/view' />
		            <subMenu>
			            <item>
				            <displayName>Customers</displayName>
				            <path value='/customers/customers.aspx'/>
			            </item>
			            <item>
				            <displayName>Pilots</displayName>
				            <path value='/pilots/pilots.aspx'/>
			            </item>
			            <item>
				            <displayName>Aircraft</displayName>
				            <path value='/aircraft/Aircraft.aspx'/>
			            </item>
		            </subMenu>
	            </item>
            </menu>";
            XPathDocument testInput = CreateXmLDocument(testXml);

            //Act
            MenuParser menu   = new MenuParser("/Requests/OpenQuotes.aspx");
            bool       result = menu.Parse(testInput);

            //Assert
            Assert.IsNotNull(menu);
            Assert.IsTrue(result);
        }
        public void MenuParser_ParseFromFile_ThrowsOnNullOrEmpty()
        {
            Action parseAction = () => MenuParser.ParseFromFile(null);

            parseAction.ShouldThrow <ArgumentException>("because we don't accept null for the path");

            parseAction = () => MenuParser.ParseFromFile(string.Empty);

            parseAction.ShouldThrow <ArgumentException>("because we don't accept an empty string for the path");
        }
Exemple #10
0
        public void Puzzle2()
        {
            var exampleInput = new FileReader()
                               .GetResource("AdventOfCode2020.Tests.Day21.PuzzleInput.txt");
            var menu = MenuParser.Parse(exampleInput);

            var foodsWithNoAllergens = menu.GetFoodWithAllergens();
            var odered = string.Join(",", foodsWithNoAllergens.OrderBy(x => x.Key).Select(x => x.Value.Name));

            Assert.Equal("lkv,lfcppl,jhsrjlj,jrhvk,zkls,qjltjd,xslr,rfpbpn", odered);
        }
Exemple #11
0
        public void Puzzle1()
        {
            var exampleInput = new FileReader()
                               .GetResource("AdventOfCode2020.Tests.Day21.PuzzleInput.txt");
            var menu = MenuParser.Parse(exampleInput);

            var foodsWithNoAllergens = menu.GetFoodWithNoAllergens().Select(x => x.Name);
            var count = menu.GetInstances(foodsWithNoAllergens);

            Assert.Equal(2779, count);
        }
Exemple #12
0
        static MenuParser ParseXmlMenuFile(string filePath, string activePath)
        {
            FileStream file = new FileStream(filePath, FileMode.Open);

            XPathDocument xpath = new XPathDocument(file);

            MenuParser menus = new MenuParser(activePath);

            menus.Parse(xpath);

            return(menus);
        }
        public void FindAtThreeDeepSuccess()
        {
            //Arrange
            // To test for matching paths in root and submenus
            string        testXml   = @"
                <menu>
	                <item>
		                <displayName>Home</displayName>
		                <path value='/Default.aspx'/>
	                </item>
	                <item>
		                <displayName>Trips</displayName>
		                <path value='/Requests/Quotes/CreateQuote.aspx'/>
		                <subMenu>
			                <item superOverride='true'>
				                <displayName>Scheduled Trips</displayName>
				                <path value='/Requests/Trips/ScheduledTrips.aspx'/>
			                </item>
			                <item>
				                <displayName>Open Quotes</displayName>
				                <path value='/Requests/OpenQuotes.aspx'/>
		                        <subMenu>
			                        <item superOverride='true'>
				                        <displayName>Scheduled Trips</displayName>
				                        <path value='/Requests/Trips/ScheduledTrips.aspx'/>
			                        </item>
			                        <item>
				                        <displayName>Open Quotes at leaf</displayName>
		                                <path value='/Default.aspx'/>
			                        </item>
		                        </subMenu>
			                </item>
		                </subMenu>
	                </item>
                </menu>";
            XPathDocument testInput = CreateXmLDocument(testXml);

            //Act
            MenuParser      menu   = new MenuParser("/Requests/Trips/ScheduledTrips.aspx");
            bool            result = menu.Parse(testInput);
            List <MenuNode> found  = menu.FindAll(x => x.Path.Equals("/Requests/Trips/ScheduledTrips.aspx"));

            //Assert
            // The following is not an idea Unit test construction because it assumes knowledge of what is being tested.
            // That is a fault of the abstraction being incomplete. This is solved by providing an acces abstraction,
            // such as an iterator so the individual menu items can be retrieved with operations. too complex for this
            // code exercise but would definatately be needed for production use - just in general.
            Assert.IsNotNull(menu);
            Assert.IsTrue(2 == found.Count);
            Assert.AreSame(menu.Items [1].SubMenu[0], found[0]);
            Assert.AreSame(menu.Items [1].SubMenu[1].SubMenu[0], found[1]);
        }
Exemple #14
0
        /// <summary>
        /// Retrieves the (usually left) menu containing the new page, settings etc. options
        /// </summary>
        public string GetMenu(IUserContext userContext)
        {
            MenuParser parser = new MenuParser(_markupConverter, Repository, _siteCache, userContext);

            // TODO: turn this into a theme-based bit of template HTML
            StringBuilder builder = new StringBuilder();

            builder.AppendLine("<div id=\"leftmenu\">");
            builder.AppendLine(parser.GetMenu());
            builder.AppendLine("</div>");

            return(builder.ToString());
        }
Exemple #15
0
        public void Example1()
        {
            const string input = @"mxmxvkd kfcds sqjhc nhms (contains dairy, fish)
trh fvjkl sbzzf mxmxvkd (contains dairy)
sqjhc fvjkl (contains soy)
sqjhc mxmxvkd sbzzf (contains fish)";

            var menu = MenuParser.Parse(input);
            var foodsWithNoAllergens = menu.GetFoodWithNoAllergens().Select(x => x.Name);

            var count = menu.GetInstances(foodsWithNoAllergens);

            Assert.Equal(5, count);
        }
        public void ActiveMenuThreeDeepSuccess()
        {
            //Arrange
            // To test for active paths in root and submenus
            string        testXml   = @"
                <menu>
	                <item>
		                <displayName>Home</displayName>
		                <path value='/NotDefault.aspx'/>
	                </item>
	                <item>
		                <displayName>Trips</displayName>
		                <path value='/Requests/Quotes/CreateQuote.aspx'/>
		                <subMenu>
			                <item superOverride='true'>
				                <displayName>Scheduled Trips</displayName>
				                <path value='/Requests/Trips/ScheduledTrips.aspx'/>
			                </item>
			                <item>
				                <displayName>Open Quotes</displayName>
				                <path value='/Requests/OpenQuotes.aspx'/>
		                        <subMenu>
			                        <item superOverride='true'>
				                        <displayName>Scheduled Trips</displayName>
				                        <path value='/Requests/Trips/ScheduledTrips.aspx'/>
			                        </item>
			                        <item>
				                        <displayName>Open Quotes at leaf</displayName>
		                                <path value='/Default.aspx'/>
			                        </item>
		                        </subMenu>
			                </item>
		                </subMenu>
	                </item>
                </menu>";
            XPathDocument testInput = CreateXmLDocument(testXml);

            //Act
            MenuParser      menu   = new MenuParser("/Default.aspx");
            bool            result = menu.Parse(testInput);
            List <MenuNode> found  = menu.FindAll(x => true == x.Active);

            //Assert
            Assert.IsNotNull(menu);
            Assert.IsTrue(3 == found.Count);
            Assert.IsTrue(found[0].Name.Equals("Trips"));
            Assert.IsTrue(found[1].Name.Equals("Open Quotes"));
            Assert.IsTrue(found[2].Name.Equals("Open Quotes at leaf"));
        }
Exemple #17
0
        public void Puzzle2Example1()
        {
            const string input = @"mxmxvkd kfcds sqjhc nhms (contains dairy, fish)
trh fvjkl sbzzf mxmxvkd (contains dairy)
sqjhc fvjkl (contains soy)
sqjhc mxmxvkd sbzzf (contains fish)";

            var menu = MenuParser.Parse(input);

            var foodsWithNoAllergens = menu.GetFoodWithAllergens();

            var odered = string.Join(",", foodsWithNoAllergens.OrderBy(x => x.Key).Select(x => x.Value.Name));

            Assert.Equal("mxmxvkd,sqjhc,fvjkl", odered);
        }
        public void EmptyMenuParseSuccessAndReturnsFalse()
        {
            //Arrange
            string        testXml   = @"
                <menu>
                </menu>";
            XPathDocument testInput = CreateXmLDocument(testXml);

            //Act
            MenuParser menu   = new MenuParser("/Default.aspx");
            bool       result = menu.Parse(testInput);

            //Assert
            Assert.IsNotNull(menu);
            Assert.IsFalse(result);
        }
Exemple #19
0
        public void Menu_FromTestFile_ProperlySetsValue(string pathToFile, string path, bool expectedResult, string reason)
        {
            var menu = MenuParser.ParseFromFile(pathToFile);

            menu.Should().NotBeNull();

            menu.SetActive(path);

            // The call would have been successful if at least one of the top level elements is set to true
            bool result = false;

            foreach (var mi in menu.Items)
            {
                result |= mi.IsActive;
            }

            result.ShouldBeEquivalentTo(expectedResult, reason);
        }
        public void EmptySingleMenuItemParseFails()
        {
            //Arrange
            string        testXml   = @"
                <menu>
	                <item>
	                </item>
                </menu>";
            XPathDocument testInput = CreateXmLDocument(testXml);

            //Act
            MenuParser menu   = new MenuParser("/Default.aspx");
            bool       result = menu.Parse(testInput);

            //Assert
            Assert.IsNotNull(menu);
            Assert.IsFalse(result);
        }
        public void SingleMenuParseSuccess()
        {
            //Arrange
            string        testXml   = @"
                <menu>
	                <item>
		                <displayName>Home</displayName>
		                <path value='/Default.aspx'/>
	                </item>
                </menu>";
            XPathDocument testInput = CreateXmLDocument(testXml);

            //Act
            MenuParser menu   = new MenuParser("/Default.aspx");
            bool       result = menu.Parse(testInput);

            //Assert
            Assert.IsNotNull(menu);
            Assert.IsTrue(result);
        }
Exemple #22
0
        static void Main(string[] args)
        {
            var arguments = LoadArguments(args);

            switch (arguments.Option)
            {
            case ProgramOption.Help:
                PrintHelp();
                return;

            case ProgramOption.Update:
            case ProgramOption.Post:

                var restaurantSettingses = JsonParser.ParseRestaurantSetting(arguments.JsonFilePath);
                var slackSettings        = JsonParser.ParseSlackSetting(arguments.SlackFilePath);

                var menus = MenuParser.GetMenuFromMenicka(restaurantSettingses);

                if (CheckMenu(menus) == false)
                {
                    ScheduleUdate();
                }
                else
                {
                    ScheduleEnd();
                }

                var slackHelper = new SlackHelper(slackSettings);

                if (arguments.Option == ProgramOption.Post)
                {
                    slackHelper.PostMenu(menus);
                }
                else
                {
                    slackHelper.UpdateMenu(menus);
                }

                break;
            }
        }
Exemple #23
0
        public ObservableCollection <CollectionVM> LoadCollections(ObservableCollection <LauncherVM> launchers)
        {
            //todo :make paths relative
            ObservableCollection <CollectionVM> collections = new ObservableCollection <CollectionVM>();

            string[] dirs = Directory.GetDirectories(RetroFE.GetAbsolutePath() + "/Collections");

            foreach (string dir in dirs)
            {
                string         settingsFile = Path.Combine(dir, "Settings.conf");
                string         menuFile     = Path.Combine(dir, "Menu.xml");
                CollectionVM   vm           = new CollectionVM();
                ConfFileParser ini          = new ConfFileParser(settingsFile);
                MenuParser     mp           = new MenuParser();
                string         launcher     = ini.GetSetting("launcher");
                vm.Name     = System.IO.Path.GetFileNameWithoutExtension(dir);
                vm.Launcher = launchers.FirstOrDefault(row => row.Name == launcher);
                vm.ListPath = ini.GetSetting("list.path");
                vm.Layout   = ini.GetSetting("layout");

                if (vm.Layout == "")
                {
                    vm.IsDefaultLayout = true;
                }
                vm.FileExtensions = ini.GetSetting("list.extensions");
                vm.MediaPathVideo = ini.GetSetting("media.video");
                vm.MediaPathTitle = ini.GetSetting("media.title");
                vm.MediaPathLogo  = ini.GetSetting("media.logo");
                vm.MediaPathTitle = ini.GetSetting("media.title");
                vm.MediaPathSnap  = ini.GetSetting("media.snap");
                vm.MediaPathBox   = ini.GetSetting("media.box");
                vm.MediaPathCart  = ini.GetSetting("media.cart");

                //todo: read submenus

                vm.Submenus = mp.ReadCollections(menuFile);
                collections.Add(vm);
            }

            return(collections);
        }
Exemple #24
0
        static void Main(string[] args)
        {
            bool successfulParse         = false;
            CommandParameters parameters = new CommandParameters(args);

            if (!parameters.Valid())
            {
                Console.WriteLine("Please provide a menu file path and optionally an active menu path.");
                //Console.ReadKey ();
                return;
            }

            parameters.DumpToConsole();

            List <MenuNode> menuItems = new List <MenuNode> ();

            try
            {
                MenuParser menu = ParseXmlMenuFile(parameters.InputFilePath, parameters.ActivePath);
                menuItems       = menu.Items;
                successfulParse = true;
            }
            catch (Exception)
            {
                Console.WriteLine("A problem accessing or parsing \"{0}\" occured.", parameters.InputFilePath);
            }

            if (successfulParse)
            {
                if (menuItems.Count > 0)
                {
                    DumpMenuToConsole(menuItems);
                }
                else
                {
                    Console.WriteLine("No Menu Items were found in \"{0}\".", parameters.InputFilePath);
                }
            }

            //Console.ReadKey ();
        }
Exemple #25
0
        public void Setup()
        {
            _pluginFactory = new PluginFactoryMock();

            _pageRepository = new PageRepositoryMock();

            _settingsRepository = new SettingsRepositoryMock();
            _settingsRepository.SiteSettings            = new SiteSettings();
            _settingsRepository.SiteSettings.MarkupType = "Markdown";

            _userContext = new UserContextStub();

            _applicationSettings           = new ApplicationSettings();
            _applicationSettings.Installed = true;

            _cache     = new CacheMock();
            _siteCache = new SiteCache(_cache);

            _converter  = new MarkupConverter(_applicationSettings, _settingsRepository, _pageRepository, _pluginFactory);
            _menuParser = new MenuParser(_converter, _settingsRepository, _siteCache, _userContext);
        }
Exemple #26
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string url = Context.Request.RawUrl;

        lblTenantDisplayName.Text = ((PageBase)this.Page).CurrentTenant.DisplayName;

        if (!IsPostBack)
        {
            MenuParser parser = new MenuParser(Server.MapPath("~/Web.Menu.xml"));
            this.m_visitingMenuLink = parser.GetVisitingMenuLink();

            this.lblCurrentMenuDescription.Text = m_visitingMenuLink.Text;
            if (this.imgCurrentMenuIcon.Visible = m_visitingMenuLink.Icon != string.Empty)
            {
                this.imgCurrentMenuIcon.ImageUrl = m_visitingMenuLink.Icon;
            }

            rptMainMenu.DataSource = parser.GetMainMenuLinks();
            rptMainMenu.DataBind();
            IList <MenuLink> submenus = parser.GetCurrentSubMenuLinks();
            if (submenus.Count > 0)
            {
                m_submenuHome = submenus[0];
            }
            for (int i = 0; i < submenus.Count;)  //delete the invisible submenus
            {
                if (submenus[i].Visible == false &&
                    submenus[i].Url != m_visitingMenuLink.Url)    //keep the current submenu visible
                {
                    submenus.RemoveAt(i);
                    continue;
                }
                i++;
            }
            rptSubMenu.DataSource = submenus;
            rptSubMenu.DataBind();
            string displayName = string.IsNullOrEmpty(Profile.FullName) ? Context.User.Identity.Name : Profile.FullName;
            lblUserLogin.Text = Resources.GlobalResources.Welcome + " " + displayName;
        }
    }
        public void Should_Return_Different_Menu_Html_For_Admin_And_Editor_And_Guest_User()
        {
            // Arrange
            string menuMarkup = "My menu %newpage% %sitesettings%";

            RepositoryMock repository = new RepositoryMock();

            repository.SiteSettings            = new SiteSettings();
            repository.SiteSettings.MarkupType = "Markdown";
            repository.SiteSettings.MenuMarkup = menuMarkup;

            UserContextStub     userContext         = new UserContextStub();
            ApplicationSettings applicationSettings = new ApplicationSettings();

            applicationSettings.Installed = true;

            CacheMock cache     = new CacheMock();
            SiteCache siteCache = new SiteCache(applicationSettings, cache);

            MarkupConverter converter = new MarkupConverter(applicationSettings, repository, _pluginFactory);
            MenuParser      parser    = new MenuParser(converter, repository, siteCache, userContext);

            // Act
            userContext.IsLoggedIn = false;
            userContext.IsAdmin    = false;
            string guestHtml = parser.GetMenu();

            userContext.IsLoggedIn = true;
            userContext.IsAdmin    = false;
            string editorHtml = parser.GetMenu();

            userContext.IsLoggedIn = true;
            userContext.IsAdmin    = true;
            string adminHtml = parser.GetMenu();

            // Assert
            Assert.That(guestHtml, Is.EqualTo("My menu"));
            Assert.That(editorHtml, Is.EqualTo("My menu <a href=\"/pages/new\">New page</a>"));
            Assert.That(adminHtml, Is.EqualTo("My menu <a href=\"/pages/new\">New page</a> <a href=\"/settings\">Site settings</a>"));
        }
        public void Should_Cache_Menu_Html_For_Admin_And_Editor_And_Guest_User()
        {
            // Arrange
            string menuMarkup = "My menu %newpage% %sitesettings%";

            RepositoryMock repository = new RepositoryMock();

            repository.SiteSettings            = new SiteSettings();
            repository.SiteSettings.MarkupType = "Markdown";
            repository.SiteSettings.MenuMarkup = menuMarkup;

            UserContextStub     userContext         = new UserContextStub();
            ApplicationSettings applicationSettings = new ApplicationSettings();

            applicationSettings.Installed = true;

            CacheMock cache     = new CacheMock();
            SiteCache siteCache = new SiteCache(applicationSettings, cache);

            MarkupConverter converter = new MarkupConverter(applicationSettings, repository, _pluginFactory);
            MenuParser      parser    = new MenuParser(converter, repository, siteCache, userContext);

            // Act
            userContext.IsLoggedIn = false;
            userContext.IsAdmin    = false;
            parser.GetMenu();

            userContext.IsLoggedIn = true;
            userContext.IsAdmin    = false;
            parser.GetMenu();

            userContext.IsLoggedIn = true;
            userContext.IsAdmin    = true;
            parser.GetMenu();

            // Assert
            Assert.That(cache.CacheItems.Count, Is.EqualTo(3));
        }
Exemple #29
0
        /// <summary>
        /// Retrieves the (usually left) menu containing the new page, settings etc. options
        /// </summary>
        public string GetBootStrapNavMenu(IUserContext userContext)
        {
            MenuParser parser = new MenuParser(_markupConverter, Repository, _siteCache, userContext);

            // TODO: turn this into a theme-based bit of template HTML
            StringBuilder builder = new StringBuilder();

            builder.AppendLine("<nav id=\"leftmenu\" class=\"navbar navbar-default\" role=\"navigation\">");
            builder.Append(GetCollapsableMenuHtml());

            builder.AppendLine(@"<div id=""left-menu-toggle"" class=""collapse navbar-collapse"">");

            // Add bootstrap into the <ul>
            string menuHtml = parser.GetMenu();

            menuHtml = menuHtml.Replace("<ul>", "<ul class =\"nav navbar-nav\">");
            builder.AppendLine(menuHtml);

            builder.AppendLine("</div>");
            builder.AppendLine("</nav>");

            return(builder.ToString());
        }
        private void AddCollection(object param)
        {
            CollectionVM cvm = new CollectionVM();

            cvm.Name = param as String;
            NotifyPropertyChanged("CollectionList");

            ConfFileSaver settings = new ConfFileSaver();
            ConfFileSaver include  = new ConfFileSaver();
            ConfFileSaver exclude  = new ConfFileSaver();
            MenuParser    menu     = new MenuParser();

            //todo change path
            string path = RetroFE.GetAbsolutePath() + "/Collections/" + cvm.Name;

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            if (!File.Exists(path + "/Settings.conf"))
            {
                CollectionList.Add(cvm);
                settings.Save(path + "/Settings.conf");

                if (!File.Exists(path + "/Include.txt"))
                {
                    include.Save(path + "/Include.txt");
                }
                if (!File.Exists(path + "/Exclude.txt"))
                {
                    exclude.Save(path + "/Exclude.txt");
                }

                //menu.Save(path + "/Menu.xml");
            }
        }