public void ShouldReturnNotFoundForTagAndCategory()
        {
            _mockTimeProvider.Setup(o => o.Now()).Returns(new DateTime(2016, 08, 5));

            var newsRoom = new Newsroom(_alerts, true, "test-id");

            _newsRoomContentfulFactory.Setup(o => o.ToModel(It.IsAny <ContentfulNewsRoom>())).Returns(newsRoom);

            var news = new News(Title, Slug, Teaser, Purpose, Image, ThumbnailImage, Body, _sunriseDate, _sunsetDate, _crumbs, _alerts, new List <string>()
            {
                "tag1", "tag2"
            }, new List <Document>(), _newsCategories);

            _newsContentfulFactory.Setup(o => o.ToModel(It.IsAny <ContentfulNews>())).Returns(news);

            var newsListCollection = new ContentfulCollection <ContentfulNews>();

            newsListCollection.Items = new List <ContentfulNews>
            {
                new ContentfulNewsBuilder().Title("Another news article").Slug("another-news-article").Teaser("This is another news article").SunriseDate(new DateTime(2016, 06, 30, 23, 0, 0, DateTimeKind.Utc)).SunsetDate(new DateTime(2017, 11, 22, 23, 0, 0, DateTimeKind.Utc)).Build(),
                new ContentfulNewsBuilder().Title("This is the news").Slug("news-of-the-century").Teaser("Read more for the news").SunriseDate(new DateTime(2016, 08, 24, 23, 30, 0, DateTimeKind.Utc)).SunsetDate(new DateTime(2016, 08, 23, 23, 0, 0, DateTimeKind.Utc)).Build(),
            };

            _cacheWrapper.Setup(_ => _.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "news-all"), It.IsAny <Func <Task <IList <ContentfulNews> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(newsListCollection.Items.ToList());
            _cacheWrapper.Setup(_ => _.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "newsroom"), It.IsAny <Func <Task <ContentfulNewsRoom> > >(), It.Is <int>(s => s == 60))).ReturnsAsync(new ContentfulNewsRoom {
                Title = "test"
            });

            var response = AsyncTestHelper.Resolve(_repository.Get("NotFound", "NotFound", null, null));

            response.StatusCode.Should().Be(HttpStatusCode.NotFound);
        }
        public void ShouldReturnNoListOfNewsForDateRange()
        {
            _mockTimeProvider.Setup(o => o.Now()).Returns(new DateTime(2016, 09, 5));

            var newsRoom = new Newsroom(_alerts, true, "test-id");

            _newsRoomContentfulFactory.Setup(o => o.ToModel(It.IsAny <ContentfulNewsRoom>())).Returns(newsRoom);

            var news = new News("This is within the date Range", Slug, Teaser, Purpose, Image, ThumbnailImage, Body, _sunriseDate, _sunsetDate, _crumbs, _alerts, null, new List <Document>(), _newsCategories);

            _newsContentfulFactory.Setup(o => o.ToModel(It.IsAny <ContentfulNews>())).Returns(news);

            var newsListCollection = new ContentfulCollection <ContentfulNews>();

            newsListCollection.Items = new List <ContentfulNews>
            {
                new ContentfulNewsBuilder().Title("This is within the date Range").Slug("another-news-article").Teaser("This is another news article").SunriseDate(new DateTime(2016, 06, 30, 23, 0, 0, DateTimeKind.Utc)).SunsetDate(new DateTime(2017, 11, 22, 23, 0, 0, DateTimeKind.Utc)).Build(),
                new ContentfulNewsBuilder().Title("This is within the date Range").Slug("news-of-the-century").Teaser("Read more for the news").SunriseDate(new DateTime(2016, 08, 24, 23, 30, 0, DateTimeKind.Utc)).SunsetDate(new DateTime(2016, 08, 23, 23, 0, 0, DateTimeKind.Utc)).Build(),
            };
            _client.Setup(o => o.GetEntries <ContentfulNews>(
                              It.Is <string>(q => q.Contains(new QueryBuilder <ContentfulNews>().ContentTypeIs("news").Include(1).Build())),
                              It.IsAny <CancellationToken>())).ReturnsAsync(newsListCollection);

            _cacheWrapper.Setup(_ => _.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "news-all"), It.IsAny <Func <Task <IList <ContentfulNews> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(newsListCollection.Items.ToList());
            _cacheWrapper.Setup(_ => _.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "newsroom"), It.IsAny <Func <Task <ContentfulNewsRoom> > >(), It.Is <int>(s => s == 60))).ReturnsAsync(new ContentfulNewsRoom {
                Title = "test"
            });


            var response = AsyncTestHelper.Resolve(_repository.Get(tag: null, category: null, startDate: new DateTime(2017, 08, 01), endDate: new DateTime(2017, 08, 31)));
            var newsroom = response.Get <Newsroom>();

            newsroom.News.Count.Should().Be(0);
        }
        public void ShouldGetOrganisation()
        {
            // Arrange
            var contentfulOrganisation = new ContentfulOrganisation()
            {
                AboutUs          = "about us",
                Email            = "Email",
                Phone            = "Phone",
                Slug             = "slug",
                Title            = "title",
                Volunteering     = true,
                VolunteeringText = "test"
            };

            var builder = new QueryBuilder <ContentfulOrganisation>().ContentTypeIs("organisation").FieldEquals("fields.slug", "slug");
            var contentfulCollection = new ContentfulCollection <ContentfulOrganisation>()
            {
                Items = new List <ContentfulOrganisation> {
                    contentfulOrganisation
                }
            };

            _contentfulClient.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulOrganisation> >(q => q.Build() == builder.Build()), It.IsAny <CancellationToken>()))
            .ReturnsAsync(contentfulCollection);

            // Act
            var response     = AsyncTestHelper.Resolve(_repository.GetOrganisation("slug"));
            var organisation = response.Get <Organisation>();

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
            organisation.Slug.Should().Be(contentfulOrganisation.Slug);
        }
