public void Should_AssignDatasetSchema_NoPermissions_Failure() { AssignDatasetSchemaUpdateViewModel data = Builder <AssignDatasetSchemaUpdateViewModel> .CreateNew().Build(); _mockDatasetApiClient.Setup(x => x.CreateRelationship(It.IsAny <CreateDefinitionSpecificationRelationshipModel>())) .ReturnsAsync(() => new ApiResponse <DefinitionSpecificationRelationship>(HttpStatusCode.OK, Builder <DefinitionSpecificationRelationship> .CreateNew().Build())); _mockDatasetApiClient.Setup(x => x.GetRelationshipBySpecificationIdAndName(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(() => new ApiResponse <DefinitionSpecificationRelationship>(HttpStatusCode.OK, Builder <DefinitionSpecificationRelationship> .CreateNew().Build()) ); _mockDatasetApiClient.Setup(x => x.GetDatasetDefinitions()).ReturnsAsync(() => new ApiResponse <IEnumerable <DatasetDefinition> >(HttpStatusCode.OK, Builder <DatasetDefinition> .CreateListOfSize(10).Build().AsEnumerable()) ); _mockSpecificationApiClient.Setup(x => x.GetSpecificationSummaryById(It.IsAny <string>())) .ReturnsAsync(() => new ApiResponse <SpecificationSummary>(HttpStatusCode.OK, Builder <SpecificationSummary> .CreateNew().Build()) ); _mockAuthorisationHelper.Setup(x => x.DoesUserHavePermission(It.IsAny <ClaimsPrincipal>(), It.IsAny <string>(), It.IsAny <SpecificationActionTypes>())).ReturnsAsync(false); ; _sut = new DatasetController(_mockDatasetApiClient.Object, _mockLogger.Object, _mockMapper.Object, _mockSpecificationApiClient.Object, _mockAuthorisationHelper.Object); _mockMapper.Setup(x => x.Map <CreateDefinitionSpecificationRelationshipModel>(data)) .Returns(Builder <CreateDefinitionSpecificationRelationshipModel> .CreateNew().Build()); var actual = _sut.AssignDatasetSchema(data, "XZY098"); actual.Should().NotBeNull(); actual.Result.Should().BeOfType <ForbidResult>(); }
public async Task <IActionResult> AssignDatasetSchema([FromBody] AssignDatasetSchemaUpdateViewModel viewModel, [FromRoute] string specificationId) { Guard.ArgumentNotNull(viewModel.Name, nameof(viewModel.Name)); Guard.ArgumentNotNull(viewModel.DatasetDefinitionId, nameof(viewModel.DatasetDefinitionId)); Guard.ArgumentNotNull(viewModel.Description, nameof(viewModel.Description)); ApiResponse <SpecificationSummary> specificationResponse = await _specificationsApiClient.GetSpecificationSummaryById(specificationId); if (specificationResponse == null || specificationResponse.StatusCode == HttpStatusCode.NotFound) { return(new NotFoundObjectResult( $"Unable to get specification response. Specification Id value = {specificationId}")); } if (specificationResponse.StatusCode == HttpStatusCode.OK && specificationResponse.Content == null) { throw new InvalidOperationException( $"Unable to retrieve specification model from the response. Specification Id value = {specificationId}"); } bool isAuthorizedToEdit = await _authorizationHelper.DoesUserHavePermission(User, specificationResponse.Content.GetSpecificationId(), SpecificationActionTypes.CanEditSpecification); if (!isAuthorizedToEdit) { return(new ForbidResult()); } if (!string.IsNullOrWhiteSpace(viewModel.Name)) { ApiResponse <DefinitionSpecificationRelationship> existingRelationshipResponse = await _datasetApiClient.GetRelationshipBySpecificationIdAndName(specificationId, viewModel.Name); if (existingRelationshipResponse.StatusCode != HttpStatusCode.NotFound) { this.ModelState.AddModelError( $"{nameof(AssignDatasetSchemaViewModel)}.{nameof(AssignDatasetSchemaViewModel.Name)}", ValidationMessages.RelationshipNameAlreadyExists); } } if (!ModelState.IsValid) { if (specificationResponse.StatusCode == HttpStatusCode.OK) { SpecificationSummary specContent = specificationResponse.Content; ApiResponse <IEnumerable <DatasetDefinition> > datasetResponse = await _datasetApiClient.GetDatasetDefinitions(); if (datasetResponse == null || datasetResponse.StatusCode == HttpStatusCode.NotFound) { return(new NotFoundObjectResult(ErrorMessages.DatasetDefinitionNotFoundInDatasetService)); } if (datasetResponse.StatusCode == HttpStatusCode.OK) { IEnumerable <DatasetDefinition> datasetDefinitionList = datasetResponse.Content; if (datasetDefinitionList == null) { throw new InvalidOperationException( $"Unable to retrieve Dataset definition from the response. Specification Id value = {specificationId}"); } } else { return(new StatusCodeResult(500)); } } } CreateDefinitionSpecificationRelationshipModel datasetSchema = new CreateDefinitionSpecificationRelationshipModel { Name = viewModel.Name, SpecificationId = specificationId, DatasetDefinitionId = viewModel.DatasetDefinitionId, Description = viewModel.Description, IsSetAsProviderData = viewModel.IsSetAsProviderData, UsedInDataAggregations = false }; ApiResponse <DefinitionSpecificationRelationship> newAssignDatasetResponse = await _datasetApiClient.CreateRelationship(datasetSchema); if (newAssignDatasetResponse?.StatusCode == HttpStatusCode.OK) { return(new OkObjectResult(true)); } return(new StatusCodeResult(500)); }