Example #1
0
        public async Task <IActionResult> Create(CreateFileRequestModel dto)
        {
            if (!ModelState.IsValid)
            {
                return(View(dto));
            }

            if (!CheckFileExtension(dto.PrimaryImage?.FileName) || !CheckFileExtension(dto.SecondaryImage?.FileName))
            {
                ViewData["Errors"] = new Error[]
                { new("Расширение файла должно быть .jpg, .jpeg или .png", "400") };
                return(View(dto));
            }

            var created = await _service.Create(User.GetId(), User.GetRole(), new AdvertDto()
            {
                Name               = dto.Name,
                RequestType        = dto.RequestType,
                ImpressingDateFrom = dto.ImpressingDateFrom,
                ImpressingDateTo   = dto.ImpressingDateTo,
                ImpressingTimeFrom = dto.ImpressingTimeFrom,
                ImpressingTimeTo   = dto.ImpressingTimeTo,
                ImpressingAlways   = dto.ImpressingAlways,
                IsVisible          = true
            }, dto.PrimaryImage.ToFile(), dto.SecondaryImage.ToFile());

            if (!created.Ok)
            {
                ViewData["Errors"] = created.Errors;
                return(View(dto));
            }


            return(RedirectToAction("Index"));
        }
Example #2
0
        public void CreateFileTest()
        {
            string projectUid = Guid.NewGuid().ToString();

            var createFileRequestModel = new CreateFileRequestModel
            {
                FileName = "myFirstProject.dc"
            };

            var createFileResponseModel = new CreateFileResponseModel
            {
                FileSpaceId = Guid.NewGuid().ToString(),
                UploadUrl   = $"{createFileRequestModel.FileName} {projectUid}"
            };
            string route       = $"/projects/{TRNHelper.MakeTRN(projectUid)}/file";
            var    expectedUrl = $"{baseUrl}{route}";

            mockServiceResolution.Setup(m => m.ResolveRemoteServiceEndpoint(
                                            It.IsAny <string>(), It.IsAny <ApiType>(), It.IsAny <ApiVersion>(), route, It.IsAny <IList <KeyValuePair <string, string> > >())).Returns(Task.FromResult(expectedUrl));

            MockUtilities.TestRequestSendsCorrectJson("Create a file", mockWebRequest, null, expectedUrl, HttpMethod.Post, createFileResponseModel, async() =>
            {
                var client = ServiceProvider.GetRequiredService <ICwsDesignClient>();
                var result = await client.CreateFile(new Guid(projectUid), createFileRequestModel);

                Assert.NotNull(result);
                Assert.Equal(createFileResponseModel.FileSpaceId, result.FileSpaceId);
                return(true);
            });
        }
Example #3
0
        /// <summary>
        ///   user token
        ///   used by ProjectSvc v6 and v5TBC
        /// </summary>
        public async Task <CreateFileResponseModel> CreateFile(Guid projectUid, CreateFileRequestModel createFileRequest, IHeaderDictionary customHeaders = null)
        {
            log.LogDebug($"{nameof(CreateFile)}: createFileRequest {JsonConvert.SerializeObject(createFileRequest)}");

            var projectTrn         = TRNHelper.MakeTRN(projectUid);
            var createFileResponse = await PostData <CreateFileRequestModel, CreateFileResponseModel>($"/projects/{projectTrn}/file", createFileRequest, null, customHeaders);

            log.LogDebug($"{nameof(CreateFile)}: createFileResponse {JsonConvert.SerializeObject(createFileResponse)}");
            return(createFileResponse);
        }
Example #4
0
        public CreateFileResponseModel CreateFile(string projectTrn, [Mvc.FromBody] CreateFileRequestModel createFileRequest)
        {
            var createFileResponse = new CreateFileResponseModel
            {
                FileSpaceId = Guid.NewGuid().ToString(),
                UploadUrl   = $"{_baseUrl}/another_fake_upload_signed_url"
            };

            Logger.LogInformation($"{nameof(CreateFile)}: projectTrn {projectTrn} createFileRequest {JsonConvert.SerializeObject(createFileRequest)} createFileResponse {JsonConvert.SerializeObject(createFileResponse)}");
            _fileSpaceIdNameMap.Add(createFileResponse.FileSpaceId, $"{projectTrn}||{DateTime.UtcNow}||{createFileRequest.FileName}");
            return(createFileResponse);
        }
Example #5
0
        public Task <CreateFileResponseModel> CreateAndUploadFile(Guid projectUid, CreateFileRequestModel createFileRequest, Stream fileContents, IHeaderDictionary customHeaders = null)
        {
            log.LogDebug($"{nameof(CreateAndUploadFile)} Mock: createFileRequest {JsonConvert.SerializeObject(createFileRequest)}");

            var createFileResponse = new CreateFileResponseModel
            {
                FileSpaceId = Guid.NewGuid().ToString(),
                UploadUrl   = "uploadurl: FileSpaceId"
            };

            log.LogDebug($"{nameof(CreateAndUploadFile)} Mock: createFileResponse {JsonConvert.SerializeObject(createFileResponse)}");
            return(Task.FromResult(createFileResponse));
        }
