public async Task EditSpecificationStatus_GivenNewStatusOfUpdated_UpdatesSearchReturnsOK() { //Arrange EditStatusModel specificationEditStatusModel = new EditStatusModel { PublishStatus = PublishStatus.Updated }; ILogger logger = CreateLogger(); Specification specification = CreateSpecification(); SpecificationVersion specificationVersion = specification.Current; specificationVersion.PublishStatus = PublishStatus.Approved; ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationById(Arg.Is(SpecificationId)) .Returns(specification); specificationsRepository .UpdateSpecification(Arg.Any <Specification>()) .Returns(HttpStatusCode.OK); ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); SpecificationVersion newSpecVersion = specificationVersion.Clone() as SpecificationVersion; newSpecVersion.PublishStatus = PublishStatus.Updated; IVersionRepository <SpecificationVersion> versionRepository = CreateVersionRepository(); versionRepository .CreateVersion(Arg.Any <SpecificationVersion>(), Arg.Any <SpecificationVersion>()) .Returns(newSpecVersion); SpecificationsService service = CreateService( logs: logger, specificationsRepository: specificationsRepository, searchRepository: searchRepository, specificationVersionRepository: versionRepository); //Act IActionResult result = await service.EditSpecificationStatus(SpecificationId, specificationEditStatusModel, null); //Arrange result .Should() .BeOfType <OkObjectResult>() .Which .Value .Should() .BeOfType <PublishStatusResultModel>() .Which .PublishStatus .Should() .Be(PublishStatus.Updated); specification .Current .PublishStatus .Should() .Be(PublishStatus.Updated); await _specificationIndexer .Received(1) .Index(Arg.Is <Specification>(_ => _.Current.PublishStatus == PublishStatus.Updated)); // await // searchRepository // .Received(1) // .Index(Arg.Is<IEnumerable<SpecificationIndex>>(m => m.First().Status == "Updated")); await versionRepository .Received(1) .SaveVersion(Arg.Is(newSpecVersion)); }
public async Task EditSpecificationStatus_GivenNewStatusOfUpdated_UpdatesSearchReturnsOK() { //Arrange EditStatusModel specificationEditStatusModel = new EditStatusModel { PublishStatus = PublishStatus.Updated }; string json = JsonConvert.SerializeObject(specificationEditStatusModel); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpContext context = Substitute.For <HttpContext>(); HttpRequest request = Substitute.For <HttpRequest>(); IQueryCollection queryStringValues = new QueryCollection(new Dictionary <string, StringValues> { { "specificationId", new StringValues(SpecificationId) }, }); request .Query .Returns(queryStringValues); request .Body .Returns(stream); request .HttpContext .Returns(context); ILogger logger = CreateLogger(); Specification specification = CreateSpecification(); SpecificationVersion specificationVersion = specification.Current; specificationVersion.PublishStatus = PublishStatus.Approved; ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationById(Arg.Is(SpecificationId)) .Returns(specification); specificationsRepository .UpdateSpecification(Arg.Any <Specification>()) .Returns(HttpStatusCode.OK); ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); SpecificationVersion newSpecVersion = specificationVersion.Clone() as SpecificationVersion; newSpecVersion.PublishStatus = PublishStatus.Updated; IVersionRepository <SpecificationVersion> versionRepository = CreateVersionRepository(); versionRepository .CreateVersion(Arg.Any <SpecificationVersion>(), Arg.Any <SpecificationVersion>()) .Returns(newSpecVersion); SpecificationsService service = CreateService( logs: logger, specificationsRepository: specificationsRepository, searchRepository: searchRepository, specificationVersionRepository: versionRepository); //Act IActionResult result = await service.EditSpecificationStatus(request); //Arrange result .Should() .BeOfType <OkObjectResult>() .Which .Value .Should() .BeOfType <PublishStatusResultModel>() .Which .PublishStatus .Should() .Be(PublishStatus.Updated); specification .Current .PublishStatus .Should() .Be(PublishStatus.Updated); await searchRepository .Received(1) .Index(Arg.Is <IEnumerable <SpecificationIndex> >(m => m.First().Status == "Updated")); await versionRepository .Received(1) .SaveVersion(Arg.Is(newSpecVersion)); }