예제 #1
0
        public async Task GetDatasetSchemaSasUrl_GivenNullOrEmptyDefinitionName_ReturnsBadRequest()
        {
            //Arrange
            DatasetSchemaSasUrlRequestModel model = new DatasetSchemaSasUrlRequestModel();
            string json = JsonConvert.SerializeObject(model);

            byte[]       byteArray = Encoding.UTF8.GetBytes(json);
            MemoryStream stream    = new MemoryStream(byteArray);

            HttpRequest request = Substitute.For <HttpRequest>();

            request
            .Body
            .Returns(stream);

            ILogger logger = CreateLogger();

            DefinitionsService definitionsService = CreateDefinitionsService(logger);

            //Act
            IActionResult result = await definitionsService.GetDatasetSchemaSasUrl(request);

            //Assert
            result
            .Should()
            .BeOfType <BadRequestObjectResult>()
            .Which
            .Value
            .Should()
            .Be("No dataset schema name was provided");

            logger
            .Received(1)
            .Warning(Arg.Is("No dataset schema name was provided"));
        }
예제 #2
0
        public async Task <IActionResult> GetDatasetSchemaSasUrl(HttpRequest request)
        {
            string json = await request.GetRawBodyStringAsync();

            DatasetSchemaSasUrlRequestModel requestModel = JsonConvert.DeserializeObject <DatasetSchemaSasUrlRequestModel>(json);

            if (requestModel == null)
            {
                _logger.Warning("No dataset schema request model was provided");
                return(new BadRequestObjectResult("No dataset schema request model was provided"));
            }

            if (requestModel.DatasetDefinitionId.IsNullOrEmpty())
            {
                _logger.Warning("No dataset schema name was provided");
                return(new BadRequestObjectResult("No dataset schema name was provided"));
            }

            DatasetDefinition datasetDefinition = await _datasetsRepositoryPolicy.ExecuteAsync(() => _datasetsRepository.GetDatasetDefinition(requestModel.DatasetDefinitionId));

            if (datasetDefinition == null)
            {
                return(new NotFoundObjectResult("Data schema definiton not found"));
            }

            string definitionName = datasetDefinition.Name.Replace("/", "_").Replace("\\", "_");

            string fileName = $"schemas/{definitionName}.xlsx";

            string blobUrl = _blobClient.GetBlobSasUrl(fileName, DateTimeOffset.UtcNow.AddDays(1), SharedAccessBlobPermissions.Read);

            return(new OkObjectResult(new DatasetSchemaSasUrlResponseModel {
                SchemaUrl = blobUrl
            }));
        }
예제 #3
0
        public async Task GetDatasetSchemaSasUrl_GivenModelAndDatasetNameContainsSlashes_ReplacesSlashesWithUnderscoreAndReturnsUrl()
        {
            // Arrange
            DatasetSchemaSasUrlRequestModel model = new DatasetSchemaSasUrlRequestModel
            {
                DatasetDefinitionId = "12345"
            };

            string json = JsonConvert.SerializeObject(model);

            byte[]       byteArray = Encoding.UTF8.GetBytes(json);
            MemoryStream stream    = new MemoryStream(byteArray);

            HttpRequest request = Substitute.For <HttpRequest>();

            request
            .Body
            .Returns(stream);

            IBlobClient blobClient = CreateBlobClient();

            DatasetDefinition datasetDefinition = new DatasetDefinition()
            {
                Id   = "12345",
                Name = "TEST/SLASH Definition",
            };

            IDatasetRepository datasetRepository = CreateDataSetsRepository();

            datasetRepository
            .GetDatasetDefinition(Arg.Is(model.DatasetDefinitionId))
            .Returns(datasetDefinition);

            DefinitionsService definitionsService = CreateDefinitionsService(
                datasetsRepository: datasetRepository,
                blobClient: blobClient);

            // Act
            IActionResult result = await definitionsService.GetDatasetSchemaSasUrl(request);

            // Assert
            result
            .Should()
            .BeOfType <OkObjectResult>();

            blobClient
            .Received(1)
            .GetBlobSasUrl(Arg.Is("schemas/TEST_SLASH Definition.xlsx"), Arg.Any <DateTimeOffset>(), Arg.Any <SharedAccessBlobPermissions>());
        }
