Exemple #1
0
        public async void should_return_error_messages_when_scrapping_failed()
        {
            var websites    = new WebsiteDetailsBuilder().Build(3);
            var gotWebsites = websites.Map();

            string rawHtmlMocked = "<testtag>";

            List <string> scrapErrorMessages = new() { "scrap error 1", "scrap error 2" };

            ArticlesResponseViewModel expectedResult = new();

            expectedResult.ErrorMessages.AddRange(scrapErrorMessages);
            expectedResult.ErrorMessages.AddRange(scrapErrorMessages);
            expectedResult.ErrorMessages.AddRange(scrapErrorMessages);

            _mapper.Setup(n => n.Map <List <WebsiteDetails> >(It.IsAny <List <WebsiteDetailsDb> >())).Returns(websites);
            _websiteRepository.Setup(n => n.GetAll()).Returns(gotWebsites);
            _websiteService.Setup(n => n.GetRawHtml(It.IsAny <string>())).ReturnsAsync(rawHtmlMocked);
            _htmlScrapper.Setup(n => n.Scrap(It.IsAny <WebsiteDetails>(), rawHtmlMocked))
            .Returns((new List <Article>(), scrapErrorMessages));

            var result = await _sut.ScrapAll();

            result.Should().BeEquivalentTo(expectedResult);
        }
    }
        public void should_get_categories_by_id_from_database()
        {
            CategoryWebsiteDetails[] categories = new CategoryWebsiteDetails[]
            {
                new CategoryWebsiteDetails()
                {
                    Id = 1, Name = "something 1"
                },
                new CategoryWebsiteDetails()
                {
                    Id = 2, Name = "something 2"
                }
            };

            WebsiteDetailsDb alreadyExistingWebsiteDetails = new WebsiteDetailsBuilder().WithCategories(2).Build().Map();

            alreadyExistingWebsiteDetails.Categories = new List <CategoryDb>()
            {
                new() { Id = 3, Name = "test name" },
                new() { Id = 4, Name = "test name 2" },
            };

            WebsiteDetails websiteDetails       = new WebsiteDetailsBuilder().WithCategories(categories).Build();
            var            mappedWebsiteDetails = websiteDetails.Map();

            _websitesRepository.Setup(n => n.GetWithCategories(websiteDetails.Id)).Returns(alreadyExistingWebsiteDetails);

            _sut.Save(websiteDetails);

            _categoriesRepository.Verify(n => n.Get(
                                             It.IsAny <Expression <Func <CategoryDb, bool> > >(),
                                             It.IsAny <Func <IQueryable <CategoryDb>, IOrderedQueryable <CategoryDb> > >(),
                                             It.IsAny <string>()), Times.Once);
        }
Exemple #3
0
        public void should_throw_exception_when_trying_to_add_website_without_url()
        {
            string         errorMessage = ApiResponses.WebsiteDetailsUrlCannotBeNullOrEmpty;
            WebsiteDetails website      = new WebsiteDetailsBuilder().WithId(0).WithUrl(null).Build();

            _sut.Invoking(n => n.Add(website)).Should().Throw <InvalidWebsiteDetailsException>().WithMessage(errorMessage);
        }
Exemple #4
0
        public async void should_return_articles()
        {
            var websites = new WebsiteDetailsBuilder().Build(3);

            var gotWebsites = websites.Map();

            string rawHtmlMocked = "<testtag>";

            var articles = new Faker <Article>()
                           .RuleFor(n => n.Url, b => b.Internet.Url())
                           .RuleFor(n => n.Title, b => b.Name.FirstName())
                           .RuleFor(n => n.ImageUrl, b => b.Internet.Url())
                           .RuleFor(n => n.Description, b => b.Name.LastName())
                           .Generate();

            ArticlesResponseViewModel expectedResult = new()
            {
                Articles      = new() { articles, articles, articles },
                ErrorMessages = new()
            };

            _mapper.Setup(n => n.Map <List <WebsiteDetails> >(It.IsAny <List <WebsiteDetailsDb> >())).Returns(websites);
            _websiteRepository.Setup(n => n.GetAll()).Returns(gotWebsites);
            _websiteService.Setup(n => n.GetRawHtml(It.IsAny <string>())).ReturnsAsync(rawHtmlMocked);
            _htmlScrapper.Setup(n => n.Scrap(It.IsAny <WebsiteDetails>(), rawHtmlMocked))
            .Returns((new List <Article> {
                articles
            }, new List <string>()));

            var result = await _sut.ScrapAll();

            result.Should().BeEquivalentTo(expectedResult);
        }
