diff options
Diffstat (limited to 'qa/qa/resource/approval_configuration.rb')
-rw-r--r-- | qa/qa/resource/approval_configuration.rb | 55 |
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 |