public async Task OnGetAsync_GivenRelationshipIdButGettingSourceModelReturnedInternalServerError_Returns404() { // Arrange SelectDataSourceModel model = new SelectDataSourceModel { SpecificationId = "abc123" }; ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.InternalServerError, model); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); ILogger logger = CreateLogger(); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger); // Act IActionResult result = await pageModel.OnGetAsync(relationshipId); //Assert result .Should() .BeOfType <NotFoundResult>(); logger .Received(1) .Error(Arg.Is($"Failed to fetch data sources with status code InternalServerError")); }
public async Task OnGetAsync_GivenRelationshipIdAndGettingSourceModelReturnsOkButNullContent_Returns404() { // Arrange ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.OK); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); ILogger logger = CreateLogger(); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger); // Act IActionResult result = await pageModel.OnGetAsync(relationshipId); //Assert result .Should() .BeOfType <NotFoundResult>(); logger .Received(1) .Error(Arg.Is($"Failed to fetch data sources with status code OK")); }
public async Task OnPostAsync_GivenUserDoesNotHaveMapDatasetsPermission_Returns403() { // Arrange SelectDataSourceModel sourceModel = new SelectDataSourceModel(); ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.OK, sourceModel); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); ILogger logger = CreateLogger(); IAuthorizationHelper authorizationHelper = Substitute.For <IAuthorizationHelper>(); authorizationHelper .DoesUserHavePermission(Arg.Any <ClaimsPrincipal>(), Arg.Any <ISpecificationAuthorizationEntity>(), Arg.Is(SpecificationActionTypes.CanMapDatasets)) .Returns(false); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger, authorizationHelper); // Act IActionResult result = await pageModel.OnPostAsync(relationshipId, specificationId); //Assert result .Should() .BeOfType <ForbidResult>(); pageModel .IsAuthorizedToMap .Should().BeFalse(); }
public async Task OnPostAsync_GivenDataetVersionIUsNullAndRelationshipIdAndGetsModelWithoutDatasets_Returns200() { // Arrange SelectDataSourceModel sourceModel = new SelectDataSourceModel(); ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.OK, sourceModel); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); ILogger logger = CreateLogger(); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger); // Act IActionResult result = await pageModel.OnPostAsync(relationshipId, specificationId, null); //Assert result .Should() .BeOfType <PageResult>(); pageModel .IsAuthorizedToMap .Should().BeTrue(); }
private static SelectSourceDatasetPageModel CreatePageModel(IDatasetsApiClient datasetClient = null, ILogger logger = null, IAuthorizationHelper authorizationHelper = null) { SelectSourceDatasetPageModel pageModel = new SelectSourceDatasetPageModel(datasetClient ?? CreateDatasetsApiClient(), logger ?? CreateLogger(), authorizationHelper ?? TestAuthHelper.CreateAuthorizationHelperSubstitute(SpecificationActionTypes.CanMapDatasets)); pageModel.PageContext = TestAuthHelper.CreatePageContext(); return(pageModel); }
public void OnGetAsync_GivenNullOrEmptyRelationshipId_ThrowsArgumentNullException() { // Arrange SelectSourceDatasetPageModel pageModel = CreatePageModel(); // Act Func <Task> test = async() => await pageModel.OnGetAsync(null); // Assert test .Should() .ThrowExactly <ArgumentNullException>(); }
public async Task OnGetAsync_GivenRelationshipIdAndGetsModelWithDatasets_Returns200() { // Arrange SelectDataSourceModel sourceModel = new SelectDataSourceModel(); sourceModel.Datasets = new[] { new DatasetVersionsModel { Id = "ds-id", Name = "ds name", Versions = new[] { 1 } } }; ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.OK, sourceModel); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); ILogger logger = CreateLogger(); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger); // Act IActionResult result = await pageModel.OnGetAsync(relationshipId); //Assert result .Should() .BeOfType <PageResult>(); pageModel .ViewModel .Datasets .Count() .Should() .Be(1); pageModel .IsAuthorizedToMap .Should().BeTrue(); }
public async Task OnPostAsync_GivenValidDatsetVersionButSavingIsUnsuccessful_Returns500() { // Arrange SelectDataSourceModel model = new SelectDataSourceModel { SpecificationId = "abc123" }; ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.OK, model); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); datasetsApiClient .AssignDataSourceVersionToRelationship(Arg.Any <AssignDatasetVersion>()) .Returns(HttpStatusCode.InternalServerError); ILogger logger = CreateLogger(); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger); // Act IActionResult result = await pageModel.OnPostAsync(relationshipId, specificationId, $"{datasetId}_2"); //Assert result .Should() .BeOfType <StatusCodeResult>(); StatusCodeResult statusCodeResult = result as StatusCodeResult; statusCodeResult .StatusCode .Should() .Be(500); pageModel .IsAuthorizedToMap .Should().BeTrue(); logger .Received(1) .Error(Arg.Is($"Failed to assign dataset version with status code: InternalServerError")); }
public async Task OnPostAsync_GivenValidDatsetVersionAndSavingIsUnsuccessful_ReturnsRedirect() { // Arrange SelectDataSourceModel model = new SelectDataSourceModel { SpecificationId = "abc123" }; ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.OK, model); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); datasetsApiClient .AssignDataSourceVersionToRelationship(Arg.Any <AssignDatasetVersion>()) .Returns(HttpStatusCode.NoContent); ILogger logger = CreateLogger(); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger); // Act IActionResult result = await pageModel.OnPostAsync(relationshipId, specificationId, $"{datasetId}_2"); //Assert result .Should() .BeOfType <RedirectResult>(); RedirectResult redirectResult = result as RedirectResult; redirectResult .Url .Should() .Be($"/datasets/specificationrelationships?specificationId={specificationId}&wasSuccess=true"); pageModel .IsAuthorizedToMap .Should().BeTrue(); }
public async Task OnPostAsync_GivenDatasetVersionIsInvalid_Returns500() { // Arrange SelectDataSourceModel model = new SelectDataSourceModel { SpecificationId = "abc123" }; ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.OK, model); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); ILogger logger = CreateLogger(); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger); // Act IActionResult result = await pageModel.OnPostAsync(relationshipId, specificationId, datasetId); //Assert result .Should() .BeOfType <StatusCodeResult>(); StatusCodeResult statusCodeResult = result as StatusCodeResult; statusCodeResult .StatusCode .Should() .Be(500); pageModel .IsAuthorizedToMap .Should().BeTrue(); logger .Received(1) .Error(Arg.Is($"Dataset version: {datasetId} is invalid")); }
public async Task OnGetAsync_GivenUserDoesNotHaveMapDatasetsPermission_ThenReturnPageResultWithAuthorizedToEditFlagSetToFalse() { // Arrange SelectDataSourceModel sourceModel = new SelectDataSourceModel(); sourceModel.Datasets = new[] { new DatasetVersionsModel { Id = "ds-id", Name = "ds name", Versions = new[] { 1 } } }; ApiResponse <SelectDataSourceModel> sourcesResponse = new ApiResponse <SelectDataSourceModel>(HttpStatusCode.OK, sourceModel); IDatasetsApiClient datasetsApiClient = CreateDatasetsApiClient(); datasetsApiClient .GetDatasourcesByRelationshipId(Arg.Is(relationshipId)) .Returns(sourcesResponse); ILogger logger = CreateLogger(); IAuthorizationHelper mockAuthorizationHelper = TestAuthHelper.CreateAuthorizationHelperSubstitute(SpecificationActionTypes.CanMapDatasets, false); SelectSourceDatasetPageModel pageModel = CreatePageModel(datasetsApiClient, logger, authorizationHelper: mockAuthorizationHelper); // Act IActionResult result = await pageModel.OnGetAsync(relationshipId); //Assert result .Should() .BeOfType <PageResult>(); pageModel .IsAuthorizedToMap .Should().BeFalse(); }