Exemple #5
0
        public void should_get_categories_passed_through_json_by_ids_from_db()
        {
            CategoryWebsiteDetails[] categories = new CategoryWebsiteDetails[]
            {
                new CategoryWebsiteDetails()
                {
                    Id = 1, Name = "something 1"
                },
                new CategoryWebsiteDetails()
                {
                    Id = 2, Name = "something 2"
                }
            };

            //List<int> expectedCategoriesIds = new() { 1, 2 };

            WebsiteDetails websiteDetails       = new WebsiteDetailsBuilder().WithCategories(categories).Build();
            var            mappedWebsiteDetails = websiteDetails.Map();

            //Expression<Func<CategoryDb, bool>> categoriesFilter = null;
            //Action<Expression<Func<CategoryDb, bool>>, Func<IQueryable<CategoryDb>, IOrderedQueryable<CategoryDb>>, string> getCategories
            //    = (filter, order, includeProps) => { categoriesFilter = filter; };

            _mapper.Setup(mapper => mapper.Map <WebsiteDetailsDb>(websiteDetails)).Returns(mappedWebsiteDetails);
            //_categoriesRepository.Setup(n => n.Get(It.IsAny<Expression<Func<CategoryDb, bool>>>(),
            //    It.IsAny<Func<IQueryable<CategoryDb>, IOrderedQueryable<CategoryDb>>>(),
            //    It.IsAny<string>())).Callback(getCategories);

            _sut.Add(websiteDetails);

            _categoriesRepository.Verify(n => n.Get(//n => categoriesIds.Contains(n.Id),
                                             It.IsAny <Expression <Func <CategoryDb, bool> > >(),
                                             It.IsAny <Func <IQueryable <CategoryDb>, IOrderedQueryable <CategoryDb> > >(),
                                             It.IsAny <string>()), Times.Once);
        }
Exemple #6
0
        public void should_throw_exception_when_trying_to_add_website_without_main_node_xpath()
        {
            string         errorMessage = ApiResponses.WebsiteDetailsXpathCannotBeNullOrEmpty;
            WebsiteDetails website      = new WebsiteDetailsBuilder().WithId(0).Build();

            website.MainNodeXPathToNewsContainer = null;

            _sut.Invoking(n => n.Add(website)).Should().Throw <InvalidWebsiteDetailsException>().WithMessage(errorMessage);
        }
        public void should_throw_exception_when_trying_to_add_website_without_url()
        {
            string         errorMessage = ApiResponses.WebsiteDetailsUrlCannotBeNullOrEmpty;
            WebsiteDetails website      = new WebsiteDetailsBuilder().WithId(0).WithUrl(null).Build();
            var            websiteDb    = website.Map();

            _mapper.Setup(n => n.Map <WebsiteDetailsDb>(It.IsAny <WebsiteDetailsDb>())).Returns(websiteDb);
            _mapper.Setup(n => n.Map <WebsiteDetails>(It.IsAny <WebsiteDetailsDb>())).Returns(website);

            _sut.Invoking(n => n.Save(website)).Should().Throw <InvalidWebsiteDetailsException>().WithMessage(errorMessage);
        }
