diff options
author | Rémy Coutable <remy@rymai.me> | 2017-09-19 19:23:15 +0200 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2017-10-09 15:07:10 +0200 |
commit | 075d6516047d899746d22b5323d3b74558e200d0 (patch) | |
tree | f958ce8b1ab36d898e9d8dc894e0ed63fbcf7ebd /spec/models | |
parent | 67d5ca9f9220e5572f3fa6d0d8290cd7b802f02f (diff) | |
download | gitlab-ce-075d6516047d899746d22b5323d3b74558e200d0.tar.gz |
Start adding Gitlab::HookData::IssuableBuilder
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'spec/models')
-rw-r--r-- | spec/models/concerns/issuable_spec.rb | 52 | ||||
-rw-r--r-- | spec/models/issue_spec.rb | 36 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 43 |
3 files changed, 101 insertions, 30 deletions
diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb index 5763e1ba6d4..1f8541a3262 100644 --- a/spec/models/concerns/issuable_spec.rb +++ b/spec/models/concerns/issuable_spec.rb @@ -264,41 +264,55 @@ describe Issuable do end end - describe "#to_hook_data" do - it_behaves_like 'issuable hook data', 'issue' do - let(:issuable) { create(:issue, description: 'A description') } - end + describe '#to_hook_data' do + context 'labels are updated' do + let(:labels) { create_list(:label, 2) } + let(:data) { issue.to_hook_data(user, old_labels: [labels[0]]) } - it_behaves_like 'issuable hook data', 'merge_request' do - let(:issuable) { create(:merge_request, description: 'A description') } + before do + issue.update(labels: [labels[1]]) + end + + it 'includes labels in the hook data' do + expect(data[:labels]).to eq([labels[1].hook_attrs]) + expect(data[:changes]).to match(hash_including({ + labels: [[labels[0].hook_attrs], [labels[1].hook_attrs]] + })) + end end - context "issue is assigned" do - let(:data) { issue.to_hook_data(user) } + context 'issue is assigned' do + let(:user2) { create(:user) } + let(:data) { issue.to_hook_data(user, old_assignees: [user]) } before do - issue.assignees << user + issue.assignees << user << user2 end - it "returns correct hook data" do - expect(data[:assignees].first).to eq(user.hook_attrs) + it 'returns correct hook data' do + expect(data[:assignees]).to eq([user.hook_attrs, user2.hook_attrs]) + expect(data[:changes]).to match(hash_including({ + assignees: [[user.hook_attrs], [user.hook_attrs, user2.hook_attrs]] + })) end end - context "merge_request is assigned" do + context 'merge_request is assigned' do let(:merge_request) { create(:merge_request) } - let(:data) { merge_request.to_hook_data(user) } + let(:user2) { create(:user) } + let(:data) { merge_request.to_hook_data(user, old_assignees: [user]) } before do - merge_request.update_attribute(:assignee, user) + merge_request.update(assignee: user) + merge_request.update(assignee: user2) end - it "returns correct hook data" do - expect(data[:object_attributes]['assignee_id']).to eq(user.id) - expect(data[:assignee]).to eq(user.hook_attrs) + it 'returns correct hook data' do + expect(data[:object_attributes]['assignee_id']).to eq(user2.id) + expect(data[:assignee]).to eq(user2.hook_attrs) expect(data[:changes]).to match(hash_including({ - 'assignee_id' => [nil, user.id], - 'updated_at' => [a_kind_of(ActiveSupport::TimeWithZone), a_kind_of(ActiveSupport::TimeWithZone)] + assignee_id: [user.id, user2.id], + assignee: [user.hook_attrs, user2.hook_attrs] })) end end diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index e547da0cfbe..bd1ae3c4945 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -702,15 +702,39 @@ describe Issue do describe '#hook_attrs' do let(:attrs_hash) { subject.hook_attrs } - it 'includes time tracking attrs' do + it 'includes safe attribute' do + %w[ + assignee_id + author_id + branch_name + closed_at + confidential + created_at + deleted_at + description + due_date + id + iid + last_edited_at + last_edited_by_id + milestone_id + moved_to_id + project_id + relative_position + state + time_estimate + title + updated_at + updated_by_id + ].each do |key| + expect(attrs_hash).to include(key) + end + end + + it 'includes additional attrs' do expect(attrs_hash).to include(:total_time_spent) expect(attrs_hash).to include(:human_time_estimate) expect(attrs_hash).to include(:human_total_time_spent) - expect(attrs_hash).to include('time_estimate') - end - - it 'includes assignee_ids and deprecated assignee_id' do - expect(attrs_hash).to include(:assignee_id) expect(attrs_hash).to include(:assignee_ids) end end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 950af653c80..844ada57e22 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -660,19 +660,53 @@ describe MergeRequest do end end - describe "#hook_attrs" do + describe '#hook_attrs' do let(:attrs_hash) { subject.hook_attrs } - [:source, :target].each do |key| + it 'includes safe attribute' do + %w[ + assignee_id + author_id + created_at + deleted_at + description + head_pipeline_id + id + iid + last_edited_at + last_edited_by_id + merge_commit_sha + merge_error + merge_params + merge_status + merge_user_id + merge_when_pipeline_succeeds + milestone_id + ref_fetched + source_branch + source_project_id + state + target_branch + target_project_id + time_estimate + title + updated_at + updated_by_id + ].each do |key| + expect(attrs_hash).to include(key) + end + end + + %i[source target].each do |key| describe "#{key} key" do include_examples 'project hook data', project_key: key do let(:data) { attrs_hash } - let(:project) { subject.send("#{key}_project") } + let(:project) { subject.public_send("#{key}_project") } end end end - it "has all the required keys" do + it 'includes additional attrs' do expect(attrs_hash).to include(:source) expect(attrs_hash).to include(:target) expect(attrs_hash).to include(:last_commit) @@ -680,7 +714,6 @@ describe MergeRequest do expect(attrs_hash).to include(:total_time_spent) expect(attrs_hash).to include(:human_time_estimate) expect(attrs_hash).to include(:human_total_time_spent) - expect(attrs_hash).to include('time_estimate') end end |