public async Task ImportGraph_Success() { // Arrange const string s3Key = "s3://some.fancy.kid.said/i.like.turtles"; var loadId = Guid.NewGuid().ToString(); var formFile = GenerateTtlFormFile(); var graphName = new Uri("https://www.speedofart.com/glorious/painting/1.0"); var expectedResponse = new NeptuneLoaderResponse { status = "200 OK", payload = new Dictionary <string, string> { { "loadId", loadId }, { "namedGraphName", graphName.AbsoluteUri } } }; _mockAwsS3Service.Setup(x => x.UploadFile(It.IsAny <IFormFile>())).ReturnsAsync(s3Key); _mockGraphRepository.Setup(x => x.CheckIfNamedGraphExists(It.IsAny <Uri>())).Returns(false); _mockNeptuneLoaderConnector.Setup(x => x.LoadGraph(s3Key, graphName)).ReturnsAsync(expectedResponse); // Act var result = await _service.ImportGraph(formFile, graphName, false); // Assert Assert.NotNull(result); Assert.Equal(expectedResponse.status, result.status); Assert.True(result.payload.TryGetValue("loadId", out var resultLoadIdValue)); Assert.Equal(loadId, resultLoadIdValue); Assert.True(result.payload.TryGetValue("namedGraphName", out var resultGraphName)); Assert.Equal(graphName.AbsoluteUri, resultGraphName); }
/// <summary> /// Import a graph with the given name into AWS Neptune. The ttl file has to get uploaded to S3 first in order /// to import it. /// </summary> /// <param name="s3Key">Path to ttl file in s3</param> /// <param name="graphName">the graph name to store as an Uri</param> /// <exception cref="NeptuneLoaderException">In case of errors</exception> public async Task <NeptuneLoaderResponse> LoadGraph(string s3Key, Uri graphName) { using var client = _clientFactory.CreateClient(); var loaderRequest = new NeptuneLoaderRequest() { Source = s3Key, Format = "turtle", IamRoleArn = _iamRoleArn, Region = _region, FailOnError = "FALSE", Parallelism = "MEDIUM", ParserConfiguration = new Dictionary <string, string> { { "namedGraphUri", graphName.AbsoluteUri } } }; var json = JsonConvert.SerializeObject(loaderRequest, new JsonSerializerSettings { ContractResolver = _contractResolver }); HttpContent content = new StringContent(json, Encoding.UTF8, MediaTypeNames.Application.Json); var response = await client.PostAsync(_loaderUrl, content); var responseContent = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { var neptuneResponse = JsonConvert.DeserializeObject <NeptuneLoaderResponse>(responseContent); var loadId = neptuneResponse.payload["loadId"]; var loaderResponse = new NeptuneLoaderResponse() { status = "200 OK", payload = new Dictionary <string, string> { { "loadId", loadId }, { "namedGraphName", graphName.AbsoluteUri } } }; return(loaderResponse); } var neptuneError = JsonConvert.DeserializeObject <NeptuneLoaderErrorResponse>(responseContent); throw new NeptuneLoaderException(neptuneError); }