Exemple #8
0
        public void should_return_all_website_details()
        {
            List <WebsiteDetails> websiteDetails = new WebsiteDetailsBuilder().Build(10);
            var gotWebsites = websiteDetails.Map();

            _mapper.Setup(n => n.Map <List <WebsiteDetails> >(It.IsAny <List <WebsiteDetailsDb> >())).Returns(websiteDetails);
            _websitesRepository.Setup(n => n.GetAll()).Returns(gotWebsites);

            var result = _sut.GetAll();

            result.Should().BeEquivalentTo(websiteDetails);
        }
        public void should_save_chosen_categories()
        {
            CategoryWebsiteDetails[] categories = new CategoryWebsiteDetails[]
            {
                new CategoryWebsiteDetails()
                {
                    Id = 1, Name = "something 1"
                },
                new CategoryWebsiteDetails()
                {
                    Id = 2, Name = "something 2"
                }
            };

            List <CategoryDb> categoriesDb = new()
            {
                new() { Id = 1, Name = "something 1" },
                new() { Id = 2, Name = "something 2" }
            };

            List <CategoryDb> actualCategories = new()
            {
                new() { Id = 3, Name = "test name" },
                new() { Id = 4, Name = "test name 2" },
            };


            WebsiteDetailsDb alreadyExistingWebsiteDetails = new WebsiteDetailsBuilder().WithCategories(2).Build().Map();

            alreadyExistingWebsiteDetails.Categories = actualCategories;

            WebsiteDetails websiteDetails       = new WebsiteDetailsBuilder().WithCategories(categories).Build();
            var            mappedWebsiteDetails = websiteDetails.Map();

            WebsiteDetailsDb          result             = null;
            Action <WebsiteDetailsDb> saveWebsiteDetails = (websiteDb) => { result = websiteDb; };

            _websitesRepository.Setup(n => n.GetWithCategories(websiteDetails.Id)).Returns(alreadyExistingWebsiteDetails);
            _websitesRepository.Setup(n => n.Save(It.IsAny <WebsiteDetailsDb>())).Callback(saveWebsiteDetails);
            _categoriesRepository.Setup(n => n.Get(It.IsAny <Expression <Func <CategoryDb, bool> > >(),
                                                   It.IsAny <Func <IQueryable <CategoryDb>, IOrderedQueryable <CategoryDb> > >(),
                                                   It.IsAny <string>())).Returns(categoriesDb);

            _sut.Save(websiteDetails);

            result.Categories
            .Should()
            .BeEquivalentTo(new List <CategoryDb>()
            {
                new() { Id = 1, Name = "something 1" },
                new() { Id = 2, Name = "something 2" }
            });
        }
Exemple #10
0
        public void should_return_website_details()
        {
            int              id         = 1321;
            WebsiteDetails   website    = new WebsiteDetailsBuilder().Build();
            WebsiteDetailsDb gotWebsite = website.Map();

            _mapper.Setup(n => n.Map <WebsiteDetails>(It.IsAny <WebsiteDetailsDb>())).Returns(website);
            _websitesRepository.Setup(n => n.Get(id)).Returns(gotWebsite);

            var result = _sut.Get(id);

            result.Should().BeEquivalentTo(website);
        }
        public void should_return_saved_website_detail()
        {
            WebsiteDetails   website      = new WebsiteDetailsBuilder().WithId(123).Build();
            WebsiteDetailsDb savedWebsite = website.Map();

            _websitesRepository.Setup(n => n.GetWithCategories(website.Id)).Returns(savedWebsite);
            _mapper.Setup(n => n.Map <WebsiteDetailsDb>(It.IsAny <WebsiteDetailsDb>())).Returns(savedWebsite);
            _mapper.Setup(n => n.Map <WebsiteDetails>(It.IsAny <WebsiteDetailsDb>())).Returns(website);
            _websitesRepository.Setup(n => n.Save(It.IsAny <WebsiteDetailsDb>())).Returns(savedWebsite);

            var result = _sut.Save(website);

            result.Should().BeEquivalentTo(website);
        }
Exemple #12
0
        public void should_add_website_details()
        {
            WebsiteDetails   website       = new WebsiteDetailsBuilder().Build();
            WebsiteDetailsDb websiteMapped = website.Map();
            bool             websiteAdded  = false;

            Action <WebsiteDetailsDb> addWebsite = (website) => { websiteAdded = true; };

            _mapper.Setup(n => n.Map <WebsiteDetailsDb>(It.IsAny <WebsiteDetails>())).Returns(websiteMapped);
            _websitesRepository.Setup(n => n.Add(It.IsAny <WebsiteDetailsDb>())).Callback(addWebsite);

            _sut.Add(website);

            websiteAdded.Should().BeTrue();
        }
