Delegate Requirement model attributes to associated issue
What does this MR do and why?
Related to #323781 (closed)
In preparation to stop using the model RequirementsManagement::Requirement
, and now that every requirement
has a requirement_issue
, we can delegate attributes to the associated Issue
.
Because we still need to use the model as a thin proxy, all attributes except iid
and project
will be delegated.
The presence validation for :title
and :author
is removed to be able to create the record, but because we create the associated issue every time we create a requirement, the validation is still performed at the issue level.
I thoroughly tested that the synching functionality still works after delegating, and because the record will still track becoming dirty and preserve the attribute values, we will be able to compare changes and update accordingly.
Example:
[5] pry(main)> requirement.title
=> "test req issue"
[6] pry(main)> requirement.requirement_issue.title
=> "test req issue"
[7] pry(main)> requirement.changed?
=> false
[8] pry(main)> requirement.title = 'new title'
=> "new title"
[9] pry(main)> requirement.changed?
=> true
[10] pry(main)> requirement.title
=> "test req issue"
[13] pry(main)> requirement.requirement_issue.title
=> "test req issue"
[14] pry(main)> requirement.changed
=> ["title"]
[15] pry(main)> changed_attrs = requirement.changed.map(&:to_sym)
=> [:title]
[16] pry(main)> requirement.attributes.with_indifferent_access.slice(*changed_attrs)
=> {"title"=>"new title"}
Screenshots or screen recordings
These are strongly recommended to assist reviewers and reduce the time to merge your change.
How to set up and validate locally
Numbered steps to set up and validate the change are strongly suggested.
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.