Example #6
0
        public async Task CreateFileTest()
        {
            // test requires a user token.
            var projectUid             = new Guid(myStagingProject);
            var createFileRequestModel = new CreateFileRequestModel
            {
                FileName = "myFirstProject.dc"
            };
            var client = ServiceProvider.GetRequiredService <ICwsDesignClient>();

            try
            {
                var result = await client.CreateFile(projectUid, createFileRequestModel, CustomHeaders());
            }
            catch (Exception e)
            {
                Assert.Contains(HttpStatusCode.BadRequest.ToString(), e.Message);
                Assert.Contains(":9056,", e.Message);

                /*
                 * This call returns: (possibly because this is application context?)
                 * BadRequest {"status":400,"code":9056,"message":"Bad request","moreInfo":"Please provide this id to support, while contacting, TraceId 5e9a82a7ad9caf287518ec873da80845","timestamp":1587184295988}
                 *
                 * Postman returns:
                 * {
                 *  "status": 400,
                 *  "code": 9006,
                 *  "message": "Account not found or not active",
                 *  "moreInfo": "Please provide this id to support, while contacting, TraceId 5e9a80357074c0914b66ae9cdcf6dfa7",
                 *  "timestamp": 1587183669699,
                 *  "fieldErrors": [
                 *      {
                 *          "field": "accountId",
                 *          "attemptedValue": "trn::profilex:us-west-2:account:158ef953-4967-4af7-81cc-952d47cb6c6"
                 *      }
                 *  ]
                 * }
                 */
            }

            //Assert.NotNull(result);
            //Assert.NotNull(result.Id);
        }
Example #7
0
        public void CreateAndUploadFileTest()
        {
            string projectUid = Guid.NewGuid().ToString();

            var createFileRequestModel = new CreateFileRequestModel
            {
                FileName = "myFirstProject.dc"
            };
            var uploadUrl = $"{createFileRequestModel.FileName} {projectUid}";
            var createFileResponseModel = new CreateFileResponseModel
            {
                FileSpaceId = Guid.NewGuid().ToString(),
                UploadUrl   = uploadUrl
            };
            var fileContents = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };

            string route       = $"/projects/{TRNHelper.MakeTRN(projectUid)}/file";
            var    expectedUrl = $"{baseUrl}{route}";

            mockServiceResolution.Setup(m => m.ResolveRemoteServiceEndpoint(
                                            It.IsAny <string>(), It.IsAny <ApiType>(), It.IsAny <ApiVersion>(), route, It.IsAny <IList <KeyValuePair <string, string> > >())).Returns(Task.FromResult(expectedUrl));
            var expectedContent = new StringContent("Dummy");

            mockWebRequest.Setup(s => s.ExecuteRequestAsStreamContent(uploadUrl, HttpMethod.Put, It.IsAny <IHeaderDictionary>(), It.IsAny <Stream>(), null, 3, false))
            .Returns(Task.FromResult(expectedContent as HttpContent));

            MockUtilities.TestRequestSendsCorrectJson("Create and upload a file", mockWebRequest, null, expectedUrl, HttpMethod.Post, createFileResponseModel, async() =>
            {
                var client = ServiceProvider.GetRequiredService <ICwsDesignClient>();
                using (var ms = new MemoryStream(fileContents))
                {
                    var result = await client.CreateAndUploadFile(new Guid(projectUid), createFileRequestModel, ms);
                    Assert.NotNull(result);
                    Assert.Equal(createFileResponseModel.FileSpaceId, result.FileSpaceId);
                }
                return(true);
            });
        }
Example #8
0
        /// <summary>
        /// Creates file metadata in Data Ocean through CWS then uploads file contents.
        /// </summary>
        public async Task <CreateFileResponseModel> CreateAndUploadFile(Guid projectUid, CreateFileRequestModel createFileRequest, Stream fileContents, IHeaderDictionary customHeaders = null)
        {
            log.LogDebug($"{nameof(CreateAndUploadFile)}: createFileRequest {JsonConvert.SerializeObject(createFileRequest)}");

            var projectTrn         = TRNHelper.MakeTRN(projectUid);
            var createFileResponse = await PostData <CreateFileRequestModel, CreateFileResponseModel>($"/projects/{projectTrn}/file", createFileRequest, null, customHeaders);

            //We won't monitor status of upload as calibration/config files are small so should be quick.
            //And this will be called as part of project creation.

            //TODO: revisit when other project files are uploaded. See Data Ocean client - 3 steps: create file, call upload, monitor upload status.
            await UploadData(createFileResponse.UploadUrl, fileContents, customHeaders);

            log.LogDebug($"{nameof(CreateAndUploadFile)}: createFileResponse {JsonConvert.SerializeObject(createFileResponse)}");
            return(createFileResponse);
        }