Exemple #13
0
        public void should_return_added_website_details()
        {
            WebsiteDetails   website       = new WebsiteDetailsBuilder().WithId(0).Build();
            WebsiteDetailsDb websiteMapped = website.Map();

            website.Id = 829;

            _mapper.Setup(n => n.Map <WebsiteDetailsDb>(It.IsAny <WebsiteDetails>())).Returns(websiteMapped);
            _mapper.Setup(n => n.Map <WebsiteDetails>(It.IsAny <WebsiteDetailsDb>())).Returns(website);

            _websitesRepository.Setup(n => n.Add(It.IsAny <WebsiteDetailsDb>())).Returns(websiteMapped);

            var result = _sut.Add(website);

            result.Should().BeEquivalentTo(website);
        }
        public void should_save_website_details()
        {
            WebsiteDetails website      = new WebsiteDetailsBuilder().Build();
            var            websiteDb    = website.Map();
            bool           savedWebsite = false;

            Action <WebsiteDetailsDb> save = (_) => { savedWebsite = true; };

            _websitesRepository.Setup(n => n.GetWithCategories(website.Id)).Returns(websiteDb);
            _mapper.Setup(n => n.Map <WebsiteDetailsDb>(It.IsAny <WebsiteDetailsDb>())).Returns(websiteDb);
            _mapper.Setup(n => n.Map <WebsiteDetails>(It.IsAny <WebsiteDetailsDb>())).Returns(website);
            _websitesRepository.Setup(n => n.Save(It.IsAny <WebsiteDetailsDb>())).Callback(save);

            _sut.Save(website);

            savedWebsite.Should().BeTrue();
        }
Exemple #15
0
        public void should_add_website_details_without_categories_when_none_chosen()
        {
            WebsiteDetails websiteDetails       = new WebsiteDetailsBuilder().WithCategories(0).Build();
            var            mappedWebsiteDetails = websiteDetails.Map();

            WebsiteDetailsDb          addingWebsiteCategory = null;
            Action <WebsiteDetailsDb> addWebsiteCategory    = (cat) => { addingWebsiteCategory = cat; };

            _websitesRepository.Setup(n => n.Add(It.IsAny <WebsiteDetailsDb>()))
            .Callback(addWebsiteCategory);
            _mapper.Setup(mapper => mapper.Map <WebsiteDetailsDb>(websiteDetails)).Returns(mappedWebsiteDetails);

            _sut.Add(websiteDetails);

            addingWebsiteCategory.Categories
            .Should()
            .BeEmpty();
        }
Exemple #16
0
        public void should_throw_exception_when_trying_to_add_website_with_duplicated_category()
        {
            CategoryWebsiteDetails[] categories = new CategoryWebsiteDetails[]
            {
                new CategoryWebsiteDetails()
                {
                    Id = 1, Name = "something 1"
                },
                new CategoryWebsiteDetails()
                {
                    Id = 1, Name = "duplicated ID"
                }
            };

            WebsiteDetails websiteDetails = new WebsiteDetailsBuilder().WithCategories(categories).Build();

            _sut.Invoking(n => n.Add(websiteDetails))
            .Should()
            .Throw <InvalidWebsiteDetailsException>()
            .WithMessage(ApiResponses.WebsiteDetailsCategoriesCannotBeDuplicated);
        }
Exemple #17
0
        public async void should_return_empty_articles_and_error_messages_when_wrong_raw_html()
        {
            var websites    = new WebsiteDetailsBuilder().Build(3);
            var gotWebsites = websites.Map();

            string rawHtmlMocked = "wrong raw html";


            ArticlesResponseViewModel expectedResult = new()
            {
                Articles      = new(),
                ErrorMessages = new() { rawHtmlMocked, rawHtmlMocked, rawHtmlMocked }
            };


            _mapper.Setup(n => n.Map <List <WebsiteDetails> >(It.IsAny <List <WebsiteDetailsDb> >())).Returns(websites);
            _websiteRepository.Setup(n => n.GetAll()).Returns(gotWebsites);
            _websiteService.Setup(n => n.GetRawHtml(It.IsAny <string>())).ReturnsAsync(rawHtmlMocked);

            var result = await _sut.ScrapAll();

            result.Should().BeEquivalentTo(expectedResult);
        }
        public void should_return_articles()
        {
            string newsTitle   = "just the test news title";
            string url         = "https://test.test/";
            string newsUrl     = "/news-url";
            string description = "test news description";
            string imageUrl    = "/image urll";

            string         mainNodeId = "test-news-id";
            WebsiteDetails details    = new WebsiteDetailsBuilder().WithUrl(url).WithMainNodeId(mainNodeId).Build();
            string         rawHtml    = generateRawHtml(details, mainNodeId, newsTitle, newsUrl, description, imageUrl);
            DateTime       mockedNow  = new(2980, 10, 10);

            List <Article> expectedArticles = new()
            {
                new()
                {
                    Title            = $"{newsTitle}",
                    Url              = $"{url[0..^1]}{newsUrl}",
                    Description      = $"{description}",
                    ImageUrl         = $"{url[0..^1]}{imageUrl}",
                    DateScrapped     = mockedNow,
                    WebsiteDetailsId = details.Id
                }