public async Task OnGet_WhenSpecificationIdDoesNotExistThenBadRequestReturned() { // Arrange IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string expectedSpecificationId = string.Empty; Specification expectedSpecification = null; specsClient .GetSpecification(Arg.Any <string>()) .Returns(new ApiResponse <Specification>(HttpStatusCode.NotFound, expectedSpecification)); AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient, datasetClient, mapper); // Act IActionResult result = await datasetSchemaPageModel.OnGet(expectedSpecificationId); // Assert result.Should().NotBeNull(); result.Should().BeOfType <BadRequestObjectResult>().Which.Value.Should().Be("Select a specification"); }
public async Task OnGet_WhenSpecificationStatusCodeIsNotFoundThenNotFoundObjectResultReturned() { // Arrange IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string expectedSpecificationId = "1"; Specification expectedSpecification = null; AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient, datasetClient, mapper); specsClient .GetSpecification(expectedSpecificationId) .Returns(new ApiResponse <Specification>(HttpStatusCode.NotFound, expectedSpecification)); DatasetDefinition d1 = new DatasetDefinition() { Id = "1", Name = "APT Final Baselines", Description = "Local Authority return of provider baselines", }; DatasetDefinition d2 = new DatasetDefinition() { Id = "2", Name = "School Provider Dataset", Description = "List of providers", }; IEnumerable <DatasetDefinition> dataDefn = new List <DatasetDefinition> { d1, d2 }; datasetClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK, dataDefn)); // Act IActionResult result = await datasetSchemaPageModel.OnGet(expectedSpecificationId); // Assert result.Should().NotBeNull(); result.Should().BeOfType <NotFoundObjectResult>(); NotFoundObjectResult typeResult = result as NotFoundObjectResult; typeResult.Value.Should().Be("Unable to get specification response. Specification Id value = 1"); Assert.IsInstanceOfType(result, typeof(NotFoundObjectResult)); }
private static AssignDatasetSchemaPageModel CreatePageModel(ISpecsApiClient specsClient = null, IDatasetsApiClient datasetsClient = null, IMapper mapper = null, IAuthorizationHelper authorizationHelper = null) { AssignDatasetSchemaPageModel pageModel = new AssignDatasetSchemaPageModel( specsClient ?? CreateApiClient(), datasetsClient ?? CreateDatasetsApiClient(), mapper ?? CreateMapper(), authorizationHelper ?? TestAuthHelper.CreateAuthorizationHelperSubstitute(Common.Identity.Authorization.Models.SpecificationActionTypes.CanEditSpecification)); pageModel.PageContext = TestAuthHelper.CreatePageContext(); return(pageModel); }
public void OnPost_WhenModelIsInvalidAndDatasetDefinitionListReturnedIsNull_ShoulThrowInvalidOperationException() { // Arrange string anyString = "anyString"; string expectedSpecificationId = "spec123"; SpecificationSummary expectedSpecification = new SpecificationSummary() { FundingPeriod = new Reference(anyString, anyString), Name = anyString, Description = anyString }; ISpecsApiClient mockSpecsClient = Substitute.For <ISpecsApiClient>(); mockSpecsClient .GetSpecificationSummary(Arg.Is(expectedSpecificationId)) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); IDatasetsApiClient mockDatasetsApiClient = Substitute.For <IDatasetsApiClient>(); mockDatasetsApiClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK)); mockDatasetsApiClient .AssignDatasetSchema(Arg.Any <AssignDatasetSchemaModel>()) .Returns(HttpStatusCode.OK); IAuthorizationHelper mockAuthorizationHelper = Substitute.For <IAuthorizationHelper>(); mockAuthorizationHelper .DoesUserHavePermission(Arg.Any <ClaimsPrincipal>(), Arg.Any <ISpecificationAuthorizationEntity>(), Arg.Is(SpecificationActionTypes.CanEditSpecification)) .Returns(true); AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient: mockSpecsClient, authorizationHelper: mockAuthorizationHelper, datasetsClient: mockDatasetsApiClient, mapper: MappingHelper.CreateFrontEndMapper()); datasetSchemaPageModel.AssignDatasetSchemaViewModel = new AssignDatasetSchemaViewModel(); datasetSchemaPageModel.ModelState.AddModelError(anyString, anyString); // Act Func <Task <IActionResult> > postAction = async() => await datasetSchemaPageModel.OnPostAsync(expectedSpecificationId); // Assert postAction .Should() .Throw <InvalidOperationException>() .Which .Message .Should().Be( $"Unable to retrieve Dataset definition from the response. Specification Id value = {expectedSpecificationId}"); }
public async Task OnGet_WhenDatasetResponseIsNullThenNotObjectFoundResultIsReturned() { // Arrange IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string expectedSpecificationId = "1"; SpecificationSummary expectedSpecification = new SpecificationSummary { FundingPeriod = new Reference("2018", "17-18"), FundingStreams = new List <Reference>() { new Reference("2018", "18-19"), }, Description = "Test Spec", Id = "1", Name = "APT Final Baselines current year" }; AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient, datasetClient, mapper); specsClient .GetSpecificationSummary(expectedSpecificationId) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); IEnumerable <DatasetDefinition> dataDefn = null; datasetClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.NotFound, dataDefn)); // Act IActionResult result = await datasetSchemaPageModel.OnGet(expectedSpecificationId); // Assert result.Should().NotBeNull(); result.Should().BeOfType <NotFoundObjectResult>(); NotFoundObjectResult typeResult = result as NotFoundObjectResult; typeResult.Value.Should().Be("Check the data schema - one or more the data definitions aren't working"); }
public async Task OnPost_WhenModelIsInvalidAndUserIsUnauthorizedToEditSpecification_ShouldReturnForbidResult() { // Arrange const string anyString = "any"; string expectedSpecificationId = "spec123"; const string fundingPeriodId = "2018"; const string fundingPeriodName = "1819"; const string specificationName = "Pe and sports spec"; const string specDescription = "test spec"; SpecificationSummary expectedSpecification = new SpecificationSummary() { FundingPeriod = new Reference(fundingPeriodId, fundingPeriodName), Name = specificationName, Description = specDescription }; ISpecsApiClient mockSpecsClient = Substitute.For <ISpecsApiClient>(); mockSpecsClient .GetSpecificationSummary(Arg.Is(expectedSpecificationId)) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); IDatasetsApiClient mockDatasetsApiClient = Substitute.For <IDatasetsApiClient>(); mockDatasetsApiClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK, GetDummyDataDefinitions())); mockDatasetsApiClient .AssignDatasetSchema(Arg.Any <AssignDatasetSchemaModel>()) .Returns(HttpStatusCode.OK); IAuthorizationHelper mockAuthorizationHelper = Substitute.For <IAuthorizationHelper>(); mockAuthorizationHelper .DoesUserHavePermission(Arg.Any <ClaimsPrincipal>(), Arg.Any <ISpecificationAuthorizationEntity>(), Arg.Is(SpecificationActionTypes.CanEditSpecification)) .Returns(false); AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient: mockSpecsClient, authorizationHelper: mockAuthorizationHelper, datasetsClient: mockDatasetsApiClient, mapper: MappingHelper.CreateFrontEndMapper()); datasetSchemaPageModel.AssignDatasetSchemaViewModel = new AssignDatasetSchemaViewModel(); datasetSchemaPageModel.ModelState.AddModelError(anyString, anyString); // Act IActionResult result = await datasetSchemaPageModel.OnPostAsync(expectedSpecificationId); // Assert result .Should().BeOfType <ForbidResult>(); }
public async Task OnPost_WhenModelIsInvalidAndDataDefinitionsNotReturnedCorrectly_ShoulReturnNotFoundObjectResult() { // Arrange string anyString = "anyString"; string expectedSpecificationId = "spec123"; SpecificationSummary expectedSpecification = new SpecificationSummary() { FundingPeriod = new Reference(anyString, anyString), Name = anyString, Description = anyString }; ISpecsApiClient mockSpecsClient = Substitute.For <ISpecsApiClient>(); mockSpecsClient .GetSpecificationSummary(Arg.Is(expectedSpecificationId)) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); IDatasetsApiClient mockDatasetsApiClient = Substitute.For <IDatasetsApiClient>(); mockDatasetsApiClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.NotFound)); mockDatasetsApiClient .AssignDatasetSchema(Arg.Any <AssignDatasetSchemaModel>()) .Returns(HttpStatusCode.OK); IAuthorizationHelper mockAuthorizationHelper = Substitute.For <IAuthorizationHelper>(); mockAuthorizationHelper .DoesUserHavePermission(Arg.Any <ClaimsPrincipal>(), Arg.Any <ISpecificationAuthorizationEntity>(), Arg.Is(SpecificationActionTypes.CanEditSpecification)) .Returns(true); AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient: mockSpecsClient, authorizationHelper: mockAuthorizationHelper, datasetsClient: mockDatasetsApiClient, mapper: MappingHelper.CreateFrontEndMapper()); datasetSchemaPageModel.AssignDatasetSchemaViewModel = new AssignDatasetSchemaViewModel(); datasetSchemaPageModel.ModelState.AddModelError(anyString, anyString); // Act IActionResult result = await datasetSchemaPageModel.OnPostAsync(expectedSpecificationId); // Assert result .Should().BeOfType <NotFoundObjectResult>() .Which .Value .Should().Be("Check the data schema - one or more the data definitions aren't working"); }
public async Task OnPost_WhenModelIsInvalidShouldPopulate_ShoulReturnCorrectRedirect() { // Arrange string anyString = "anyString"; string expectedSpecificationId = "spec123"; SpecificationSummary expectedSpecification = new SpecificationSummary() { FundingPeriod = new Reference(anyString, anyString), Name = anyString, Description = anyString }; ISpecsApiClient mockSpecsClient = Substitute.For <ISpecsApiClient>(); mockSpecsClient .GetSpecificationSummary(Arg.Is(expectedSpecificationId)) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); IDatasetsApiClient mockDatasetsApiClient = Substitute.For <IDatasetsApiClient>(); mockDatasetsApiClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK, GetDummyDataDefinitions())); mockDatasetsApiClient .AssignDatasetSchema(Arg.Any <AssignDatasetSchemaModel>()) .Returns(HttpStatusCode.OK); IAuthorizationHelper mockAuthorizationHelper = Substitute.For <IAuthorizationHelper>(); mockAuthorizationHelper .DoesUserHavePermission(Arg.Any <ClaimsPrincipal>(), Arg.Any <ISpecificationAuthorizationEntity>(), Arg.Is(SpecificationActionTypes.CanEditSpecification)) .Returns(true); AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient: mockSpecsClient, authorizationHelper: mockAuthorizationHelper, datasetsClient: mockDatasetsApiClient, mapper: MappingHelper.CreateFrontEndMapper()); datasetSchemaPageModel.AssignDatasetSchemaViewModel = new AssignDatasetSchemaViewModel(); // Act IActionResult result = await datasetSchemaPageModel.OnPostAsync(expectedSpecificationId); // Assert result .Should().BeOfType <RedirectResult>() .Subject .Url .Should().EndWith($"datasets/ListDatasetSchemas/{expectedSpecificationId}"); }
public void OnGet_WhenSpecificationContentIsNullThenInvalidOperationExpectionIsReturned() { // Arrange IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string expectedSpecificationId = "1"; SpecificationSummary expectedSpecification = null; AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient, datasetClient, mapper); specsClient .GetSpecificationSummary(expectedSpecificationId) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); DatasetDefinition d1 = new DatasetDefinition() { Id = "1", Name = "APT Final Baselines", Description = "Local Authority return of provider baselines", }; DatasetDefinition d2 = new DatasetDefinition() { Id = "2", Name = "School Provider Dataset", Description = "List of providers", }; IEnumerable <DatasetDefinition> dataDefn = new List <DatasetDefinition> { d1, d2 }; datasetClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK, dataDefn)); // Act Func <Task> test = async() => await datasetSchemaPageModel.OnGet(expectedSpecificationId); // Assert test.Should().ThrowExactly <InvalidOperationException>(); }
public void OnGet_WhenDatasetDefinitionIsNullThenInvalidOperationExpectionIsReturned() { // Arrange IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string expectedSpecificationId = "1"; SpecificationSummary expectedSpecification = new SpecificationSummary { FundingPeriod = new Reference("2018", "17-18"), FundingStreams = new List <Reference>() { new Reference("2018", "18-19"), }, Description = "Test Spec", Id = "1", Name = "APT Final Baselines current year" }; // InvalidOperationException expectedException = null; AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient, datasetClient, mapper); specsClient .GetSpecificationSummary(expectedSpecificationId) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); IEnumerable <DatasetDefinition> dataDefn = null; datasetClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK, dataDefn)); // Act Func <Task> test = async() => await datasetSchemaPageModel.OnGet(expectedSpecificationId); // Assert test.Should().ThrowExactly <InvalidOperationException>(); }
public async Task OnGet_WhenUserDoesNotHaveEditSpecificationPermission_ThenReturnPageResultWithAuthorizedToEditFlagSetToFalse() { // Arrange string anyString = "anyString"; string expectedSpecificationId = "spec123"; SpecificationSummary expectedSpecification = new SpecificationSummary() { FundingPeriod = new Reference(anyString, anyString), Name = anyString, Description = anyString }; ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); specsClient .GetSpecificationSummary(Arg.Is(expectedSpecificationId)) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); IDatasetsApiClient mockDatasetsApiClient = Substitute.For <IDatasetsApiClient>(); mockDatasetsApiClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK, GetDummyDataDefinitions())); IAuthorizationHelper authorizationHelper = Substitute.For <IAuthorizationHelper>(); authorizationHelper .DoesUserHavePermission(Arg.Any <ClaimsPrincipal>(), Arg.Any <ISpecificationAuthorizationEntity>(), Arg.Is(SpecificationActionTypes.CanEditSpecification)) .Returns(false); AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient: specsClient, authorizationHelper: authorizationHelper, datasetsClient: mockDatasetsApiClient); // Act IActionResult result = await datasetSchemaPageModel.OnGet(expectedSpecificationId); // Assert result .Should().BeOfType <PageResult>(); datasetSchemaPageModel .IsAuthorizedToEdit .Should().BeFalse(); }
public async Task OnGet_WhenSpecificationExistsThenSpecificationReturned() { // Arrange IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string expectedSpecificationId = "1"; SpecificationSummary expectedSpecification = new SpecificationSummary { FundingPeriod = new Reference("2018", "17-18"), FundingStreams = new List <Reference>() { new Reference("2018", "18-19"), }, Description = "Test Spec", Id = "1", Name = "APT Final Baselines current year" }; AssignDatasetSchemaPageModel datasetSchemaPageModel = CreatePageModel(specsClient, datasetClient, mapper); specsClient .GetSpecificationSummary(expectedSpecificationId) .Returns(new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, expectedSpecification)); DatasetDefinition d1 = new DatasetDefinition() { Id = "1", Name = "APT Final Baselines", Description = "Local Authority return of provider baselines", }; DatasetDefinition d2 = new DatasetDefinition() { Id = "2", Name = "School Provider Dataset", Description = "List of providers", }; IEnumerable <DatasetDefinition> dataDefn = new List <DatasetDefinition> { d1, d2 }; datasetClient .GetDataDefinitions() .Returns(new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK, dataDefn)); // Act IActionResult result = await datasetSchemaPageModel.OnGet(expectedSpecificationId); // Assert result.Should().NotBeNull(); datasetSchemaPageModel.SpecificationDescription.Should().Be(expectedSpecification.Description); datasetSchemaPageModel.SpecificationId.Should().Be(expectedSpecification.Id); datasetSchemaPageModel.SpecificationName.Should().Be(expectedSpecification.Name); datasetSchemaPageModel.FundingPeriodId.Should().Be(expectedSpecification.FundingPeriod.Id); datasetSchemaPageModel.FundingPeriodName.Should().Be(expectedSpecification.FundingPeriod.Name); datasetSchemaPageModel.IsAuthorizedToEdit.Should().BeTrue(); List <SelectListItem> datasetDefinition = new List <SelectListItem>(datasetSchemaPageModel.Datasets); datasetDefinition[0].Value.Should().Be(d1.Id); datasetDefinition[0].Text.Should().Be(d1.Name); datasetDefinition[1].Value.Should().Be(d2.Id); datasetDefinition[1].Text.Should().Be(d2.Name); }