示例#1
0
        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);
        }
示例#2
0
        /// <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")));
            }
        }
示例#3
0
        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
            });
        }
示例#4
0
        public async Task <IActionResult> ImportProject([FromServices] IImportProjectCommand command, [FromBody] ImportProjectRequest request)
        {
            var             userId = getUserId();
            ProjectResponse result = await command.ExecuteAsync(request, userId);

            return(Ok(result));
        }