diff options
Diffstat (limited to 'qa/qa/resource/fork.rb')
-rw-r--r-- | qa/qa/resource/fork.rb | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/qa/qa/resource/fork.rb b/qa/qa/resource/fork.rb index 73f1b0b9695..854dd92e89c 100644 --- a/qa/qa/resource/fork.rb +++ b/qa/qa/resource/fork.rb @@ -3,19 +3,24 @@ module QA module Resource class Fork < Base + attribute :name do + upstream.name + end + attribute :project do - Resource::Project.fabricate! do |resource| - resource.name = upstream.project.name - resource.path_with_namespace = "#{user.name}/#{upstream.project.name}" + Resource::Project.fabricate_via_api! do |resource| + resource.add_name_uuid = false + resource.name = name + resource.path_with_namespace = "#{user.username}/#{name}" end end attribute :upstream do - Repository::ProjectPush.fabricate! + Repository::ProjectPush.fabricate!.project end attribute :user do - User.fabricate! do |resource| + User.fabricate_via_api! do |resource| if Runtime::Env.forker? resource.username = Runtime::Env.forker_username resource.password = Runtime::Env.forker_password @@ -33,7 +38,7 @@ module QA login.sign_in_using_credentials(user: user) end - upstream.project.visit! + upstream.visit! Page::Project::Show.perform(&:fork_project) @@ -47,6 +52,41 @@ module QA populate(:project) end + + def fabricate_via_api! + populate(:upstream, :user) + + Runtime::Logger.debug("Forking project #{upstream.name} to namespace #{user.username}...") + super + wait_until_forked + + populate(:project) + end + + def api_get_path + "/projects/#{CGI.escape(path_with_namespace)}" + end + + def api_post_path + "/projects/#{upstream.id}/fork" + end + + def api_post_body + { + namespace: user.username, + name: name, + path: name + } + end + + def wait_until_forked + Runtime::Logger.debug("Waiting for the fork process to complete...") + forked = wait_until do + project.import_status == "finished" + end + + raise "Timed out while waiting for the fork process to complete." unless forked + end end end end |