Пример #4
0
        public void ItGetsGroupCategories()
        {
            // Arrange
            const string slug = "unit-test-GroupCategory";

            var rawGroupCategory = new ContentfulGroupCategoryBuilder().Slug(slug).Name("name").Build();
            var collection       = new ContentfulCollection <ContentfulGroupCategory>();

            collection.Items = new List <ContentfulGroupCategory> {
                rawGroupCategory
            };

            var builder = new QueryBuilder <ContentfulGroupCategory>().ContentTypeIs("groupCategory");

            _contentfulClient.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulGroupCategory> >(q => q.Build() == builder.Build()), It.IsAny <CancellationToken>()))
            .ReturnsAsync(collection);

            _contentfulGroupCategoryFactory.Setup(_ => _.ToModel(rawGroupCategory))
            .Returns(new GroupCategory("name", "slug", "icon", "imageUrl"));

            // Act
            var response = AsyncTestHelper.Resolve(_repository.GetGroupCategories());

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
        }
Пример #5
0
        public void ShouldReturnContenfulGroupHomepage()
        {
            var contenfulHomepage = new ContentfulGroupHomepageBuilder().Build();
            var collection        = new ContentfulCollection <ContentfulGroupHomepage>();

            collection.Items = new List <ContentfulGroupHomepage> {
                contenfulHomepage
            };

            var groupHomepage = new GroupHomepage("title", "slug", "metaDescription", "image-url.jpg", string.Empty, null, null, null, null, string.Empty, string.Empty, string.Empty, string.Empty, new NullEventBanner());

            var builder = new QueryBuilder <ContentfulGroupHomepage>().ContentTypeIs("groupHomepage").Include(1);

            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulGroupHomepage> >(q => q.Build() == builder.Build()),
                                            It.IsAny <CancellationToken>())).ReturnsAsync(collection);

            _groupHomepageContentfulFactory.Setup(o => o.ToModel(contenfulHomepage)).Returns(groupHomepage);

            var response = AsyncTestHelper.Resolve(_repository.GetGroupHomepage());
            var homepage = response.Get <GroupHomepage>();

            homepage.BackgroundImage.Should().Be(contenfulHomepage.BackgroundImage.File.Url);
            homepage.Title.Should().Be(contenfulHomepage.Title);
            homepage.Slug.Should().Be(contenfulHomepage.Slug);
        }
        public void GetRedirects_BusinessIdExist_ShouldReturnSuccessful()
        {
            var ContentfulRedirects = new ContentfulRedirect();
            var collection          = new ContentfulCollection <ContentfulRedirect>();

            collection.Items = new List <ContentfulRedirect>();

            var builder = new QueryBuilder <ContentfulRedirect>().ContentTypeIs("redirect").Include(1);

            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulRedirect> >(q => q.Build() == builder.Build()),
                                            It.IsAny <CancellationToken>())).ReturnsAsync(collection);

            var repository = new RedirectsRepository(_contentfulClientManager.Object, _createConfig.Object, new RedirectBusinessIds(new List <string> {
                "unittest"
            }), _contenfulFactory.Object, _shortUrlRedirects, _legacyUrlRedirects);

            _contenfulFactory.Setup(o => o.ToModel(ContentfulRedirects)).Returns(new NullBusinessIdToRedirects());

            var response = AsyncTestHelper.Resolve(repository.GetRedirects());

            var redirects = response.Get <Redirects>();

            var shortUrls = redirects.ShortUrlRedirects;

            shortUrls.Count.Should().Be(1);
            shortUrls["unittest"].Count.Should().Be(0);
            var legacyUrls = redirects.LegacyUrlRedirects;

            legacyUrls.Count.Should().Be(1);
            legacyUrls["unittest"].Count.Should().Be(0);
            response.StatusCode.Should().Be(HttpStatusCode.OK);
        }
Пример #7
0
        public void GetsGroupForGroupSlug()
        {
            const string slug            = "group_slug";
            var          contentfulGroup = new ContentfulGroupBuilder().Slug(slug).Build();
            var          collection      = new ContentfulCollection <ContentfulGroup>();

            collection.Items = new List <ContentfulGroup> {
                contentfulGroup
            };

            var group   = new GroupBuilder().Build();
            var builder = new QueryBuilder <ContentfulGroup>().ContentTypeIs("group").FieldEquals("fields.slug", slug).Include(1);

            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulGroup> >(q => q.Build() == builder.Build()),
                                            It.IsAny <CancellationToken>())).ReturnsAsync(collection);

            _cacheWrapper.Setup(o => o.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "event-all"), It.IsAny <Func <Task <IList <ContentfulEvent> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(new List <ContentfulEvent>());

            _groupFactory.Setup(o => o.ToModel(contentfulGroup)).Returns(group);

            var response = AsyncTestHelper.Resolve(_repository.GetGroup(slug, false));

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            var responseGroup = response.Get <Group>();

            responseGroup.Should().BeEquivalentTo(group);
        }
        public void GetAllArticleSlugForSitemap()
        {
            var collection = new ContentfulCollection <ContentfulArticleForSiteMap>();

            collection.Items = new List <ContentfulArticleForSiteMap> {
                new ContentfulArticleForSiteMap()
                {
                    Slug = "slug1", SunriseDate = DateTime.MinValue, SunsetDate = DateTime.MaxValue
                }, new ContentfulArticleForSiteMap()
                {
                    Slug = "slug2", SunriseDate = DateTime.MinValue, SunsetDate = DateTime.MaxValue
                }, new ContentfulArticleForSiteMap()
                {
                    Slug = "slug3", SunriseDate = DateTime.MinValue, SunsetDate = DateTime.MaxValue
                }
            };
            var builder = new QueryBuilder <ContentfulArticleForSiteMap>().ContentTypeIs("article").Include(2).Build();

            _contentfulClient.Setup(o => o.GetEntries <ContentfulArticleForSiteMap>(It.Is <string>(q => q.Contains(builder)), It.IsAny <CancellationToken>())).ReturnsAsync(collection);

            var response = AsyncTestHelper.Resolve(_repository.Get());

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            var responseArticle = response.Get <IEnumerable <ArticleSiteMap> >();

            responseArticle.ToList().Count.Should().Be(collection.Items.Count());
        }
