Beispiel #1
0
        public void Should_ParseCoAuthorNode()
        {
            // Arrange
            var expected = new List <PluralsightAuthor>
            {
                new PluralsightAuthor {
                    FullName = "Scott Allen"
                },
                new PluralsightAuthor {
                    FullName = "Keith Sparkjoy"
                },
                new PluralsightAuthor {
                    FullName = "Dan Sullivan"
                }
            };

            const string authorFullNameAttribute = ParserConstants.AuthorFullNameAttribute;

            var coAuthorNode = Mock.Of <INode>(n =>
                                               n.GetAttributeValue(authorFullNameAttribute) == string.Join(", ", expected.Select(x => x.FullName)));

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseCoAuthors(coAuthorNode);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(expected.Select(x => x.FullName), result.Select(x => x.FullName));
        }
Beispiel #2
0
        public void Should_ParseCatalogContent()
        {
            // Arrange
            const string host = "http://www.pluralsight.com/";

            var nodeSelector = new PluralsightNodeSelector();
            var nodeParser   = new PluralsightNodeParser(host, nodeSelector);

            var sut = new PluralsightCatalogParser(nodeSelector, nodeParser);

            // add category reference for each course
            foreach (var expectedCategory in ExpectedCategoriesDictionary.Values)
            {
                foreach (var expectedCourse in expectedCategory.Courses)
                {
                    expectedCourse.Category = expectedCategory;
                }
            }

            const string catalogPath = "./../../TestData/PluralsighCatalogTestData.html";
            var          loader      = new HtmlLoader <HtmlAgilityPackHtmlContainer>();
            var          catalog     = loader.Load(catalogPath, LocationType.Local);


            // Act
            var result = sut.Parse(catalog);

            // Assert

            // Authors
            var resultAuthors = result.AuthorsParseResult.AuthorsExceptWhoseUrlNullContainer.Values
                                .OrderBy(x => x.UrlName);

            var expectedAuthors = ExpectedAuthorsDictionary.Values
                                  .Where(x => x.UrlName != null)
                                  .OrderBy(x => x.UrlName);

            Assert.Equal(expectedAuthors, resultAuthors, PluralsightAuthor.PropertiesComparer);

            // Courses
            var resultCourses   = result.CoursesParseResult.CourseContainer.Values;
            var expectedCourses = ExpectedCoursesDictionary.Values;

            CheckCoursesEquality(expectedCourses, resultCourses);

            // Categories
            var resultCategories   = result.CategoriesParseResult.CategoryContainer.Values;
            var expectedCategories = ExpectedCategoriesDictionary.Values;

            Assert.Equal(expectedCategories.Count, resultCategories.Count);
            foreach (var resultCategory in resultCategories)
            {
                var expectedCategory = expectedCategories
                                       .Single(x => x.UrlName == resultCategory.UrlName);

                Assert.Equal(expectedCategory, resultCategory, PluralsightCategory.PropertiesComparer);

                CheckCoursesEquality(expectedCategory.Courses, resultCategory.Courses, resultCategory);
            }
        }
Beispiel #3
0
        public void Should_ThrowCatalogNodeParseException_When_CourseReleaseDateNodeHasIncorrectData(string invalidData)
        {
            var releaseDateNode = Mock.Of <INode>(n => n.InnerText == invalidData);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            Assert.Throws <NodeParseException>(() => sut.ParseCourseReleaseDate(releaseDateNode));
        }
Beispiel #4
0
        public void Should_ParseAuthorFullNameFromAuthorNode()
        {
            // Arrange
            var authorNode = Mock.Of <INode>();

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseAuthorFullName(authorNode);

            // Assert
            Assert.Null(result);
            Mock.Get(authorNode).Verify(x => x.GetAttributeValue(It.IsAny <string>()), Times.Once);
        }
