NoMethodError: undefined method `approved_approvers' for ApprovalProjectRule
Cause
There are two type of rules: project rule and MR rule.
Only MR rules have an association called approved_approvers
, which for record keeping purposes records approvers in the database.
For MRs with only project rules, it was designed to create copies of project rule as MR rule when merged. This is so we can persist approved_approvers
. However in some scenarios this would not be the case. For example, a MR without any approver got merged. Then later on project approver is added. The current logic would try to call approved_approvers
on this new project rule, and results in error.
Possible fixes
A robust check will be added so it would not call approved_approvers
on project rule.
On UI side, I suggest we display only approvers not individual rule details, when no MR-level rule exists.
Sentry report
https://sentry.gitlab.net/gitlab/gitlabcom/issues/659268/
NoMethodError: undefined method `approved_approvers' for #<ApprovalProjectRule:0x00007f864f1090f0>
Did you mean? approvals_required_was
active_model/attribute_methods.rb:433:in `method_missing'
match ? attribute_missing(match, *args, &block) : super
approval_wrapped_rule.rb:39:in `approved_approvers'
return approval_rule.approved_approvers
approval_wrapped_rule.rb:66:in `block in approvals_left'
approvals_left_count = approvals_required - approved_approvers.size
gitlab/utils/strong_memoize.rb:30:in `strong_memoize'
instance_variable_set(ivar(name), yield)
approval_wrapped_rule.rb:65:in `approvals_left'
strong_memoize(:approvals_left) do
...
(178 additional frame(s) were not displayed)
NoMethodError: undefined method `approved_approvers' for #<ApprovalProjectRule:0x00007f864f1090f0>
Did you mean? approvals_required_was