Пример #9
0
        public void ItGetsContactUsIdFromSlug()
        {
            // Arrange
            const string slug         = "test-slug";
            var          rawContactUs = new ContentfulContactUsId()
            {
                Slug = slug
            };
            var collection = new ContentfulCollection <ContentfulContactUsId>();

            collection.Items = new List <ContentfulContactUsId> {
                rawContactUs
            };

            // Act
            var builder = new QueryBuilder <ContentfulContactUsId>().ContentTypeIs("contactUsId").FieldEquals("fields.slug", slug).Include(1);

            _contentfulClient.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulContactUsId> >(q => q.Build() == builder.Build()), It.IsAny <CancellationToken>()))
            .ReturnsAsync(collection);

            var response = AsyncTestHelper.Resolve(_repository.GetContactUsIds(slug));
            var model    = response.Get <ContactUsId>();

            // Assert
            model.Slug.Should().Be(rawContactUs.Slug);
        }
Пример #10
0
        public void DoesntGetGroupWhenHiddenDateToIsInTheFutureAndHiddenDateFromIsNull()
        {
            // Arrange
            const string slug            = "group_slug";
            var          contentfulGroup = new ContentfulGroupBuilder().Slug(slug).DateHiddenTo(DateTime.Now.AddDays(3)).Build();
            var          collection      = new ContentfulCollection <ContentfulGroup>();

            collection.Items = new List <ContentfulGroup> {
                contentfulGroup
            };

            var group = new GroupBuilder().Slug("group_slug").DateHiddenTo(DateTime.Now.AddDays(3)).Build();

            var builder = new QueryBuilder <ContentfulGroup>().ContentTypeIs("group").FieldEquals("fields.slug", slug).Include(1);

            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulGroup> >(q => q.Build() == builder.Build()),
                                            It.IsAny <CancellationToken>())).ReturnsAsync(collection);

            _cacheWrapper.Setup(o => o.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "event-all"), It.IsAny <Func <Task <IList <ContentfulEvent> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(new List <ContentfulEvent>());

            _groupFactory.Setup(o => o.ToModel(contentfulGroup)).Returns(group);

            // Act
            var response = AsyncTestHelper.Resolve(_repository.GetGroup(slug, true));

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.NotFound);
            var responseGroup = response.Get <Group>();

            responseGroup.Should().BeNull();
        }
Пример #11
0
        public void ShouldGetAdvisorsGroupByEmail()
        {
            // Arrange
            var query      = new QueryBuilder <ContentfulGroupAdvisor>().ContentTypeIs("groupAdvisors").FieldEquals("fields.email", "email").Include(1).Build();
            var collection = new ContentfulCollection <ContentfulGroupAdvisor>();

            collection.Items = new List <ContentfulGroupAdvisor>()
            {
                new ContentfulGroupAdvisorBuilder().Build()
            };

            // Mock
            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulGroupAdvisor> >(q => q.Build() == query), It.IsAny <CancellationToken>()))
            .ReturnsAsync(collection);
            _contentfulFactory.Setup(o => o.ToModel(It.IsAny <ContentfulGroupAdvisor>())).Returns(new GroupAdvisorBuilder().Build());

            // Act
            var result = AsyncTestHelper.Resolve(_reporisory.Get("email"));

            // Assert
            result.Should().NotBeNull();
            result.Name.Should().Be("name");
            result.EmailAddress.Should().Be("email");
            result.HasGlobalAccess.Should().Be(false);
        }
Пример #12
0
        public async Task PageShouldReturn404IfNoCourseWasFound()
        {
            //Arrange
            var courses = new ContentfulCollection <Course>();

            courses.Items = new List <Course>();
            var client = new Mock <IContentfulClient>();

            client.SetupGet(c => c.SerializerSettings).Returns(new JsonSerializerSettings());
            client.Setup(c => c.GetEntries(It.IsAny <QueryBuilder <Course> >(), default(CancellationToken)))
            .Returns(Task.FromResult(courses));
            var visitedLessons     = new Mock <IVisitedLessonsManager>();
            var breadcrumbsManager = new Mock <IBreadcrumbsManager>();
            var viewlocalizer      = new Mock <IViewLocalizer>();

            viewlocalizer.SetupGet(c => c[It.IsAny <string>()]).Returns(new LocalizedHtmlString("po", "po"));
            var model = new IndexModel(client.Object, visitedLessons.Object, breadcrumbsManager.Object, viewlocalizer.Object);

            model.TempData = new Mock <ITempDataDictionary>().Object;
            //Act
            var res = await model.OnGet("sluggy-slug");

            //Assert
            Assert.IsType <NotFoundResult>(res);
        }
        public void GetPrivacyNotice_ShouldReturnAPrivacyNotice()
        {
            // Arrange
            const string slug = "test-slug";
            var          contentfulPrivacyNotice = new ContentfulPrivacyNotice()
            {
                Slug = slug
            };
            var privacyNotice = new PrivacyNotice()
            {
                Slug = slug
            };
            var contentfulCollection = new ContentfulCollection <ContentfulPrivacyNotice>()
            {
                Items = new List <ContentfulPrivacyNotice> {
                    contentfulPrivacyNotice
                }
            };

            _contentfulClient.Setup(_ => _.GetEntries(It.IsAny <QueryBuilder <ContentfulPrivacyNotice> >(), It.IsAny <CancellationToken>())).ReturnsAsync(contentfulCollection);
            _contentfulFactory.Setup(_ => _.ToModel(contentfulPrivacyNotice)).Returns(privacyNotice);

            // Act
            var result = AsyncTestHelper.Resolve(_repository.GetPrivacyNotice(slug));

            // Assert
            result.Should().BeOfType <PrivacyNotice>();
        }