Beispiel #5
0
        public void Should_GetCorrectAnswer_For_CoAuthorNodeTypeQuestion(string nodeInnerText, bool expectedAnswer)
        {
            // Arrange
            var expected = expectedAnswer;

            var authorNode = Mock.Of <INode>(n => n.InnerText == nodeInnerText);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.IsCoAuthorNode(authorNode);

            // Assert
            Assert.Equal(expected, result);
        }
Beispiel #6
0
        public void Should_ParseCourseLevelNode()
        {
            // Arrange
            const CourseLevel expected = CourseLevel.Advanced;
            var nodeData = expected.ToString();

            var levelNode = Mock.Of <INode>(n => n.InnerText == nodeData);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseCourseLevel(levelNode);

            // Assert
            Assert.Equal(expected, result);
        }
      public void Should_ParseCategoryNode()
      {
         // Arrange
         var categoryNode = Mock.Of<INode>();
         var nodeSelector = Mock.Of<INodeSelector>(x => x.SelectNode(It.IsAny<INode>(), It.IsAny<string>()).InnerText == string.Empty);

         var sut = new PluralsightNodeParser(SiteUrl, nodeSelector);

         // Act
         var result = sut.ParseCategoryNode(categoryNode);

         // Assert
         Assert.NotNull(result);
         Mock.Get(nodeSelector).Verify(x => x.SelectNode(It.IsAny<INode>(), It.IsAny<string>()).InnerText, Times.Once);
         Mock.Get(categoryNode).Verify(x => x.GetAttributeValue(It.IsAny<string>()), Times.Once);
      }
      public void Should_ParseCategoryIdInHtmlDocumentFromCategoryNode()
      {
         // Arrange
         const string expected = "dotnet";
         const string categoryIdAttribute = ParserConstants.CategoryIdAttribute;

         var categoryNode = Mock.Of<INode>(n => n.GetAttributeValue(categoryIdAttribute) == expected);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseCategoryIdInHtmlDocument(categoryNode);

         // Assert
         Assert.Equal(expected, result);
      }
Beispiel #9
0
        public void Should_ParseCourseDurationNode()
        {
            // Arrange
            var expected = TimeSpan.FromHours(2.5);
            var nodeData = string.Format(DateTimeFormatInfo.InvariantInfo, "[{0:T}]", expected);

            var durationNode = Mock.Of <INode>(n => n.InnerText == nodeData);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseCourseDuration(durationNode);

            // Assert
            Assert.Equal(expected, result);
        }
Beispiel #10
0
        public void Should_ParseCategoryNode()
        {
            // Arrange
            var categoryNode = Mock.Of <INode>();
            var nodeSelector = Mock.Of <INodeSelector>(x => x.SelectNode(It.IsAny <INode>(), It.IsAny <string>()).InnerText == string.Empty);

            var sut = new PluralsightNodeParser(SiteUrl, nodeSelector);

            // Act
            var result = sut.ParseCategoryNode(categoryNode);

            // Assert
            Assert.NotNull(result);
            Mock.Get(nodeSelector).Verify(x => x.SelectNode(It.IsAny <INode>(), It.IsAny <string>()).InnerText, Times.Once);
            Mock.Get(categoryNode).Verify(x => x.GetAttributeValue(It.IsAny <string>()), Times.Once);
        }
Beispiel #11
0
        public void Should_ParseCategoryIdInHtmlDocumentFromCategoryNode()
        {
            // Arrange
            const string expected            = "dotnet";
            const string categoryIdAttribute = ParserConstants.CategoryIdAttribute;

            var categoryNode = Mock.Of <INode>(n => n.GetAttributeValue(categoryIdAttribute) == expected);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseCategoryIdInHtmlDocument(categoryNode);

            // Assert
            Assert.Equal(expected, result);
        }
Beispiel #12
0
        public void Should_ParseCourseReleaseDateNode()
        {
            // Arrange
            var expected = DateTime.UtcNow.Date;
            var nodeData = expected.ToString("d MMM yyyy", DateTimeFormatInfo.InvariantInfo);

            var releaseDateNode = Mock.Of <INode>(n => n.InnerText == nodeData);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseCourseReleaseDate(releaseDateNode);

            // Assert
            Assert.Equal(expected, result);
        }
