Esempio n. 1
0
        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>();
        }
Esempio n. 2
0
        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));
        }