diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 275474d02f6..db4ea9c7d27 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -329,7 +329,7 @@ class ProjectsController < Projects::ApplicationController :runners_token, :tag_list, :visibility_level, - :template_title, + :template_name, project_feature_attributes: %i[ builds_access_level @@ -352,7 +352,7 @@ class ProjectsController < Projects::ApplicationController end def project_from_template? - project_params[:template_title]&.present? + project_params[:template_name]&.present? end def project_view_files? diff --git a/app/models/project.rb b/app/models/project.rb index e7c404bf817..737ad5c8884 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -71,7 +71,7 @@ class Project < ActiveRecord::Base attr_accessor :new_default_branch attr_accessor :old_path_with_namespace - attr_accessor :template_title + attr_accessor :template_name attr_writer :pipeline_status alias_attribute :title, :name diff --git a/app/services/projects/create_from_template_service.rb b/app/services/projects/create_from_template_service.rb index 3fc5c4ad157..87d9ed7a0e6 100644 --- a/app/services/projects/create_from_template_service.rb +++ b/app/services/projects/create_from_template_service.rb @@ -5,10 +5,11 @@ module Projects end def execute - params[:file] = Gitlab::ProjectTemplate.find(params[:template_title]).file + params[:file] = Gitlab::ProjectTemplate.find(params[:template_name]).file - @params[:from_template] = true - GitlabProjectsImporterService.new(@current_user, @params).execute + GitlabProjectsImportService.new(@current_user, @params).execute + ensure + params[:file]&.close end end end diff --git a/app/services/projects/gitlab_projects_importer_service.rb b/app/services/projects/gitlab_projects_import_service.rb similarity index 96% rename from app/services/projects/gitlab_projects_importer_service.rb rename to app/services/projects/gitlab_projects_import_service.rb index 4cb98c54de5..5ba1b6436f4 100644 --- a/app/services/projects/gitlab_projects_importer_service.rb +++ b/app/services/projects/gitlab_projects_import_service.rb @@ -2,7 +2,7 @@ # creating a project from a template. # The latter will under the hood just import an archive supplied by GitLab. module Projects - class GitlabProjectsImporterService + class GitlabProjectsImportService attr_reader :current_user, :params def initialize(user, params) diff --git a/lib/gitlab/import_export.rb b/lib/gitlab/import_export.rb index 9f23d29218b..30b536383f9 100644 --- a/lib/gitlab/import_export.rb +++ b/lib/gitlab/import_export.rb @@ -17,7 +17,7 @@ module Gitlab def import_upload_path(filename:) milliseconds = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond) - File.join(storage_path, 'uploads', "#{millisecond}-#{filename}") + File.join(storage_path, 'uploads', "#{milliseconds}-#{filename}") end def project_filename diff --git a/lib/gitlab/project_template.rb b/lib/gitlab/project_template.rb index d90ba240fde..cf461adf697 100644 --- a/lib/gitlab/project_template.rb +++ b/lib/gitlab/project_template.rb @@ -24,13 +24,13 @@ module Gitlab name == other.name && title == other.title end - TemplatesTable = [ + TEMPLATES_TABLE = [ ProjectTemplate.new('rails', 'Ruby on Rails') ].freeze class << self def all - TemplatesTable + TEMPLATES_TABLE end def find(name) diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index ab5042490ae..9385778e0cb 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -10,15 +10,15 @@ feature 'Project', feature: true do visit new_project_path end - it "allows creation from the #{template.name} template" do - fill_in("project_template_title", with: template.title) + it "allows creation from templates" do + fill_in("project_template_name", with: template.title) fill_in("project_path", with: template.name) page.within '#content-body' do click_button "Create project" end - expect(page).to have_content 'Import' + expect(page).to have_content 'Import in progress' end end diff --git a/spec/lib/gitlab/project_template_spec.rb b/spec/lib/gitlab/project_template_spec.rb index d95dab748fe..0f68e87a41a 100644 --- a/spec/lib/gitlab/project_template_spec.rb +++ b/spec/lib/gitlab/project_template_spec.rb @@ -35,13 +35,28 @@ describe Gitlab::ProjectTemplate do end describe 'validate all templates' do + set(:admin) { create(:admin) } + described_class.all.each do |template| it "#{template.name} has a valid archive" do archive = template.archive_path - logo = Rails.root.join("app/assets/images/#{template.logo_path}") expect(File.exist?(archive)).to be(true) - expect(File.exist?(logo)).to be(true) + end + + context 'with valid parameters' do + it 'can be imported' do + params = { + template_name: template.name, + namespace_id: admin.namespace.id, + path: template.name + } + + project = Projects::CreateFromTemplateService.new(admin, params).execute + + expect(project).to be_valid + expect(project).to be_persisted + end end end end diff --git a/spec/services/projects/create_from_template_service_spec.rb b/spec/services/projects/create_from_template_service_spec.rb index 81e88c0862d..9125b5bf161 100644 --- a/spec/services/projects/create_from_template_service_spec.rb +++ b/spec/services/projects/create_from_template_service_spec.rb @@ -12,7 +12,7 @@ describe Projects::CreateFromTemplateService do subject { described_class.new(user, project_params) } it 'calls the importer service' do - expect_any_instance_of(Projects::GitlabProjectsImporterService).to receive(:execute) + expect_any_instance_of(Projects::GitlabProjectsImportService).to receive(:execute) subject.execute end