Пример #14
0
        public void ShouldReturnTrueIfUserHasGlobalAccessAndHasGroupInList()
        {
            // Arrange
            var query      = new QueryBuilder <ContentfulGroupAdvisor>().ContentTypeIs("groupAdvisors").FieldEquals("fields.email", "email").Include(1).Build();
            var collection = new ContentfulCollection <ContentfulGroupAdvisor>();

            collection.Items = new List <ContentfulGroupAdvisor>()
            {
                new ContentfulGroupAdvisorBuilder().GlobalAccess(true).ContentfulReferences(new List <ContentfulReference> {
                    new ContentfulReferenceBuilder().Slug("group").Build()
                }).Build()
            };

            // Mock
            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulGroupAdvisor> >(q => q.Build() == query), It.IsAny <CancellationToken>()))
            .ReturnsAsync(collection);
            _contentfulFactory.Setup(o => o.ToModel(It.Is <ContentfulGroupAdvisor>(g => g.Groups.ToList().Exists(p => p.Slug == "group"))))
            .Returns(new GroupAdvisorBuilder().GlobalAccess(true).Groups(new List <string>()
            {
                "group"
            }).Build());

            // Act
            var result = AsyncTestHelper.Resolve(_reporisory.CheckIfUserHasAccessToGroupBySlug("group", "email"));

            // Assert
            result.Should().BeTrue();
        }
        public void ShouldReturnSuccessIfNewsArticleSunsetDateIsInThePast()
        {
            // Arrange
            const string slug            = "news-with-sunrise-date-in-future";
            DateTime     nowDateTime     = DateTime.Now;
            DateTime     pastSunRiseDate = DateTime.Now.AddDays(-20);
            DateTime     pastSunSetDate  = DateTime.Now.AddDays(-10);

            _mockTimeProvider.Setup(o => o.Now()).Returns(nowDateTime);
            var newsWithSunsetDateInPast = new ContentfulNewsBuilder()
                                           .SunsetDate(pastSunSetDate)
                                           .SunriseDate(pastSunRiseDate)
                                           .Slug(slug)
                                           .Build();
            var collection = new ContentfulCollection <ContentfulNews>();

            collection.Items = new List <ContentfulNews> {
                newsWithSunsetDateInPast
            };
            var simpleNewsQuery =
                new QueryBuilder <ContentfulNews>()
                .ContentTypeIs("news")
                .FieldEquals("fields.slug", slug)
                .Include(1)
                .Build();

            _videoRepository.Setup(o => o.Process(It.IsAny <string>())).Returns(newsWithSunsetDateInPast.Body);
            _cacheWrapper.Setup(_ => _.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "news-all"), It.IsAny <Func <Task <IList <ContentfulNews> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(collection.Items.ToList());

            // Act
            var response = AsyncTestHelper.Resolve(_repository.GetNews(slug));

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
        }
Пример #16
0
        private ContentfulCollection <JObject> FetchEntriesRecursively(ContentfulCollection <JObject> entries)
        {
            var entryList       = new List <JObject>();
            var includedAssets  = new List <Asset>();
            var includedEntries = new List <Entry <dynamic> >();
            var collection      = new ContentfulCollection <JObject>()
            {
                Items = entries.Items
            };

            entryList.AddRange(entries.Items);
            includedAssets.AddRange(entries.IncludedAssets);
            includedEntries.AddRange(entries.IncludedEntries);

            _skip += _limit;

            while (collection.Count() == _limit)
            {
                collection = _client.GetEntries(CreateQueryBuilder()).Result;

                entryList.AddRange(collection.Items);
                includedAssets.AddRange(collection.IncludedAssets.Where(c => !includedAssets.Any(a => a.SystemProperties.Id == c.SystemProperties.Id)));
                includedEntries.AddRange(collection.IncludedEntries.Where(c => !includedAssets.Any(a => a.SystemProperties.Id == c.SystemProperties.Id)));

                _skip += _limit;
            }

            collection.Items           = entryList;
            collection.IncludedAssets  = includedAssets;
            collection.IncludedEntries = includedEntries;

            return(collection);
        }