예제 #4
0
        public async Task <IActionResult> Download([FromRoute] string schemaId)
        {
            Guard.IsNullOrWhiteSpace(schemaId, nameof(schemaId));

            DatasetSchemaSasUrlRequestModel downloadDatasetSchemaRequest = new DatasetSchemaSasUrlRequestModel
            {
                DatasetDefinitionId = schemaId
            };

            ApiResponse <DatasetSchemaSasUrlResponseModel> apiResponse = await _datasetApiClient.GetDatasetSchemaSasUrl(downloadDatasetSchemaRequest);

            if (apiResponse.StatusCode == HttpStatusCode.OK && !string.IsNullOrWhiteSpace(apiResponse.Content?.SchemaUrl))
            {
                return(Redirect(apiResponse.Content.SchemaUrl));
            }

            return(new NotFoundResult());
        }
        public async Task <ApiResponse <DatasetSchemaSasUrlResponseModel> > GetDatasetSchemaSasUrl(DatasetSchemaSasUrlRequestModel datasetSchemaSasUrlRequestModel)
        {
            Guard.ArgumentNotNull(datasetSchemaSasUrlRequestModel, nameof(datasetSchemaSasUrlRequestModel));

            return(await PostAsync <DatasetSchemaSasUrlResponseModel, DatasetSchemaSasUrlRequestModel>(
                       DataSetsUriFor("get-schema-download-url"), datasetSchemaSasUrlRequestModel));
        }
예제 #6
0
        public async Task GetDatasetSchemaSasUrl_GivenModelAndDatasetNameDoesNotContainSlashes_GetSasUrl()
        {
            //Arrange
            const string sasUrl = "https://wherever.naf?jhjhjhjhjhhjhjhjhjjhj";

            DatasetSchemaSasUrlRequestModel model = new DatasetSchemaSasUrlRequestModel
            {
                DatasetDefinitionId = "12345"
            };

            string json = JsonConvert.SerializeObject(model);

            byte[]       byteArray = Encoding.UTF8.GetBytes(json);
            MemoryStream stream    = new MemoryStream(byteArray);

            HttpRequest request = Substitute.For <HttpRequest>();

            request
            .Body
            .Returns(stream);

            IBlobClient blobClient = CreateBlobClient();

            blobClient
            .GetBlobSasUrl(Arg.Any <string>(), Arg.Any <DateTimeOffset>(), Arg.Any <SharedAccessBlobPermissions>())
            .Returns(sasUrl);

            DatasetDefinition datasetDefinition = new DatasetDefinition()
            {
                Id   = "12345",
                Name = "14 15",
            };

            IDatasetRepository datasetRepository = CreateDataSetsRepository();

            datasetRepository
            .GetDatasetDefinition(Arg.Is(model.DatasetDefinitionId))
            .Returns(datasetDefinition);

            DefinitionsService definitionsService = CreateDefinitionsService(
                datasetsRepository: datasetRepository,
                blobClient: blobClient);

            //Act
            IActionResult result = await definitionsService.GetDatasetSchemaSasUrl(request);

            //Assert
            result
            .Should()
            .BeOfType <OkObjectResult>();

            OkObjectResult okObjectResult = result as OkObjectResult;

            DatasetSchemaSasUrlResponseModel responseModel = okObjectResult.Value as DatasetSchemaSasUrlResponseModel;

            responseModel
            .SchemaUrl
            .Should()
            .Be(sasUrl);

            blobClient
            .Received(1)
            .GetBlobSasUrl(Arg.Is("schemas/14 15.xlsx"), Arg.Any <DateTimeOffset>(), Arg.Any <SharedAccessBlobPermissions>());
        }
 public Task <IActionResult> GetDatasetSchemaSasUrl([FromBody] DatasetSchemaSasUrlRequestModel datasetSchemaSasUrlRequestModel)
 {
     return(_definitionService.GetDatasetSchemaSasUrl(datasetSchemaSasUrlRequestModel));
 }