public async Task GetCurrentSpecificationsByFundingPeriodIdAndFundingStreamId_GivenResultsReturned_ReturnsOKObject()
        {
            //Arrange
            Specification spec1 = new Specification {
                Id = "spec1"
            };
            Specification spec2 = new Specification {
                Id = "spec2"
            };

            IQueryCollection queryStringValues = new QueryCollection(new Dictionary <string, StringValues>
            {
                { "fundingPeriodId", new StringValues(FundingPeriodId) },
                { "fundingStreamId", new StringValues(FundingStreamId) }
            });

            HttpRequest request = Substitute.For <HttpRequest>();

            request
            .Query
            .Returns(queryStringValues);

            ILogger logger = CreateLogger();

            ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository();

            specificationsRepository
            .GetApprovedOrUpdatedSpecificationsByFundingPeriodAndFundingStream(Arg.Is(FundingPeriodId), Arg.Is(FundingStreamId))
            .Returns(new[] { spec1, spec2 });

            IResultsRepository resultsRepository = CreateResultsRepository();

            resultsRepository
            .SpecificationHasResults(Arg.Is("spec1"))
            .Returns(true);

            resultsRepository
            .SpecificationHasResults(Arg.Is("spec2"))
            .Returns(true);

            SpecificationsService service = CreateService(logs: logger, specificationsRepository: specificationsRepository, resultsRepository: resultsRepository);

            //Act
            IActionResult result = await service.GetCurrentSpecificationsByFundingPeriodIdAndFundingStreamId(request);

            //Assert
            result
            .Should()
            .BeOfType <OkObjectResult>();

            OkObjectResult okObjectResult = result as OkObjectResult;

            IEnumerable <SpecificationSummary> summaries = okObjectResult.Value as IEnumerable <SpecificationSummary>;

            summaries
            .Count()
            .Should()
            .Be(2);
        }
        public async Task GetSpecificationWithResultsByFundingPeriodIdAndFundingStreamId_GivenResultsReturnedButOnlyOneHasProviderResults_ReturnsOKObjectWithOneSummary()
        {
            //Arrange
            string fundingStreamId  = NewRandomString();
            string fundingPeriodId  = NewRandomString();
            string specificationId1 = NewRandomString();
            string specificationId2 = NewRandomString();

            IMapper mapper = CreateImplementedMapper();

            IEnumerable <Specification> specifications = NewSpecifications(
                _ => _.WithId(specificationId1),
                _ => _.WithId(specificationId2));

            ILogger logger = CreateLogger();

            ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository();

            specificationsRepository
            .GetSpecificationsByFundingPeriodAndFundingStream(Arg.Is(FundingPeriodId), Arg.Is(FundingStreamId))
            .Returns(specifications);

            IResultsRepository resultsRepository = CreateResultsRepository();

            resultsRepository
            .SpecificationHasResults(Arg.Is(specificationId1))
            .Returns(true);

            resultsRepository
            .SpecificationHasResults(Arg.Is(specificationId2))
            .Returns(false);

            SpecificationsService service = CreateService(
                mapper: mapper,
                logs: logger,
                specificationsRepository: specificationsRepository,
                resultsRepository: resultsRepository);

            //Act
            IActionResult result = await service.GetSpecificationWithResultsByFundingPeriodIdAndFundingStreamId(FundingPeriodId, FundingStreamId);

            //Assert
            result
            .Should()
            .BeOfType <OkObjectResult>();

            OkObjectResult okObjectResult = result as OkObjectResult;

            IEnumerable <SpecificationSummary> summaries = okObjectResult.Value as IEnumerable <SpecificationSummary>;

            summaries
            .Count()
            .Should()
            .Be(1);
        }