Пример #17
0
        public void ShouldReturnAListOfAListOfCategories()
        {
            // Arrange
            const string slug                   = "unit-test-GroupCategory";
            var          testCategorySlug       = "test-category-slug";
            var          listOfContentfulGroups = SetupMockFactoriesAndGetContentfulGroupsForCollection(testCategorySlug);
            var          collection             = new ContentfulCollection <ContentfulGroup>();

            collection.Items = listOfContentfulGroups;

            var rawContentfulGroupCategory = new ContentfulGroupCategoryBuilder().Slug(slug).Build();
            var rawGroupCategory           = new GroupCategory("name", slug, "icon", "imageUrl");

            var builder = new QueryBuilder <ContentfulGroup>().ContentTypeIs("group").Include(1).FieldEquals("fields.mapPosition[near]", Defaults.Groups.StockportLatitude + "," + Defaults.Groups.StockportLongitude + ",10").Build();

            _client.Setup(o => o.GetEntries <ContentfulGroup>(It.Is <string>(q => q.Contains(builder)),
                                                              It.IsAny <CancellationToken>())).ReturnsAsync(collection);
            _cacheWrapper.Setup(o => o.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "group-categories"), It.IsAny <Func <Task <List <GroupCategory> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(new List <GroupCategory>()
            {
                rawGroupCategory
            });

            var noLatLngBuilder = new QueryBuilder <ContentfulGroup>().ContentTypeIs("group").Include(1).Build();

            _client.Setup(o => o.GetEntries <ContentfulGroup>(It.Is <string>(q => q.Contains(noLatLngBuilder)),
                                                              It.IsAny <CancellationToken>())).ReturnsAsync(collection);

            // Act
            var response             = AsyncTestHelper.Resolve(_repository.GetGroupResults(new GroupSearch(), slug));
            var filteredGroupResults = response.Get <GroupResults>();

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
            filteredGroupResults.Categories.Count.Should().Be(1);
        }
Пример #18
0
        public async Task GettingIndexShouldSetLayoutCorrectly()
        {
            //Arrange
            var collection = new ContentfulCollection <Layout>();

            collection.Items = new List <Layout>()
            {
                new Layout()
                {
                    Title = "SomeTitle"
                }
            };
            var client = new Mock <IContentfulClient>();

            client.SetupGet(c => c.SerializerSettings).Returns(new JsonSerializerSettings());
            client.Setup(c => c.GetEntries(It.IsAny <QueryBuilder <Layout> >(), default(CancellationToken)))
            .Returns(Task.FromResult(collection));
            var model = new IndexModel(client.Object);
            //Act

            await model.OnGet();

            //Assert
            Assert.Equal("SomeTitle", model.IndexPage.Title);
        }
Пример #19
0
        public void ShouldGetsASinglePaymentItemFromASlug()
        {
            // Arrange
            const string slug = "any-payment";

            var rawPayment = new ContentfulPaymentBuilder().Slug(slug).Build();
            var collection = new ContentfulCollection <ContentfulPayment>();

            collection.Items = new List <ContentfulPayment> {
                rawPayment
            };

            var builder = new QueryBuilder <ContentfulPayment>().ContentTypeIs("payment").FieldEquals("fields.slug", slug).Include(1);

            _contentfulClient.Setup(o => o.GetEntries(
                                        It.Is <QueryBuilder <ContentfulPayment> >(
                                            q => q.Build() == builder.Build()),
                                        It.IsAny <CancellationToken>()))
            .ReturnsAsync(collection);

            // Act
            var response    = AsyncTestHelper.Resolve(_repository.GetPayment(slug));
            var paymentItem = response.Get <Payment>();

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
            paymentItem.Description.Should().Be(rawPayment.Description);
            paymentItem.Title.Should().Be(rawPayment.Title);
            paymentItem.Teaser.Should().Be(rawPayment.Teaser);
            paymentItem.Slug.Should().Be(rawPayment.Slug);
            paymentItem.PaymentDetailsText.Should().Be(rawPayment.PaymentDetailsText);
            paymentItem.ParisReference.Should().Be(rawPayment.ParisReference);
            paymentItem.Breadcrumbs.First().Title.Should().Be("title");
        }
Пример #20
0
        public void ShouldGetAllPayments()
        {
            // Arrange
            var rawPayments = new List <ContentfulPayment>();

            rawPayments.Add(new ContentfulPaymentBuilder().Slug("firstPayment").Build());
            rawPayments.Add(new ContentfulPaymentBuilder().Slug("secondPayment").Build());
            rawPayments.Add(new ContentfulPaymentBuilder().Slug("thirdPayment").Build());
            var collection = new ContentfulCollection <ContentfulPayment>();

            collection.Items = rawPayments;

            var builder = new QueryBuilder <ContentfulPayment>().ContentTypeIs("payment").Include(1).Limit(ContentfulQueryValues.LIMIT_MAX);

            _contentfulClient.Setup(o => o.GetEntries(
                                        It.Is <QueryBuilder <ContentfulPayment> >(
                                            q => q.Build() == builder.Build()),
                                        It.IsAny <CancellationToken>()))
            .ReturnsAsync(collection);

            // Act
            var response = AsyncTestHelper.Resolve(_repository.Get());
            var payments = response.Get <List <Payment> >();

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
            payments.Count.Should().Be(rawPayments.Count);
            payments[0].Slug.Should().Be(rawPayments[0].Slug);
            payments[1].Slug.Should().Be(rawPayments[1].Slug);
            payments[2].Slug.Should().Be(rawPayments[2].Slug);
        }
