private string CreateAttachmentProperties(AmazonS3FileUploadInfoDto s3FileInfo, string comment)
        {
            var attachment = new Attachment()
            {
                Id         = this._s3AccessLinkPrefix + s3FileInfo.FileKey,
                Properties = new Dictionary <string, List <dynamic> >
                {
                    { RDF.Type, new List <dynamic> {
                          AttachmentConstants.Type
                      } },
                    { RDFS.Label, new List <dynamic> {
                          s3FileInfo.FileName
                      } },
                    { AttachmentConstants.HasFileSize, new List <dynamic> {
                          s3FileInfo.FileSize
                      } },
                    { AttachmentConstants.HasFileType, new List <dynamic> {
                          s3FileInfo.FileType
                      } },
                    { RDFS.Comment, new List <dynamic> {
                          comment
                      } }
                }
            };

            var metadata = _metadataService.GetMetadataForEntityType(AttachmentConstants.Type);

            _attachmentRepository.CreateEntity(attachment, metadata, GetResourceInstanceGraph());
            _attachmentRepository.CreateEntity(attachment, metadata, GetDraftResourceInstanceGraph());

            return(attachment.Id);
        }
        public async Task ImportGraph_Success()
        {
            // Arrange
            var s3FileInfo = new AmazonS3FileUploadInfoDto {
                FileName = "", FileSize = 0, FileType = "", S3KeyName = "s3://some.fancy.kid.said/i.like.turtles", S3ObjectUrl = ""
            };
            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.UploadFileAsync(It.IsAny <string>(), It.IsAny <IFormFile>())).ReturnsAsync(s3FileInfo);
            _mockGraphRepository.Setup(x => x.CheckIfNamedGraphExists(It.IsAny <Uri>())).Returns(false);
            _mockNeptuneLoaderConnector.Setup(x => x.LoadGraph(s3FileInfo.S3KeyName, 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);
        }
        public async Task ImportGraph_ThrowsException_IfGraphExistsAndOverwriteFalse()
        {
            var s3FileInfo = new AmazonS3FileUploadInfoDto {
                FileName = "", FileSize = 0, FileType = "", S3KeyName = "s3://some.fancy.kid.said/i.like.turtles", S3ObjectUrl = ""
            };
            var formFile  = GenerateTtlFormFile();
            var graphName = new Uri("https://www.speedofart.com/glorious/painting/1.0");

            _mockAwsS3Service.Setup(x => x.UploadFileAsync(It.IsAny <string>(), It.IsAny <IFormFile>())).ReturnsAsync(s3FileInfo);
            _mockGraphRepository.Setup(x => x.CheckIfNamedGraphExists(It.IsAny <Uri>())).Returns(true);

            await Assert.ThrowsAsync <GraphAlreadyExistsException>(() =>
                                                                   _service.ImportGraph(formFile, graphName, false));
        }
        public async Task UploadAttachment_ByFileAndGuid_Should_Return_AttachmentDto()
        {
            // ARRANGE
            var comment      = "no comment";
            var s3ObjectMock = new AmazonS3FileUploadInfoDto
            {
                FileName    = "testfile.jpg",
                FileSize    = 20000,
                FileType    = "image/jpg",
                S3KeyName   = "7FB3719C-EE44-4425-AD6A-BCD800725529/testfile.jpg",
                S3ObjectUrl = "http://s3.aws.com/7FB3719C-EE44-4425-AD6A-BCD800725529/testfile.jpg"
            };

            using var contentStream = new MemoryStream();
            contentStream.Write(new ASCIIEncoding().GetBytes(s3ObjectMock.FileName));
            IFormFile file = new FormFile(contentStream, 0, s3ObjectMock.FileSize, s3ObjectMock.FileName, s3ObjectMock.FileName);

            _mockAwsS3Service.Setup(x => x.UploadFileAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <IFormFile>(), false))
            .ReturnsAsync(s3ObjectMock);

            // Check the attachment object to store the correct values within the graph
            Attachment interceptedAttachment = null;

            _mockAttachmentRepository.Setup(x =>
                                            x.CreateEntity(It.IsAny <Attachment>(), It.IsAny <IList <MetadataProperty> >(), It.IsAny <Uri>()))
            .Callback <Attachment, IList <MetadataProperty>, Uri>((attachment, metadata, graph) => interceptedAttachment = attachment);

            // ACT
            var response = await _service.UploadAttachment(file, "no comment");

            // ASSERT
            Assert.NotNull(response);
            //Assert.Equal(s3ObjectMock.S3ObjectUrl, response.Id);
            Assert.Equal(s3ObjectMock.FileName, response.s3File.FileName);
            Assert.Equal(s3ObjectMock.FileType, response.s3File.FileType);
            Assert.Equal(s3ObjectMock.FileSize, response.s3File.FileSize);
            Assert.Equal(s3ObjectMock.S3KeyName, response.s3File.S3KeyName);
            Assert.Equal(s3ObjectMock.S3ObjectUrl, response.s3File.S3ObjectUrl);

            //Assert.Equal(s3ObjectMock.S3ObjectUrl, interceptedAttachment.Id);
            var props = interceptedAttachment.Properties;

            Assert.True(props.ContainsType(AttachmentConstants.Type));
            Assert.True(props.ContainsRdfsLabel(s3ObjectMock.FileName));
            Assert.True(props.ContainsAttachmentFileSize(s3ObjectMock.FileSize.ToString()));
            Assert.True(props.ContainsAttachmentFileType(s3ObjectMock.FileType));
            Assert.True(props.ContainsRdfsComment(comment));
        }