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)); }
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"); }
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); }
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); }
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]); }
/// <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()); }
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")); }
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); }
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); }
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; } }
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); }
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 (); }
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); }
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)); }
/// <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"); } }