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 GetApprovedSpecificationsByFundingPeriodIdAndFundingStreamId_GivenFundingStreamIdAndFundingPeriodId_ReturnsSpecificationSummary()
        {
            string fundingStreamId = NewRandomString();
            string fundingPeriodId = NewRandomString();
            string specificationId = NewRandomString();

            IMapper mapper = CreateImplementedMapper();
            ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository();

            IEnumerable <Specification> specifications = NewSpecifications(_ => _.WithId(specificationId));

            specificationsRepository
            .GetApprovedOrUpdatedSpecificationsByFundingPeriodAndFundingStream(fundingPeriodId, fundingStreamId)
            .Returns(specifications);

            SpecificationsService service = CreateService(
                mapper: mapper,
                specificationsRepository: specificationsRepository);

            IActionResult result = await service.GetApprovedSpecificationsByFundingPeriodIdAndFundingStreamId(fundingPeriodId, fundingStreamId);

            result
            .Should()
            .BeOfType <OkObjectResult>()
            .Which
            .Value
            .Should()
            .BeOfType <List <SpecificationSummary> >()
            .And
            .NotBeNull();

            List <SpecificationSummary> objContent           = (List <SpecificationSummary>)((OkObjectResult)result).Value;
            SpecificationSummary        specificationSummary = objContent.FirstOrDefault();

            specificationSummary
            .Should()
            .NotBeNull();

            specificationSummary
            .Id
            .Should()
            .Be(specificationId);
        }