public async Task ExportImportProject() { var status = await _sut.GetExportStatusAsync(GitLabApiHelper.TestProjectId); status.Status.Should().Be(ExportStatusEnum.None); await _sut.ExportAsync(GitLabApiHelper.TestProjectId); var stopwatch = new Stopwatch(); stopwatch.Start(); while (status.Status == ExportStatusEnum.None) { stopwatch.Elapsed.TotalMilliseconds.Should().BeLessThan(new TimeSpan(0, 1, 0).TotalMilliseconds); await Task.Delay(5000); status = await _sut.GetExportStatusAsync(GitLabApiHelper.TestProjectId); } while (status.Status != ExportStatusEnum.None && status.Status != ExportStatusEnum.Finished) { await Task.Delay(5000); status = await _sut.GetExportStatusAsync(GitLabApiHelper.TestProjectId); } status.Status.Should().Be(ExportStatusEnum.Finished); var path = System.IO.Path.GetTempFileName(); await _sut.ExportDownloadAsync(GitLabApiHelper.TestProjectId, path); System.IO.File.Exists(path).Should().BeTrue(); var projectFileInfo = new System.IO.FileInfo(path); projectFileInfo.Length.Should().BeGreaterThan(0); var req = ImportProjectRequest.FromFile("project_import_test", path); var importProject = await _sut.ImportAsync(req); importProject.Path.Should().Be("project_import_test"); var importStatus = await _sut.GetImportStatusAsync(importProject.Id); importStatus.Status.Should().NotBe(ImportStatusEnum.None); System.IO.File.Delete(path); }
/// <summary> /// Request the import of a project. /// </summary> /// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param> /// <returns>Status of the import (including the id of the new project)</returns> public async Task <ImportStatus> ImportAsync(ImportProjectRequest request) { Guard.NotNull(request, nameof(request)); var parameters = new Dictionary <string, string>(); foreach (var prop in request.GetType().GetProperties()) { if (prop.GetValue(request) != null && prop.Name != nameof(ImportProjectRequest.File)) { parameters.Add((prop.GetCustomAttributes(typeof(Newtonsoft.Json.JsonPropertyAttribute), false)[0] as Newtonsoft.Json.JsonPropertyAttribute).PropertyName, prop.GetValue(request).ToString()); } } using (var stream = System.IO.File.OpenRead(request.File)) { return(await _httpFacade.PostFile <ImportStatus>($"projects/import", parameters, new CreateUploadRequest(stream, request.Path + ".tar.gz"))); } }
public async Task <ProjectResponse> ExecuteAsync(ImportProjectRequest request, string owner) { var project = new Project { OwnerId = Guid.Parse(owner), Title = request.Title, Tasks = new List <ProjectTask>(), Description = request.Description }; foreach (var t in request.Items) { project.Tasks.Add(buildTree(t, project)); } await _context.Projects.AddAsync(project); await _context.SaveChangesAsync(); return(new ProjectResponse { Title = project.Title, Description = project.Description }); }
public async Task <IActionResult> ImportProject([FromServices] IImportProjectCommand command, [FromBody] ImportProjectRequest request) { var userId = getUserId(); ProjectResponse result = await command.ExecuteAsync(request, userId); return(Ok(result)); }