/// <exception cref="ArgumentNullException"><paramref name="categoryNode"/> is <see langword="null" />.</exception> public PluralsightCategory ParseCategoryNode(INode categoryNode) { if (categoryNode == null) throw new ArgumentNullException("categoryNode"); var idInHtml = categoryNode.GetAttributeValue(Constants.CategoryIdAttribute); var categoryName = _nodeSelector.SelectNode(categoryNode, Constants.CategoryNameXPath).InnerText; var courseCategory = new PluralsightCategory { UrlName = HttpUtility.HtmlDecode(idInHtml), Title = HttpUtility.HtmlDecode(categoryName) }; return courseCategory; }
public void Should_ReturnParsedCategories() { // Arrange var categoryCount = 4; var data = Enumerable.Range(1, categoryCount).Select(x => new { Node = Mock.Of<INode>(), Category = new PluralsightCategory { Title = "category" + x, UrlName = "c" + x }, Sketch = new Sketch { FileName = "fileName" + x, Url = "http://example.com/fileName" + x } }).ToList(); var nodeSelector = Mock.Of<INodeSelector>(x => x.SelectCategoryNodes(out categoryCount) == data.Select(c => c.Node)); Mock.Get(nodeSelector).Setup(x => x.SelectSketchNode(It.IsAny<string>())) .Returns((string urlName) => data .Where(x => x.Category.UrlName == urlName) .Select(x => x.Node) .Single()); var nodeParser = Mock.Of<INodeParser>(); Mock.Get(nodeParser).Setup(x => x.ParseCategoryNode(It.IsAny<INode>())) .Returns((INode n) => data .Where(x => x.Node == n) .Select(x => x.Category) .Single()); Mock.Get(nodeParser).Setup(x => x.ParseSketchNode(It.IsAny<INode>())) .Returns((INode n) => data .Where(x => x.Node == n) .Select(x => x.Sketch) .Single()); var sut = new PluralsightCatalogParser(nodeSelector, nodeParser); // Act var result = sut.ParseCategories(); // Assert Assert.NotNull(result); Assert.Equal(categoryCount, result.Count); foreach (var index in Enumerable.Range(0, data.Count)) { var expectedCategory = new PluralsightCategory { Title = data[index].Category.Title, UrlName = data[index].Category.UrlName, LogoFileName = data[index].Sketch.FileName, LogoUrl = data[index].Sketch.Url }; Assert.Equal(expectedCategory, result[index], PluralsightCategory.PropertiesComparer); } }
public void Should_ReturnParsedCategories() { // Arrange var categoryCount = 4; var data = Enumerable.Range(1, categoryCount).Select(x => new { Node = Mock.Of <INode>(), Category = new PluralsightCategory { Title = "category" + x, UrlName = "c" + x }, Sketch = new Sketch { FileName = "fileName" + x, Url = "http://example.com/fileName" + x } }).ToList(); var nodeSelector = Mock.Of <INodeSelector>(x => x.SelectCategoryNodes(out categoryCount) == data.Select(c => c.Node)); Mock.Get(nodeSelector).Setup(x => x.SelectSketchNode(It.IsAny <string>())) .Returns((string urlName) => data .Where(x => x.Category.UrlName == urlName) .Select(x => x.Node) .Single()); var nodeParser = Mock.Of <INodeParser>(); Mock.Get(nodeParser).Setup(x => x.ParseCategoryNode(It.IsAny <INode>())) .Returns((INode n) => data .Where(x => x.Node == n) .Select(x => x.Category) .Single()); Mock.Get(nodeParser).Setup(x => x.ParseSketchNode(It.IsAny <INode>())) .Returns((INode n) => data .Where(x => x.Node == n) .Select(x => x.Sketch) .Single()); var sut = new PluralsightCatalogParser(nodeSelector, nodeParser); // Act var result = sut.ParseCategories(); // Assert Assert.NotNull(result); Assert.Equal(categoryCount, result.Count); foreach (var index in Enumerable.Range(0, data.Count)) { var expectedCategory = new PluralsightCategory { Title = data[index].Category.Title, UrlName = data[index].Category.UrlName, LogoFileName = data[index].Sketch.FileName, LogoUrl = data[index].Sketch.Url }; Assert.Equal(expectedCategory, result[index], PluralsightCategory.PropertiesComparer); } }
private void CheckCoursesEquality(ICollection <PluralsightCourse> expectedCourses, ICollection <PluralsightCourse> resultCourses, PluralsightCategory resultCoursesCategory = null) { Assert.Equal(expectedCourses.Count, resultCourses.Count); foreach (var resultCourse in resultCourses) { if (resultCoursesCategory != null) { Assert.Same(resultCourse.Category, resultCoursesCategory); } var expectedCourse = expectedCourses .Single(x => x.UrlName == resultCourse.UrlName); Assert.Equal(expectedCourse.Category, resultCourse.Category, PluralsightCategory.PropertiesComparer); Assert.Equal(expectedCourse, resultCourse, PluralsightCourse.PropertiesComparer); CheckCourseAuthorsEquality(expectedCourse, resultCourse); } }