Beispiel #13
0
        public void Should_ParseSketchNode()
        {
            // Arrange
            const string expectedUrl        = "http://s.pluralsight.com/mn/img/cs/dotnet-v1.png";
            const string expectedFileName   = "dotnet-v1.png";
            const string sketchUrlAttribute = ParserConstants.SketchUrlAttribute;

            var sketchNode = Mock.Of <INode>(n => n.GetAttributeValue(sketchUrlAttribute) == expectedUrl);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseSketchNode(sketchNode);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(expectedUrl, result.Url);
            Assert.Equal(expectedFileName, result.FileName);
        }
Beispiel #14
0
        public void Should_ThrowArgumentNullException_When_ArgumentIsNull()
        {
            global::System.Threading.Tasks.Task test = null;
            Assert.Throws <ArgumentNullException>(() => new PluralsightNodeParser(null, null));

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            Assert.Throws <ArgumentNullException>(() => sut.ParseCategoryNode(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseCategoryIdInHtmlDocument(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseSketchNode(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseCourseInfo(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseAuthor(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseAuthorFullName(null));
            Assert.Throws <ArgumentNullException>(() => sut.IsCoAuthorNode(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseCoAuthors(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseCourseLevel(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseCourseRating(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseCourseDuration(null));
            Assert.Throws <ArgumentNullException>(() => sut.ParseCourseReleaseDate(null));
        }
      public void Should_ThrowArgumentNullException_When_ArgumentIsNull()
      {
         global::System.Threading.Tasks.Task test = null;
         Assert.Throws<ArgumentNullException>(() => new PluralsightNodeParser(null, null));

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         Assert.Throws<ArgumentNullException>(() => sut.ParseCategoryNode(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseCategoryIdInHtmlDocument(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseSketchNode(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseCourseInfo(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseAuthor(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseAuthorFullName(null));
         Assert.Throws<ArgumentNullException>(() => sut.IsCoAuthorNode(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseCoAuthors(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseCourseLevel(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseCourseRating(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseCourseDuration(null));
         Assert.Throws<ArgumentNullException>(() => sut.ParseCourseReleaseDate(null));
      }
Beispiel #16
0
        public void Should_ParseAuthorNode()
        {
            // Arrange
            const string sourceUrl       = "http://www.pluralsight.com/author/eric-burke";
            const string expectedUrl     = "http://www.pluralsight.com/author/eric-burke";
            const string expectedUrlName = "eric-burke";

            const string authoreUrlAttribute = ParserConstants.AuthorUrlAttribute;

            var authorNode = Mock.Of <INode>(n => n.GetAttributeValue(authoreUrlAttribute) == sourceUrl);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseAuthor(authorNode);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(expectedUrl, result.SiteUrl);
            Assert.Equal(expectedUrlName, result.UrlName);
        }
Beispiel #17
0
        public void Should_ReturnEmptyRating_When_RatingNotSpecified()
        {
            // Arrange
            var expected = new CourseRating {
                Raters = 0, Rating = 0m
            };
            var          nodeData = "Not enough course ratings";
            const string courseRatingAttribute = ParserConstants.CourseRatingAttribute;

            var ratingNode = Mock.Of <INode>(n => n.GetAttributeValue(courseRatingAttribute) == nodeData);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseCourseRating(ratingNode);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(expected.Rating, result.Rating);
            Assert.Equal(expected.Raters, result.Raters);
        }
Beispiel #18
0
        public void Should_ParseCourseRatingNode()
        {
            // Arrange
            var expected = new CourseRating {
                Raters = 103, Rating = 1.25m
            };
            var          nodeData = string.Format(CultureInfo.InvariantCulture, "{0} stars from {1} users", expected.Rating, expected.Raters);
            const string courseRatingAttribute = ParserConstants.CourseRatingAttribute;

            var ratingNode = Mock.Of <INode>(n => n.GetAttributeValue(courseRatingAttribute) == nodeData);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseCourseRating(ratingNode);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(expected.Rating, result.Rating);
            Assert.Equal(expected.Raters, result.Raters);
        }
Beispiel #19
0
        public void Should_ParseCourseInfoNode()
        {
            // Arrange
            const string courseName  = "What’s New in PostSharp v3";
            const string sourceUrl   = "/training/Courses/TableOfContents/becoming-dotnet-developer";
            const string expectedUrl = "http://www.pluralsight.com/courses/becoming-dotnet-developer";

            const string courseUrlAttribute = ParserConstants.CourseUrlAttribute;

            var infoNode = Mock.Of <INode>(n => n.InnerText == courseName && n.GetAttributeValue(courseUrlAttribute) == sourceUrl);

            var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

            // Act
            var result = sut.ParseCourseInfo(infoNode);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(courseName, result.Name);
            Assert.Equal(expectedUrl, result.SiteUrl);
        }
      public void Should_ParseSketchNode()
      {
         // Arrange
         const string expectedUrl = "http://s.pluralsight.com/mn/img/cs/dotnet-v1.png";
         const string expectedFileName = "dotnet-v1.png";
         const string sketchUrlAttribute = ParserConstants.SketchUrlAttribute;

         var sketchNode = Mock.Of<INode>(n => n.GetAttributeValue(sketchUrlAttribute) == expectedUrl);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseSketchNode(sketchNode);

         // Assert
         Assert.NotNull(result);
         Assert.Equal(expectedUrl, result.Url);
         Assert.Equal(expectedFileName, result.FileName);
      }
      public void Should_ParseAuthorNode()
      {
         // Arrange
         const string sourceUrl = "http://www.pluralsight.com/author/eric-burke";
         const string expectedUrl = "http://www.pluralsight.com/author/eric-burke";
         const string expectedUrlName = "eric-burke";

         const string authoreUrlAttribute = ParserConstants.AuthorUrlAttribute;

         var authorNode = Mock.Of<INode>(n => n.GetAttributeValue(authoreUrlAttribute) == sourceUrl);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseAuthor(authorNode);

         // Assert
         Assert.NotNull(result);
         Assert.Equal(expectedUrl, result.SiteUrl);
         Assert.Equal(expectedUrlName, result.UrlName);
      }
      public void Should_ParseCourseInfoNode()
      {
         // Arrange
         const string courseName = "What’s New in PostSharp v3";
         const string sourceUrl = "/training/Courses/TableOfContents/becoming-dotnet-developer";
         const string expectedUrl = "http://www.pluralsight.com/courses/becoming-dotnet-developer";

         const string courseUrlAttribute = ParserConstants.CourseUrlAttribute;

         var infoNode = Mock.Of<INode>(n => n.InnerText == courseName && n.GetAttributeValue(courseUrlAttribute) == sourceUrl);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseCourseInfo(infoNode);

         // Assert
         Assert.NotNull(result);
         Assert.Equal(courseName, result.Name);
         Assert.Equal(expectedUrl, result.SiteUrl);
      }
      public void Should_ParseCourseReleaseDateNode()
      {
         // Arrange
         var expected = DateTime.UtcNow.Date;
         var nodeData = expected.ToString("d MMM yyyy", DateTimeFormatInfo.InvariantInfo);

         var releaseDateNode = Mock.Of<INode>(n => n.InnerText == nodeData);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseCourseReleaseDate(releaseDateNode);

         // Assert
         Assert.Equal(expected, result);
      }
      public void Should_ThrowCatalogNodeParseException_When_CourseReleaseDateNodeHasIncorrectData(string invalidData)
      {
         var releaseDateNode = Mock.Of<INode>(n => n.InnerText == invalidData);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         Assert.Throws<NodeParseException>(() => sut.ParseCourseReleaseDate(releaseDateNode));
      }
      public void Should_ReturnEmptyRating_When_RatingNotSpecified()
      {
         // Arrange
         var expected = new CourseRating { Raters = 0, Rating = 0m };
         var nodeData = "Not enough course ratings";
         const string courseRatingAttribute = ParserConstants.CourseRatingAttribute;

         var ratingNode = Mock.Of<INode>(n => n.GetAttributeValue(courseRatingAttribute) == nodeData);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseCourseRating(ratingNode);

         // Assert
         Assert.NotNull(result);
         Assert.Equal(expected.Rating, result.Rating);
         Assert.Equal(expected.Raters, result.Raters);
      }
      public void Should_ParseCourseDurationNode()
      {
         // Arrange
         var expected = TimeSpan.FromHours(2.5);
         var nodeData = string.Format(DateTimeFormatInfo.InvariantInfo, "[{0:T}]", expected);

         var durationNode = Mock.Of<INode>(n => n.InnerText == nodeData);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseCourseDuration(durationNode);

         // Assert
         Assert.Equal(expected, result);
      }
      public void Should_ParseCourseRatingNode()
      {
         // Arrange
         var expected = new CourseRating { Raters = 103, Rating = 1.25m };
         var nodeData = string.Format(CultureInfo.InvariantCulture, "{0} stars from {1} users", expected.Rating, expected.Raters);
         const string courseRatingAttribute = ParserConstants.CourseRatingAttribute;

         var ratingNode = Mock.Of<INode>(n => n.GetAttributeValue(courseRatingAttribute) == nodeData);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseCourseRating(ratingNode);

         // Assert
         Assert.NotNull(result);
         Assert.Equal(expected.Rating, result.Rating);
         Assert.Equal(expected.Raters, result.Raters);
      }
      public void Should_ParseAuthorFullNameFromAuthorNode()
      {
         // Arrange
         var authorNode = Mock.Of<INode>();

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseAuthorFullName(authorNode);

         // Assert
         Assert.Null(result);
         Mock.Get(authorNode).Verify(x => x.GetAttributeValue(It.IsAny<string>()), Times.Once);
      }
      public void Should_ParseCourseLevelNode()
      {
         // Arrange
         const CourseLevel expected = CourseLevel.Advanced;
         var nodeData = expected.ToString();

         var levelNode = Mock.Of<INode>(n => n.InnerText == nodeData);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseCourseLevel(levelNode);

         // Assert
         Assert.Equal(expected, result);
      }
      public void Should_ParseCoAuthorNode()
      {
         // Arrange
         var expected = new List<PluralsightAuthor>
               {
                  new PluralsightAuthor{FullName = "Scott Allen"},
                  new PluralsightAuthor{FullName = "Keith Sparkjoy"},
                  new PluralsightAuthor{FullName = "Dan Sullivan"}
               };

         const string authorFullNameAttribute = ParserConstants.AuthorFullNameAttribute;

         var coAuthorNode = Mock.Of<INode>(n =>
            n.GetAttributeValue(authorFullNameAttribute) == string.Join(", ", expected.Select(x=> x.FullName)));

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.ParseCoAuthors(coAuthorNode);

         // Assert
         Assert.NotNull(result);
         Assert.Equal(expected.Select(x =>x.FullName), result.Select(x =>x.FullName));
      }
      public void Should_GetCorrectAnswer_For_CoAuthorNodeTypeQuestion(string nodeInnerText, bool expectedAnswer)
      {
         // Arrange
         var expected = expectedAnswer;

         var authorNode = Mock.Of<INode>(n => n.InnerText == nodeInnerText);

         var sut = new PluralsightNodeParser(SiteUrl, _nodeSelector);

         // Act
         var result = sut.IsCoAuthorNode(authorNode);

         // Assert
         Assert.Equal(expected, result);
      }