public IEnumerable <Showing> GetShowings(string[] cinemasToCheck) { var toReturn = new List <Showing>(); var initialPage = _siteReader.GetInitialPage(); var initialLinks = _siteParser.GetInitialLinks(initialPage); var showBuidler = new ShowingBuilder(); var initialShowings = showBuidler.FromInitialUrlList(initialLinks); if (cinemasToCheck != null && cinemasToCheck.Length != 0) { initialShowings = initialShowings.Where(s => cinemasToCheck.Contains(s.At.Number)).ToList(); } foreach (var showing in initialShowings) { var filmPage = _siteReader.GetCinemasLinks(showing.At.Number, showing.What.Slug); if (string.IsNullOrEmpty(showing.What.Name)) { showing.What.Name = _siteParser.GetFilmTitle(filmPage); } if (string.IsNullOrEmpty(showing.At.Name)) { showing.At.Name = _siteParser.GetCinemaName(filmPage); } var filmSessions = _siteParser.GetFilmPageSessions(filmPage); toReturn.AddRange(showBuidler.FromScheduleDivs(showing, filmSessions)); } return(toReturn); }
public void NoShowingAdded_WhenNoTimeLinkUnderneathListItem() { var sut = new sut.ShowingBuilder(); var sourceShowing = new Showing { At = new Cinema { Number = "123" }, What = new Film { Slug = "new-film" } }; var parentDoc = new HtmlDocument(); var titleElement = new HtmlNode(HtmlNodeType.Text, parentDoc, 0); titleElement.InnerHtml = @"<h1 class=""h2 filmPageTitle"">Ghost Stories</h1>"; var parentFilmSession = new HtmlNode(HtmlNodeType.Element, parentDoc, 1); parentFilmSession.Name = "div"; parentFilmSession.AddClass("filmSessions"); parentFilmSession.SetAttributeValue("data-filmpage-sessions", "data-filmpage-sessions"); parentFilmSession.InnerHtml = @"<div class=""filmItemDate"" data-dateformat=""2018-04-07"">Saturday 7 April 2018</div>"; var unused = new HtmlNode(HtmlNodeType.Element, parentDoc, 2); unused.Name = "ul"; unused.InnerHtml = @"<ul class=""filmExp dn""></ul>"; parentFilmSession.AppendChild(unused); var sessionList = new HtmlNode(HtmlNodeType.Element, parentDoc, 3); sessionList.Name = "ul"; sessionList.AddClass("filmTimes"); sessionList.AddClass("filmInfo"); var session1 = new HtmlNode(HtmlNodeType.Element, parentDoc, 4); session1.Name = "li"; var session1Film = new HtmlNode(HtmlNodeType.Text, parentDoc, 5); session1Film.Name = "p"; session1Film.InnerHtml = "This is a note about the film"; session1.AppendChild(session1Film); sessionList.AppendChild(session1); parentFilmSession.AppendChild(sessionList); var result = sut.FromScheduleDivs(sourceShowing, new List <HtmlNode> { parentFilmSession }); Assert.Empty(result); }
public void ReturnEmptyList_GivenNullInput() { var sut = new sut.ShowingBuilder(); var result = sut.FromInitialUrlList(null); Assert.NotNull(result); Assert.Empty(result); }
public void ReturnsNumber_FromLinkWithNoCinemaAndStartingSlash() { var input = "/7733/film-info/isle-of-dogs"; var builder = new sut.ShowingBuilder(); var result = builder.GetCinemaNumber(input); Assert.Equal("7733", result); }
public void ReturnsNumber_FromProperlyFormattedLink() { var input = "/cinema/7733/film-info/isle-of-dogs"; var builder = new sut.ShowingBuilder(); var result = builder.GetCinemaNumber(input); Assert.Equal("7733", result); }
public void ReturnSingleShowing_GivenSingleInput() { var input = new List <string> { "cinema/123/film/new-film" }; var sut = new sut.ShowingBuilder(); var result = sut.FromInitialUrlList(input); Assert.Single(result); }
public void SingleShowingHaveFilmSlugSet_GivenSingleInput() { var input = new List <string> { "cinema/123/film/new-film" }; var sut = new sut.ShowingBuilder(); var result = sut.FromInitialUrlList(input); Assert.NotNull(result.First().What); Assert.Equal("new-film", result.First().What.Slug); }
public void SingleShowingHaveCinemaNumberSet_GivenSingleInput() { var input = new List <string> { "cinema/123/film/new-film" }; var sut = new sut.ShowingBuilder(); var result = sut.FromInitialUrlList(input); Assert.NotNull(result.First().At); Assert.Equal("123", result.First().At.Number); }
public void TwoShowingHaveFilmSlugSet_GivenTwoInput() { var input = new List <string> { "cinema/123/film/new-film", "cinema/456/film/another-new-film", }; var sut = new sut.ShowingBuilder(); var result = sut.FromInitialUrlList(input); Assert.Contains(result, f => f.What.Slug == "new-film"); Assert.Contains(result, f => f.What.Slug == "another-new-film"); }
public void TwoShowingsHaveCinemaNumberSet_GivenTwoInput() { var input = new List <string> { "cinema/123/film/new-film", "cinema/456/film/another-new-film", }; var sut = new sut.ShowingBuilder(); var result = sut.FromInitialUrlList(input); Assert.Contains(result, f => f.At.Number == "123"); Assert.Contains(result, f => f.At.Number == "456"); }
public void OneCinemasHavingTwoFilms_HasSameCinemaObjectInShowing() { var input = new List <string> { "cinema/123/film/new-film", "cinema/123/film/another-new-film", }; var sut = new sut.ShowingBuilder(); var result = sut.FromInitialUrlList(input); Assert.True(result.ElementAt(0).At == result.ElementAt(1).At); Assert.False(result.ElementAt(0).What == result.ElementAt(1).What); }
public void TwoCinemasHavingTwoFilms_ReturnsFourShowingsTwoFilmsTwoCinemas() { var input = new List <string> { "cinema/123/film/new-film", "cinema/123/film/another-new-film", "cinema/456/film/new-film", "cinema/456/film/another-new-film", }; var sut = new sut.ShowingBuilder(); var result = sut.FromInitialUrlList(input); Assert.Equal(4, result.Count()); Assert.Equal(2, result.Where(c => c.At.Number == "123").Count()); Assert.Equal(2, result.Where(c => c.At.Number == "456").Count()); Assert.Equal(2, result.Where(c => c.What.Slug == "new-film").Count()); Assert.Equal(2, result.Where(c => c.What.Slug == "another-new-film").Count()); }
public void ReturnEmptyList_GivenEmptyInput() { var sut = new sut.ShowingBuilder(); var sourceShowing = new Showing { At = new Cinema { Number = "123" }, What = new Film { Slug = "new-film" } }; var result = sut.FromScheduleDivs(sourceShowing, new List <HtmlNode> { }); Assert.NotNull(result); Assert.Empty(result); }
public void ReturnSingleShowing_GivenSingleDivWithSingleDateAndTimeInput() { var sut = new sut.ShowingBuilder(); var sourceShowing = new Showing { At = new Cinema { Number = "123" }, What = new Film { Slug = "new-film" } }; var parentDoc = new HtmlDocument(); var titleElement = new HtmlNode(HtmlNodeType.Text, parentDoc, 0); titleElement.InnerHtml = @"<h1 class=""h2 filmPageTitle"">Ghost Stories</h1>"; var parentFilmSession = new HtmlNode(HtmlNodeType.Element, parentDoc, 1); parentFilmSession.Name = "div"; parentFilmSession.AddClass("filmSessions"); parentFilmSession.SetAttributeValue("data-filmpage-sessions", "data-filmpage-sessions"); parentFilmSession.InnerHtml = @"<div class=""filmItemDate"" data-dateformat=""2018-04-07"">Saturday 7 April 2018</div>"; var unused = new HtmlNode(HtmlNodeType.Element, parentDoc, 2); unused.Name = "ul"; unused.InnerHtml = @"<ul class=""filmExp dn""></ul>"; parentFilmSession.AppendChild(unused); var sessionList = new HtmlNode(HtmlNodeType.Element, parentDoc, 3); sessionList.Name = "ul"; sessionList.AddClass("filmTimes"); sessionList.AddClass("filmInfo"); var session1 = new HtmlNode(HtmlNodeType.Element, parentDoc, 4); session1.Name = "li"; var session1Film = new HtmlNode(HtmlNodeType.Element, parentDoc, 5); session1Film.Name = "a"; session1Film.InnerHtml = "6:15 PM"; session1Film.Attributes.Add("href", "/booking/240/6184758"); session1Film.Attributes.Add("data-filmpage-exp", ""); session1Film.AddClass("filmTimeItem"); session1.AppendChild(session1Film); sessionList.AppendChild(session1); parentFilmSession.AppendChild(sessionList); var result = sut.FromScheduleDivs(sourceShowing, new List <HtmlNode> { parentFilmSession }); Assert.Single(result); }
public void ReturnsFourShowingsWithCorrectTimes_GivenTwoDaysWithTwoShowings() { var sut = new sut.ShowingBuilder(); var film = new Film { Slug = "new-film" }; var cinema = new Cinema { Number = "123" }; var sourceShowing = new Showing { At = cinema, What = film }; var parentDoc = new HtmlDocument(); var titleElement = new HtmlNode(HtmlNodeType.Text, parentDoc, 0); titleElement.InnerHtml = @"<h1 class=""h2 filmPageTitle"">Ghost Stories</h1>"; var day1 = new HtmlNode(HtmlNodeType.Element, parentDoc, 1); day1.Name = "div"; day1.AddClass("filmSessions"); day1.SetAttributeValue("data-filmpage-sessions", "data-filmpage-sessions"); day1.InnerHtml = @"<div class=""filmItemDate"" data-dateformat=""2018-04-07"">Saturday 7 April 2018</div>"; var unused = new HtmlNode(HtmlNodeType.Element, parentDoc, 2); unused.Name = "ul"; unused.InnerHtml = @"<ul class=""filmExp dn""></ul>"; day1.AppendChild(unused); var sessionList = new HtmlNode(HtmlNodeType.Element, parentDoc, 3); sessionList.Name = "ul"; sessionList.AddClass("filmTimes"); sessionList.AddClass("filmInfo"); var session1 = new HtmlNode(HtmlNodeType.Element, parentDoc, 4); session1.Name = "li"; var session1Film = new HtmlNode(HtmlNodeType.Element, parentDoc, 5); session1Film.Name = "a"; session1Film.InnerHtml = "6:15 PM"; session1Film.Attributes.Add("href", "/booking/240/6184758"); session1Film.Attributes.Add("data-filmpage-exp", ""); session1Film.AddClass("filmTimeItem"); session1.AppendChild(session1Film); sessionList.AppendChild(session1); var session2 = new HtmlNode(HtmlNodeType.Element, parentDoc, 4); session2.Name = "li"; var session2Film = new HtmlNode(HtmlNodeType.Element, parentDoc, 5); session2Film.Name = "a"; session2Film.InnerHtml = "9:15 AM"; session2Film.Attributes.Add("href", "/booking/240/6184758"); session2Film.Attributes.Add("data-filmpage-exp", ""); session2Film.AddClass("filmTimeItem"); session2.AppendChild(session2Film); sessionList.AppendChild(session2); day1.AppendChild(sessionList); var day2 = new HtmlNode(HtmlNodeType.Element, parentDoc, 1); day2.Name = "div"; day2.AddClass("filmSessions"); day2.SetAttributeValue("data-filmpage-sessions", "data-filmpage-sessions"); day2.InnerHtml = @"<div class=""filmItemDate"" data-dateformat=""2018-04-08"">Sunday 8 April 2018</div>"; day2.AppendChild(unused); var day2List = new HtmlNode(HtmlNodeType.Element, parentDoc, 3); day2List.Name = "ul"; day2List.AddClass("filmTimes"); day2List.AddClass("filmInfo"); var session3 = new HtmlNode(HtmlNodeType.Element, parentDoc, 4); session3.Name = "li"; var session3Film = new HtmlNode(HtmlNodeType.Element, parentDoc, 5); session3Film.Name = "a"; session3Film.InnerHtml = "4:25 PM"; session3Film.Attributes.Add("href", "/booking/240/6184758"); session3Film.Attributes.Add("data-filmpage-exp", ""); session3Film.AddClass("filmTimeItem"); session3.AppendChild(session3Film); day2List.AppendChild(session3); var session4 = new HtmlNode(HtmlNodeType.Element, parentDoc, 4); session4.Name = "li"; var session4Film = new HtmlNode(HtmlNodeType.Element, parentDoc, 5); session4Film.Name = "a"; session4Film.InnerHtml = "5:25 AM"; session4Film.Attributes.Add("href", "/booking/240/6184758"); session4Film.Attributes.Add("data-filmpage-exp", ""); session4Film.AddClass("filmTimeItem"); session4.AppendChild(session4Film); day2List.AppendChild(session4); day2.AppendChild(day2List); var result = sut.FromScheduleDivs(sourceShowing, new List <HtmlNode> { day1, day2 }); Assert.Contains(result, s => s.When == new DateTime(2018, 4, 8, 5, 25, 00)); Assert.Contains(result, s => s.When == new DateTime(2018, 4, 8, 16, 25, 00)); Assert.Contains(result, s => s.When == new DateTime(2018, 4, 7, 9, 15, 00)); Assert.Contains(result, s => s.When == new DateTime(2018, 4, 7, 18, 15, 00)); }