summaryrefslogtreecommitdiff
path: root/qa/qa/resource/bulk_import_group.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/resource/bulk_import_group.rb')
-rw-r--r--qa/qa/resource/bulk_import_group.rb85
1 files changed, 85 insertions, 0 deletions
diff --git a/qa/qa/resource/bulk_import_group.rb b/qa/qa/resource/bulk_import_group.rb
new file mode 100644
index 00000000000..5380bb16f10
--- /dev/null
+++ b/qa/qa/resource/bulk_import_group.rb
@@ -0,0 +1,85 @@
+# frozen_string_literal: true
+
+module QA
+ module Resource
+ class BulkImportGroup < Group
+ attributes :source_group_path,
+ :import_id
+
+ attribute :destination_group_path do
+ source_group_path
+ end
+
+ attribute :access_token do
+ api_client.personal_access_token
+ end
+
+ alias_method :path, :source_group_path
+
+ delegate :gitlab_address, to: 'QA::Runtime::Scenario'
+
+ def fabricate_via_browser_ui!
+ Page::Main::Menu.perform(&:go_to_create_group)
+
+ Page::Group::New.perform do |group|
+ group.switch_to_import_tab
+ group.connect_gitlab_instance(gitlab_address, api_client.personal_access_token)
+ end
+
+ Page::Group::BulkImport.perform do |import_page|
+ import_page.import_group(path, sandbox.path)
+ end
+
+ reload!
+ visit!
+ end
+
+ def fabricate_via_api!
+ resource_web_url(api_post)
+ end
+
+ def api_post_path
+ '/bulk_imports'
+ end
+
+ def api_post_body
+ {
+ configuration: {
+ url: gitlab_address,
+ access_token: access_token
+ },
+ entities: [
+ {
+ source_type: 'group_entity',
+ source_full_path: source_group_path,
+ destination_name: destination_group_path,
+ destination_namespace: sandbox.path
+ }
+ ]
+ }
+ end
+
+ def import_status
+ response = get(Runtime::API::Request.new(api_client, "/bulk_imports/#{import_id}").url)
+
+ unless response.code == HTTP_STATUS_OK
+ raise ResourceQueryError, "Could not get import status. Request returned (#{response.code}): `#{response}`."
+ end
+
+ parse_body(response)[:status]
+ end
+
+ private
+
+ def transform_api_resource(api_resource)
+ return api_resource if api_resource[:web_url]
+
+ # override transformation only for /bulk_imports endpoint which doesn't have web_url in response and
+ # ignore others so import_id is not overwritten incorrectly
+ api_resource[:web_url] = "#{gitlab_address}/#{full_path}"
+ api_resource[:import_id] = api_resource[:id]
+ api_resource
+ end
+ end
+ end
+end