Commit 26107e93 authored by Stan Hu's avatar Stan Hu

Properly save suggestions in project exports

Previously imports would fail if a merge request note included a
suggestion with an
`ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection`
exception.

This was happening because suggestions were listed as a descendant of
merge requests, but this doesn't work because suggestions are directly
associated with notes, not merge requests, and that association is lost.
Rails also disallows creating intializing a has_many association through
a different object.

We fix this by making `suggestions` a child of `notes` within a merge
request. This doesn't fix previously broken exported project exports,
but new exports will work.

Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/65880
parent ea671dec
---
title: Properly save suggestions in project exports
merge_request: 31690
author:
type: fixed
......@@ -37,11 +37,11 @@ project_tree:
- :user
- merge_requests:
- :metrics
- :suggestions
- notes:
- :author
- events:
- :push_event_payload
- :suggestions
- merge_request_diff:
- :merge_request_diff_commits
- :merge_request_diff_files
......
......@@ -2450,7 +2450,21 @@
"author": {
"name": "Ottis Schuster II"
},
"events": []
"events": [],
"suggestions": [
{
"id": 1,
"note_id": 674,
"relative_order": 0,
"applied": false,
"commit_id": null,
"from_content": "Original line\n",
"to_content": "New line\n",
"lines_above": 0,
"lines_below": 0,
"outdated": false
}
]
},
{
"id": 675,
......
......@@ -125,6 +125,13 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
expect(MergeRequest.find_by(title: 'MR1').resource_label_events).not_to be_empty
end
it 'restores suggestion' do
note = Note.find_by("note LIKE 'Saepe asperiores exercitationem non dignissimos laborum reiciendis et ipsum%'")
expect(note.suggestions.count).to eq(1)
expect(note.suggestions.first.from_content).to eq("Original line\n")
end
context 'event at forth level of the tree' do
let(:event) { Event.where(action: 6).first }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment