summaryrefslogtreecommitdiff
path: root/qa/qa/resource/approval_configuration.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/resource/approval_configuration.rb')
-rw-r--r--qa/qa/resource/approval_configuration.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/qa/qa/resource/approval_configuration.rb b/qa/qa/resource/approval_configuration.rb
new file mode 100644
index 00000000000..89b8201d7d2
--- /dev/null
+++ b/qa/qa/resource/approval_configuration.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+module QA
+ module Resource
+ # Helper for approval configuration which exists on project and mr level
+ module ApprovalConfiguration
+ include ApiFabricator
+
+ def api_approval_configuration_path
+ "#{api_get_path}/approvals"
+ end
+
+ def api_approval_rules_path
+ "#{api_get_path}/approval_rules"
+ end
+
+ # Approval configuration
+ #
+ # @return [Hash]
+ def approval_configuration
+ parse_body(api_get_from(api_approval_configuration_path))
+ end
+
+ # Update approvals configuration
+ # MR: https://docs.gitlab.com/ee/api/merge_request_approvals.html#change-approval-configuration
+ # Project: https://docs.gitlab.com/ee/api/merge_request_approvals.html#change-configuration
+ #
+ # @param [Hash] configuration
+ # @return [Hash]
+ def update_approval_configuration(configuration)
+ api_post_to(api_approval_configuration_path, configuration)
+ end
+
+ # Approval rules
+ #
+ # @return [Array<Hash>]
+ def fetch_approval_rules
+ parse_body(api_get_from(api_approval_rules_path))
+ end
+
+ # Create approval rules
+ #
+ # @return [Hash]
+ def create_approval_rules
+ raise("Trying to create approval rules but no rules set!") unless approval_rules
+
+ rule = { approvals_required: 1, name: "Approval rule for mr #{title}" }
+ rule[:user_ids] = approval_rules[:users].map(&:id) if approval_rules[:users]
+ rule[:group_ids] = approval_rules[:group].map(&:full_path) if approval_rules[:groups]
+
+ api_post_to(api_approvals_path, rule)
+ end
+ end
+ end
+end