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