Пример #21
0
        public void ShouldReturnVolunteeringWhenSelected()
        {
            // Arrange
            const string slug     = "unit-test-GroupCategory";
            MapPosition  location = new MapPosition()
            {
                Lat = 1, Lon = 1
            };
            var contentfulGroupWithlocation = new ContentfulGroupBuilder().Slug(slug).MapPosition(location).Build();
            var collection = new ContentfulCollection <ContentfulGroup>();

            collection.Items = new List <ContentfulGroup> {
                contentfulGroupWithlocation
            };

            bool volunteering      = true;
            var  groupWithLocation = new GroupBuilder().Volunteering(volunteering).Slug(slug).Build();

            var builder = new QueryBuilder <ContentfulGroup>().ContentTypeIs("group").FieldEquals("fields.slug", slug).Include(1);

            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulGroup> >(q => q.Build() == builder.Build()),
                                            It.IsAny <CancellationToken>())).ReturnsAsync(collection);

            _cacheWrapper.Setup(o => o.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "event-all"), It.IsAny <Func <Task <IList <ContentfulEvent> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(new List <ContentfulEvent>());
            _groupFactory.Setup(o => o.ToModel(contentfulGroupWithlocation)).Returns(groupWithLocation);

            // Act
            var response = AsyncTestHelper.Resolve(_repository.GetGroup(slug, false));

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
            var responseProfile = response.Get <Group>();

            responseProfile.Volunteering.Should().Be(volunteering);
        }
        public void GivenThereIsItemInTheContentResponse_ItReturnsOKResponseWithTheContentOfStartPage()
        {
            // Arrange
            string slug = "startpage_slug";
            var    ContentfulStartPage = new ContentfulStartPageBuilder().Slug(slug).Build();
            var    collection          = new ContentfulCollection <ContentfulStartPage>();

            collection.Items = new List <ContentfulStartPage> {
                ContentfulStartPage
            };

            List <Alert> _alerts = new List <Alert> {
                new Alert("title", "subHeading", "body",
                          "severity", new DateTime(0001, 1, 1, 0, 0, 0, DateTimeKind.Utc),
                          new DateTime(9999, 9, 9, 0, 0, 0, DateTimeKind.Utc), string.Empty, false)
            };

            List <Alert> _inlineAlerts = new List <Alert> {
                new Alert("title", "subHeading", "body",
                          "severity", new DateTime(0001, 1, 1, 0, 0, 0, DateTimeKind.Utc),
                          new DateTime(9999, 9, 9, 0, 0, 0, DateTimeKind.Utc), string.Empty, false)
            };

            var startPageItem = new StartPage("Start Page", "startPageSlug", "this is a teaser", "This is a summary", "An upper body", "Start now", "http://start.com", "Lower body", "image.jpg", "icon", new List <Crumb> {
                new Crumb("title", "slug", "type")
            }, _alerts, _inlineAlerts, DateTime.MinValue, DateTime.MaxValue);

            var builder = new QueryBuilder <ContentfulRedirect>().ContentTypeIs("startPage").FieldEquals("fields.slug", slug).Include(3);

            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulStartPage> >(q => q.Build() == builder.Build()),
                                            It.IsAny <CancellationToken>())).ReturnsAsync(collection);

            _startPageFactory.Setup(o => o.ToModel(It.IsAny <ContentfulStartPage>())).Returns(startPageItem);

            var response = AsyncTestHelper.Resolve(_repository.GetStartPage(slug));

            var startPage = response.Get <StartPage>();

            // Act

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.OK);
            startPage.Title.Should().Be("Start Page");
            startPage.Slug.Should().Be("startPageSlug");
            startPage.Teaser.Should().Be("this is a teaser");
            startPage.Summary.Should().Be("This is a summary");
            startPage.UpperBody.Should().Be("An upper body");
            startPage.FormLink.Should().Be("http://start.com");
            startPage.FormLinkLabel.Should().Be("Start now");
            startPage.LowerBody.Should().Be("Lower body");
            startPage.BackgroundImage.Should().Be("image.jpg");
            startPage.Icon.Should().Be("icon");
            startPage.Breadcrumbs.Should().HaveCount(1);
            startPage.Alerts.Should().BeEquivalentTo(_alerts);
            startPage.AlertsInline.Should().BeEquivalentTo(_inlineAlerts);
        }
        public NewsRepositoryTest()
        {
            _mockTimeProvider = new Mock <ITimeProvider>();
            _videoRepository  = new Mock <IVideoRepository>();
            _cacheWrapper     = new Mock <ICache>();

            _newsContentType = new ContentType()
            {
                Fields = new List <Field>()
                {
                    new Field()
                    {
                        Name  = "Categories",
                        Items = new Schema()
                        {
                            Validations = new List <IFieldValidator>()
                            {
                                new InValuesValidator {
                                    RequiredValues = new List <string>()
                                    {
                                        "Benefits", "Business", "Council leader"
                                    }
                                }
                            }
                        }
                    }
                }
            };

            _newsroomContentfulCollection       = new ContentfulCollection <ContentfulNewsRoom>();
            _newsroomContentfulCollection.Items = new List <ContentfulNewsRoom>
            {
                new ContentfulNewsRoomBuilder().Build()
            };
            _contentfulClientManager = new Mock <IContentfulClientManager>();
            _client = new Mock <IContentfulClient>();
            _contentfulClientManager.Setup(o => o.GetClient(_config)).Returns(_client.Object);
            _alertBuilder = new Mock <IContentfulFactory <ContentfulAlert, Alert> >();

            _contentfulFactory = new NewsContentfulFactory(_videoRepository.Object, new DocumentContentfulFactory(), _alertBuilder.Object, _mockTimeProvider.Object);

            _client.Setup(o => o.GetEntries(
                              It.Is <QueryBuilder <ContentfulNewsRoom> >(q => q.Build() == new QueryBuilder <ContentfulNewsRoom>().ContentTypeIs("newsroom").Include(1).Build()),
                              It.IsAny <CancellationToken>())).ReturnsAsync(_newsroomContentfulCollection);

            _client.Setup(o => o.GetContentType("news", It.IsAny <CancellationToken>()))
            .ReturnsAsync(_newsContentType);

            _newsContentfulFactory     = new Mock <IContentfulFactory <ContentfulNews, News> >();
            _newsRoomContentfulFactory = new Mock <IContentfulFactory <ContentfulNewsRoom, Newsroom> >();

            _configuration = new Mock <IConfiguration>();
            _configuration.Setup(_ => _["redisExpiryTimes:News"]).Returns("60");
            _repository = new NewsRepository(_config, _mockTimeProvider.Object, _contentfulClientManager.Object, _newsContentfulFactory.Object, _newsRoomContentfulFactory.Object, _cacheWrapper.Object, _configuration.Object);
        }
