private NewsController SetUpController(int numNewsItems)
        {
            List <News> listofNewsItems = BuildNewsList(numNewsItems);

            var bigNewsRoom = new Newsroom(
                listofNewsItems,
                new OrderedList <Alert>(),
                EmailAlertsOn,
                EmailAlertsTopicId,
                new List <string>(),
                new List <DateTime>());

            _repository.Setup(o =>
                              o.Get <Newsroom>(
                                  It.IsAny <string>(),
                                  It.IsAny <List <Query> >()))
            .ReturnsAsync(HttpResponse.Successful((int)HttpStatusCode.OK, bigNewsRoom));

            var controller = new NewsController(
                _repository.Object,
                _processedContentRepository.Object,
                _mockRssFeedFactory.Object,
                _logger.Object,
                _config.Object,
                new BusinessId(BusinessId),
                _filteredUrl.Object
                );

            return(controller);
        }
        public ContactUsControllerTest()
        {
            _mockEmailClient = new Mock <IHttpEmailClient>();
            _mockLogger      = new Mock <ILogger <ContactUsController> >();
            _configuration   = new Mock <IApplicationConfiguration>();

            _configuration.Setup(a => a.GetEmailEmailFrom(It.IsAny <string>()))
            .Returns(AppSetting.GetAppSetting("businessid:Email:EmailFrom"));

            _businessId = new BusinessId("businessid");

            _contactUsId = new ContactUsId("name", "slug", "email", "test button text", "test return url");

            _repository.Setup(o => o.Get <ContactUsId>(It.IsAny <string>(), It.IsAny <List <Query> >()))
            .ReturnsAsync(HttpResponse.Successful(200, _contactUsId));

            _controller          = new ContactUsController(_repository.Object, _mockEmailClient.Object, _mockLogger.Object, _configuration.Object, _businessId);
            _validContactDetails = new ContactUsDetails(_userName, _userEmail, _emailSubject,
                                                        _emailBody, _serviceEmails, _title);

            var request          = new Mock <HttpRequest>();
            var context          = new Mock <HttpContext>();
            var headerDictionary = new HeaderDictionary {
                { "referer", _url }
            };

            request.Setup(r => r.Headers).Returns(headerDictionary);
            context.Setup(c => c.Request).Returns(request.Object);
            _controller.ControllerContext = new ControllerContext(new ActionContext(context.Object, new RouteData(), new ControllerActionDescriptor()));
        }
        public async Task ShouldReturnEmptyPaginationForNoNewsItems()
        {
            var emptyRepository = new Mock <IRepository>();

            emptyRepository.Setup(o => o.Get <Newsroom>(It.IsAny <string>(), It.IsAny <List <Query> >()))
            .ReturnsAsync(HttpResponse.Successful((int)HttpStatusCode.OK, _emptyNewsRoom));

            var controller = new NewsController(
                emptyRepository.Object,
                _processedContentRepository.Object,
                _mockRssFeedFactory.Object,
                _logger.Object,
                _config.Object,
                new BusinessId(BusinessId),
                _filteredUrl.Object
                );

            var actionResponse =
                await
                controller.Index(
                    new NewsroomViewModel
            {
                DateFrom = null,
                DateTo   = null
            }, 1, MaxNumberOfItemsPerPage) as ViewResult;

            var viewModel = actionResponse.ViewData.Model as NewsroomViewModel;

            viewModel.Newsroom.News.Count.Should().Be(0);
//            viewModel.Pagination.TotalItems.Should().Be(0);
        }
        public async Task CreatesRssFeedFromFactory()
        {
            var repository = new Mock <IRepository>();

            repository.Setup(o => o.Get <Newsroom>(It.IsAny <string>(), null))
            .ReturnsAsync(HttpResponse.Successful((int)HttpStatusCode.OK, _newsRoom));

            _controller = new NewsController(
                repository.Object,
                _processedContentRepository.Object,
                _mockRssFeedFactory.Object,
                _logger.Object,
                _config.Object,
                new BusinessId(BusinessId),
                _filteredUrl.Object
                );

            var response = await _controller.Rss() as ContentResult;

            response.ContentType.Should().Be("application/rss+xml");
            response.Content.Should().Be("rss fun");

            _mockRssFeedFactory.Verify(
                o => o.BuildRssFeed(It.IsAny <List <News> >(), It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }
        public async Task ItReturnsAListOfNewsArticlesForATagAndACategory()
        {
            _repository.Setup(
                o =>
                o.Get <Newsroom>("",
                                 It.Is <List <Query> >(
                                     l =>
                                     l.Contains(new Query("tag", "Events")) &&
                                     l.Contains(new Query("Category", "A Category")))))
            .ReturnsAsync(HttpResponse.Successful((int)HttpStatusCode.OK, _newsRoom));
            var actionResponse =
                await
                _controller.Index(new NewsroomViewModel { Tag = "Events", Category = "A Category" }, 1, MaxNumberOfItemsPerPage) as ViewResult;

            var viewModel = actionResponse.ViewData.Model as NewsroomViewModel;
            var news      = viewModel.Newsroom;

            news.News.Count.Should().Be(2);

            var firstNewsItem = news.News[0];

            firstNewsItem.Should().Be(NewsItemWithoutImages);

            var secondNewsItem = news.News[1];

            secondNewsItem.Should().Be(NewsItemWithImages);

            news.EmailAlerts.Should().Be(EmailAlertsOn);
            news.EmailAlertsTopicId.Should().Be(EmailAlertsTopicId);
        }
        public NewsControllerTest()
        {
            _newsRoom = new Newsroom(_listOfNewsItems, new OrderedList <Alert>(), EmailAlertsOn, EmailAlertsTopicId,
                                     new List <string>(), new List <DateTime>());
            _emptyNewsRoom = new Newsroom(new List <News>(), new OrderedList <Alert>(), EmailAlertsOn, EmailAlertsTopicId,
                                          new List <string>(), new List <DateTime>());

            // setup responses (with mock data)
            var responseListing     = new HttpResponse(200, _newsRoom, "");
            var responseDetail      = new HttpResponse(200, _processedNewsArticle, "");
            var emptyResponsListing = new HttpResponse(200, _emptyNewsRoom, "");

            // setup mocks
            _repository.Setup(o => o.Get <Newsroom>(It.IsAny <string>(), It.Is <List <Query> >(l => l.Count == 0)))
            .ReturnsAsync(responseListing);

            _repository.Setup(o => o.GetLatest <List <News> >(7))
            .ReturnsAsync(HttpResponse.Successful(200, _listOfNewsItems));

            _processedContentRepository.Setup(o => o.Get <News>("another-news-article", null))
            .ReturnsAsync(responseDetail);

            _logger = new Mock <ILogger <NewsController> >();

            _mockRssFeedFactory = new Mock <IRssFeedFactory>();
            _mockRssFeedFactory.Setup(
                o => o.BuildRssFeed(It.IsAny <List <News> >(), It.IsAny <string>(), It.IsAny <string>())).Returns("rss fun");

            _config      = new Mock <IApplicationConfiguration>();
            _filteredUrl = new Mock <IFilteredUrl>();

            _config.Setup(o => o.GetRssEmail(BusinessId)).Returns(AppSetting.GetAppSetting("rss-email"));
            _config.Setup(o => o.GetEmailAlertsNewSubscriberUrl(BusinessId))
            .Returns(AppSetting.GetAppSetting("email-alerts-url"));

            _controller = new NewsController(
                _repository.Object,
                _processedContentRepository.Object,
                _mockRssFeedFactory.Object,
                _logger.Object,
                _config.Object,
                new BusinessId(BusinessId),
                _filteredUrl.Object
                );
        }
        public async Task ShouldReturnNewsItemsForADateFilter()
        {
            _repository.Setup(o =>
                              o.Get <Newsroom>("", It.Is <List <Query> >(l => l.Contains(new Query("DateFrom", "2016-10-01")) && l.Contains(new Query("DateTo", "2016-11-01"))
                                                                         )
                                               )
                              ).ReturnsAsync(HttpResponse.Successful((int)HttpStatusCode.OK, _newsRoom));

            var actionResponse =
                await
                _controller.Index(
                    new NewsroomViewModel
            {
                DateFrom = new DateTime(2016, 10, 01),
                DateTo   = new DateTime(2016, 11, 01)
            }, 1, MaxNumberOfItemsPerPage) as ViewResult;

            var viewModel = actionResponse.ViewData.Model as NewsroomViewModel;
            var news      = viewModel.Newsroom;

            news.Should().Be(_newsRoom);
        }