Пример #24
0
        public void GetsProfileForProfileSlug()
        {
            const string slug            = "a-slug";
            var          contentfulTopic = new ContentfulProfileBuilder().Slug(slug).Build();
            var          collection      = new ContentfulCollection <ContentfulProfile>();

            collection.Items = new List <ContentfulProfile> {
                contentfulTopic
            };

            var profile = new Profile
            {
                Title       = "title",
                Slug        = "slug",
                Subtitle    = "subtitle",
                Quote       = "quote",
                Image       = "image",
                Body        = "body",
                Breadcrumbs = new List <Crumb>
                {
                    new Crumb("title", "slug", "type")
                },
                Alerts = new List <Alert>
                {
                    new Alert("title",
                              "subheading",
                              "body",
                              "severity",
                              DateTime.MinValue,
                              DateTime.MaxValue,
                              "slug",
                              false)
                },
                TriviaSubheading = "trivia heading",
                TriviaSection    = new List <Trivia>(),
                InlineQuotes     = new List <InlineQuote>(),
                Author           = "author",
                Subject          = "subject"
            };

            var builder = new QueryBuilder <ContentfulProfile>().ContentTypeIs("profile").FieldEquals("fields.slug", slug).Include(1);


            _client.Setup(o => o.GetEntries(It.Is <QueryBuilder <ContentfulProfile> >(q => q.Build() == builder.Build()),
                                            It.IsAny <CancellationToken>())).ReturnsAsync(collection);
            _profileFactory.Setup(o => o.ToModel(contentfulTopic)).Returns(profile);

            var response = AsyncTestHelper.Resolve(_repository.GetProfile(slug));

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            var responseProfile = response.Get <Profile>();

            responseProfile.Should().BeEquivalentTo(profile);
        }
        public static IContentfulClient WithFakeContent <TContent>(this IContentfulClient client, params TContent[] content)
        {
            var response = new ContentfulCollection <TContent> {
                Items = content
            };

            A.CallTo(() => client.GetEntriesByType(A <string> .Ignored, A <QueryBuilder <TContent> > .Ignored, A <CancellationToken> .Ignored))
            .ReturnsLazily(() => response);

            return(client);
        }
        public void CallingContentfulShouldReturnCorrectNumberOfDocuments()
        {
            //Arrange
            var mockClient = new Mock <IContentfulClient>();

            mockClient.Setup(c => c.GetSpace(default(CancellationToken)))
            .ReturnsAsync(
                new Space()
            {
                SystemProperties = new SystemProperties
                {
                    Id = "467"
                },
                Locales = new List <Locale>()
                {
                    new Locale()
                    {
                        Code    = "en-US",
                        Default = true
                    }
                }
            });

            var collection = new ContentfulCollection <JObject>()
            {
                Items = new List <JObject>()
                {
                    JObject.FromObject(new { sys = new { id = "123" } }),
                    JObject.FromObject(new { sys = new { id = "3456" } }),
                    JObject.FromObject(new { sys = new { id = "62365" } }),
                    JObject.FromObject(new { sys = new { id = "tw635" } }),
                    JObject.FromObject(new { sys = new { id = "uer46" } }),
                    JObject.FromObject(new { sys = new { id = "jy456" } }),
                },

                IncludedAssets  = new List <Asset>(),
                IncludedEntries = new List <Entry <dynamic> >()
            };

            mockClient.Setup(c => c.GetEntries(It.IsAny <QueryBuilder <JObject> >(), default(CancellationToken)))
            .ReturnsAsync(collection);

            var mockContext = new Mock <IExecutionContext>();


            var contentful = new Contentful(mockClient.Object).WithContentField("body");

            //Act
            var res = contentful.Execute(new List <IDocument>(), mockContext.Object);

            //Assert
            Assert.Equal(6, res.Count());
        }
        public void GetsAllNewsItemsWhenNoNewsroomIsPresent()
        {
            _mockTimeProvider.Setup(o => o.Now()).Returns(new DateTime(2016, 08, 5));

            var newsRoom = new Newsroom(new List <Alert> {
            }, true, "");

            _newsRoomContentfulFactory.Setup(o => o.ToModel(It.IsAny <ContentfulNewsRoom>())).Returns(newsRoom);

            var news = new News(Title, Slug, Teaser, Purpose, Image, ThumbnailImage, Body, _sunriseDate, _sunsetDate, _crumbs, _alerts, null, new List <Document>(), _newsCategories);

            _newsContentfulFactory.Setup(o => o.ToModel(It.IsAny <ContentfulNews>())).Returns(news);

            var newsListCollection = new ContentfulCollection <ContentfulNews>();

            newsListCollection.Items = new List <ContentfulNews>
            {
                new ContentfulNewsBuilder().Title("Another news article").Slug("another-news-article").Teaser("This is another news article").SunriseDate(new DateTime(2016, 06, 30, 23, 0, 0, DateTimeKind.Utc)).SunsetDate(new DateTime(2017, 11, 22, 23, 0, 0, DateTimeKind.Utc)).Build(),
                new ContentfulNewsBuilder().Title("This is the news").Slug("news-of-the-century").Teaser("Read more for the news").SunriseDate(new DateTime(2016, 08, 24, 23, 30, 0, DateTimeKind.Utc)).SunsetDate(new DateTime(2016, 08, 23, 23, 0, 0, DateTimeKind.Utc)).Build(),
            };
            _client.Setup(o => o.GetEntries <ContentfulNews>(
                              It.Is <string>(q => q.Contains(new QueryBuilder <ContentfulNews>().ContentTypeIs("news").Include(1).Build())),
                              It.IsAny <CancellationToken>())).ReturnsAsync(newsListCollection);

            _videoRepository.Setup(o => o.Process(It.IsAny <string>())).Returns("The news");

            _cacheWrapper.Setup(_ => _.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "news-all"), It.IsAny <Func <Task <IList <ContentfulNews> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(newsListCollection.Items.ToList());
            _cacheWrapper.Setup(_ => _.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "newsroom"), It.IsAny <Func <Task <ContentfulNewsRoom> > >(), It.Is <int>(s => s == 60))).ReturnsAsync(new ContentfulNewsRoom {
                Title = "test"
            });


            var response = AsyncTestHelper.Resolve(_repository.Get(null, null, null, null));

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            var newsroom = response.Get <Newsroom>();

            newsroom.Alerts.Count.Should().Be(0);
            newsroom.News.Count.Should().Be(2);
            newsroom.News.First().Title.Should().Be(Title);
            newsroom.News.First().Body.Should().Be(Body);
            newsroom.News.First().Slug.Should().Be(Slug);
            newsroom.News.First().Teaser.Should().Be(Teaser);
            newsroom.News.First().SunriseDate.Should().Be(_sunriseDate);
            newsroom.News.First().SunsetDate.Should().Be(_sunsetDate);
            newsroom.News.First().Image.Should().Be(Image);
            newsroom.News.First().ThumbnailImage.Should().Be(ThumbnailImage);
            newsroom.News.First().Breadcrumbs.Should().BeEquivalentTo(_crumbs);
            newsroom.News.First().Alerts.Should().BeEquivalentTo(_alerts);
            newsroom.Dates.Should().HaveCount(1);
            newsroom.Dates[0].Should().HaveMonth(8);
            newsroom.Dates[0].Should().HaveYear(2016);
        }
Пример #28
0
        public async Task CoursesModelShouldLoadAllCoursesWhenNoCategoryIsSelected()
        {
            //Arrange
            var categories = new ContentfulCollection <Category>();

            categories.Items = new List <Category>()
            {
                new Category()
                {
                    Title = "Cat1",
                    Slug  = "sluggish"
                },
                new Category()
                {
                    Title = "Cat5",
                    Slug  = "another-slug"
                }
            };

            var courses = new ContentfulCollection <Course>();

            courses.Items = new List <Course>()
            {
                new Course()
                {
                    Title = "Course1",
                    Slug  = "bah-slug"
                },
                new Course()
                {
                    Title = "Cruiser2",
                    Slug  = "kah-slug"
                }
            };

            var client = new Mock <IContentfulClient>();

            client.SetupGet(c => c.SerializerSettings).Returns(new JsonSerializerSettings());
            client.Setup(c => c.GetEntries(It.IsAny <QueryBuilder <Course> >(), default(CancellationToken)))
            .Returns(Task.FromResult(courses));
            client.Setup(c => c.GetEntriesByType("category", It.IsAny <QueryBuilder <Category> >(), default(CancellationToken)))
            .Returns(Task.FromResult(categories));
            var crumbs    = new Mock <IBreadcrumbsManager>();
            var localizer = new Mock <IViewLocalizer>();

            var model = new CoursesModel(client.Object, crumbs.Object, localizer.Object);
            //Act
            await model.OnGet(null);

            //Assert
            Assert.Equal(courses, model.Courses);
        }
        public void ShouldReturnNotFoundIfNoEventCategoryFound()
        {
            var collection = new ContentfulCollection <ContentfulEventCategory>();

            collection.Items = new List <ContentfulEventCategory>();

            _cacheWrapper.Setup(o => o.GetFromCacheOrDirectlyAsync(It.Is <string>(s => s == "event-categories-content-type"), It.IsAny <Func <Task <List <EventCategory> > > >(), It.Is <int>(s => s == 60))).ReturnsAsync(new List <EventCategory>());

            // Act
            var response = AsyncTestHelper.Resolve(_repository.GetEventCategories());

            response.StatusCode.Should().Be(HttpStatusCode.NotFound);
        }
Пример #30
0
        public async Task PageShouldSelectCorrectCourseAndLessonBySlugs()
        {
            //Arrange
            var courses = new ContentfulCollection <Course>();

            courses.Items = new List <Course> {
                new Course
                {
                    Slug    = "somewhat-sluggish",
                    Lessons = new List <Lesson>
                    {
                        new Lesson
                        {
                            Sys = new SystemProperties
                            {
                                Id = "434"
                            },
                            Slug = "real-slugger"
                        }
                    }
                }
            };
            var client = new Mock <IContentfulClient>();

            client.SetupGet(c => c.SerializerSettings).Returns(new JsonSerializerSettings());
            client.Setup(c => c.GetEntries(It.IsAny <QueryBuilder <Course> >(), default(CancellationToken)))
            .Returns(Task.FromResult(courses));
            var visitedLessons        = new Mock <IVisitedLessonsManager>();
            var breadcrumbsManager    = new Mock <IBreadcrumbsManager>();
            var viewlocalizer         = new Mock <IViewLocalizer>();
            var httpContext           = new Mock <HttpContext>();
            var modelState            = new ModelStateDictionary();
            var modelMetadataProvider = new EmptyModelMetadataProvider();
            var actionContext         = new ActionContext(httpContext.Object, new RouteData(), new PageActionDescriptor(), modelState);
            var viewData    = new ViewDataDictionary(modelMetadataProvider, modelState);
            var pageContext = new PageContext(actionContext)
            {
                ViewData = viewData
            };
            var model = new LessonsModel(client.Object, visitedLessons.Object, breadcrumbsManager.Object, viewlocalizer.Object);

            model.PageContext = pageContext;

            //Act
            var res = await model.OnGet("somewhat-sluggish", "real-slugger");

            //Assert
            Assert.IsType <PageResult>(res);
            Assert.Equal("somewhat-sluggish", model.Course.Slug);
            Assert.Equal("real-slugger", model.SelectedLesson.Slug);
        }