Commit e558edd1 authored by Grzegorz Bizon's avatar Grzegorz Bizon Committed by Robert Speicher

Update specs to carry out changes in note factory

parent 21d0cddd
...@@ -20,7 +20,7 @@ class Spinach::Features::DashboardTodos < Spinach::FeatureSteps ...@@ -20,7 +20,7 @@ class Spinach::Features::DashboardTodos < Spinach::FeatureSteps
step 'I have todos' do step 'I have todos' do
create(:todo, user: current_user, project: project, author: mary_jane, target: issue, action: Todo::MENTIONED) create(:todo, user: current_user, project: project, author: mary_jane, target: issue, action: Todo::MENTIONED)
create(:todo, user: current_user, project: project, author: john_doe, target: issue, action: Todo::ASSIGNED) create(:todo, user: current_user, project: project, author: john_doe, target: issue, action: Todo::ASSIGNED)
note = create(:note, author: john_doe, noteable: issue, note: "#{current_user.to_reference} Wdyt?") note = create(:note, author: john_doe, noteable: issue, note: "#{current_user.to_reference} Wdyt?", project: project)
create(:todo, user: current_user, project: project, author: john_doe, target: issue, action: Todo::MENTIONED, note: note) create(:todo, user: current_user, project: project, author: john_doe, target: issue, action: Todo::MENTIONED, note: note)
create(:todo, user: current_user, project: project, author: john_doe, target: merge_request, action: Todo::ASSIGNED) create(:todo, user: current_user, project: project, author: john_doe, target: merge_request, action: Todo::ASSIGNED)
end end
......
...@@ -348,7 +348,7 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps ...@@ -348,7 +348,7 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps
step 'another user adds a comment with text "Yay!" to issue "Release 0.4"' do step 'another user adds a comment with text "Yay!" to issue "Release 0.4"' do
issue = Issue.find_by!(title: 'Release 0.4') issue = Issue.find_by!(title: 'Release 0.4')
create(:note_on_issue, noteable: issue, note: 'Yay!') create(:note_on_issue, noteable: issue, project: project, note: 'Yay!')
end end
step 'I should see a new comment with text "Yay!"' do step 'I should see a new comment with text "Yay!"' do
......
...@@ -9,7 +9,7 @@ FactoryGirl.define do ...@@ -9,7 +9,7 @@ FactoryGirl.define do
author author
noteable { create(:issue, project: project) } noteable { create(:issue, project: project) }
factory :note_on_issue, aliases: [:votable_note] factory :note_on_issue, traits: [:on_issue], aliases: [:votable_note]
factory :note_on_commit, traits: [:on_commit] factory :note_on_commit, traits: [:on_commit]
factory :note_on_commit_diff, traits: [:on_commit, :on_diff], class: LegacyDiffNote factory :note_on_commit_diff, traits: [:on_commit, :on_diff], class: LegacyDiffNote
factory :note_on_merge_request, traits: [:on_merge_request] factory :note_on_merge_request, traits: [:on_merge_request]
...@@ -19,24 +19,33 @@ FactoryGirl.define do ...@@ -19,24 +19,33 @@ FactoryGirl.define do
factory :downvote_note, traits: [:award, :downvote] factory :downvote_note, traits: [:award, :downvote]
factory :upvote_note, traits: [:award, :upvote] factory :upvote_note, traits: [:award, :upvote]
trait :on_issue do
noteable_type 'Issue'
end
trait :on_commit do trait :on_commit do
noteable nil noteable nil
commit_id RepoHelpers.sample_commit.id commit_id RepoHelpers.sample_commit.id
noteable_type "Commit" noteable_type "Commit"
end end
trait :on_diff do
line_code "0_184_184"
end
trait :on_merge_request do trait :on_merge_request do
noteable { create(:merge_request, project: project) } noteable_type 'MergeRequest'
noteable do
create(:merge_request, source_project: project,
target_project: project)
end
end end
trait :on_project_snippet do trait :on_project_snippet do
noteable_type 'Snippet'
noteable { create(:snippet, project: project) } noteable { create(:snippet, project: project) }
end end
trait :on_diff do
line_code "0_184_184"
end
trait :system do trait :system do
system true system true
end end
......
...@@ -9,8 +9,12 @@ feature 'Issue notes polling' do ...@@ -9,8 +9,12 @@ feature 'Issue notes polling' do
end end
scenario 'Another user adds a comment to an issue', js: true do scenario 'Another user adds a comment to an issue', js: true do
note = create(:note_on_issue, noteable: issue, note: 'Looks good!') note = create(:note_on_issue, noteable: issue,
project: project,
note: 'Looks good!')
page.execute_script('notes.refresh();') page.execute_script('notes.refresh();')
expect(page).to have_selector("#note_#{note.id}", text: 'Looks good!') expect(page).to have_selector("#note_#{note.id}", text: 'Looks good!')
end end
end end
...@@ -125,7 +125,7 @@ describe 'Issues', feature: true do ...@@ -125,7 +125,7 @@ describe 'Issues', feature: true do
describe 'Issue info' do describe 'Issue info' do
it 'excludes award_emoji from comment count' do it 'excludes award_emoji from comment count' do
issue = create(:issue, author: @user, assignee: @user, project: project, title: 'foobar') issue = create(:issue, author: @user, assignee: @user, project: project, title: 'foobar')
create(:upvote_note, noteable: issue) create(:upvote_note, noteable: issue, project: project)
visit namespace_project_issues_path(project.namespace, project, assignee_id: @user.id) visit namespace_project_issues_path(project.namespace, project, assignee_id: @user.id)
......
...@@ -19,10 +19,14 @@ describe 'Comments', feature: true do ...@@ -19,10 +19,14 @@ describe 'Comments', feature: true do
end end
describe 'On a merge request', js: true, feature: true do describe 'On a merge request', js: true, feature: true do
let!(:merge_request) { create(:merge_request) } let!(:project) { create(:project) }
let!(:project) { merge_request.source_project } let!(:merge_request) do
create(:merge_request, source_project: project, target_project: project)
end
let!(:note) do let!(:note) do
create(:note_on_merge_request, :with_attachment, project: project) create(:note_on_merge_request, :with_attachment, noteable: merge_request,
project: project)
end end
before do before do
......
...@@ -32,7 +32,8 @@ feature 'Member autocomplete', feature: true do ...@@ -32,7 +32,8 @@ feature 'Member autocomplete', feature: true do
context 'adding a new note on a Issue', js: true do context 'adding a new note on a Issue', js: true do
before do before do
issue = create(:issue, author: author, project: project) issue = create(:issue, author: author, project: project)
create(:note, note: 'Ultralight Beam', noteable: issue, author: participant) create(:note, note: 'Ultralight Beam', noteable: issue,
project: project, author: participant)
visit_issue(project, issue) visit_issue(project, issue)
end end
...@@ -47,7 +48,8 @@ feature 'Member autocomplete', feature: true do ...@@ -47,7 +48,8 @@ feature 'Member autocomplete', feature: true do
context 'adding a new note on a Merge Request ', js: true do context 'adding a new note on a Merge Request ', js: true do
before do before do
merge = create(:merge_request, source_project: project, target_project: project, author: author) merge = create(:merge_request, source_project: project, target_project: project, author: author)
create(:note, note: 'Ultralight Beam', noteable: merge, author: participant) create(:note, note: 'Ultralight Beam', noteable: merge,
project: project, author: participant)
visit_merge_request(project, merge) visit_merge_request(project, merge)
end end
......
...@@ -75,7 +75,10 @@ feature 'Task Lists', feature: true do ...@@ -75,7 +75,10 @@ feature 'Task Lists', feature: true do
describe 'for Notes' do describe 'for Notes' do
let!(:issue) { create(:issue, author: user, project: project) } let!(:issue) { create(:issue, author: user, project: project) }
let!(:note) { create(:note, note: markdown, noteable: issue, author: user) } let!(:note) do
create(:note, note: markdown, noteable: issue,
project: project, author: user)
end
it 'renders for note body' do it 'renders for note body' do
visit_issue(project, issue) visit_issue(project, issue)
......
...@@ -9,7 +9,8 @@ describe 'Gitlab::NoteDataBuilder', lib: true do ...@@ -9,7 +9,8 @@ describe 'Gitlab::NoteDataBuilder', lib: true do
before(:each) do before(:each) do
expect(data).to have_key(:object_attributes) expect(data).to have_key(:object_attributes)
expect(data[:object_attributes]).to have_key(:url) expect(data[:object_attributes]).to have_key(:url)
expect(data[:object_attributes][:url]).to eq(Gitlab::UrlBuilder.build(note)) expect(data[:object_attributes][:url])
.to eq(Gitlab::UrlBuilder.build(note))
expect(data[:object_kind]).to eq('note') expect(data[:object_kind]).to eq('note')
expect(data[:user]).to eq(user.hook_attrs) expect(data[:user]).to eq(user.hook_attrs)
end end
...@@ -37,13 +38,21 @@ describe 'Gitlab::NoteDataBuilder', lib: true do ...@@ -37,13 +38,21 @@ describe 'Gitlab::NoteDataBuilder', lib: true do
end end
describe 'When asking for a note on issue' do describe 'When asking for a note on issue' do
let(:issue) { create(:issue, created_at: fixed_time, updated_at: fixed_time) } let(:issue) do
let(:note) { create(:note_on_issue, noteable_id: issue.id, project: project) } create(:issue, created_at: fixed_time, updated_at: fixed_time,
project: project)
end
let(:note) do
create(:note_on_issue, noteable_id: issue.id, project: project)
end
it 'returns the note and issue-specific data' do it 'returns the note and issue-specific data' do
expect(data).to have_key(:issue) expect(data).to have_key(:issue)
expect(data[:issue].except('updated_at')).to eq(issue.hook_attrs.except('updated_at')) expect(data[:issue].except('updated_at'))
expect(data[:issue]['updated_at']).to be > issue.hook_attrs['updated_at'] .to eq(issue.hook_attrs.except('updated_at'))
expect(data[:issue]['updated_at'])
.to be > issue.hook_attrs['updated_at']
end end
include_examples 'project hook data' include_examples 'project hook data'
...@@ -51,13 +60,23 @@ describe 'Gitlab::NoteDataBuilder', lib: true do ...@@ -51,13 +60,23 @@ describe 'Gitlab::NoteDataBuilder', lib: true do
end end
describe 'When asking for a note on merge request' do describe 'When asking for a note on merge request' do
let(:merge_request) { create(:merge_request, created_at: fixed_time, updated_at: fixed_time) } let(:merge_request) do
let(:note) { create(:note_on_merge_request, noteable_id: merge_request.id, project: project) } create(:merge_request, created_at: fixed_time,
updated_at: fixed_time,
source_project: project)
end
let(:note) do
create(:note_on_merge_request, noteable_id: merge_request.id,
project: project)
end
it 'returns the note and merge request data' do it 'returns the note and merge request data' do
expect(data).to have_key(:merge_request) expect(data).to have_key(:merge_request)
expect(data[:merge_request].except('updated_at')).to eq(merge_request.hook_attrs.except('updated_at')) expect(data[:merge_request].except('updated_at'))
expect(data[:merge_request]['updated_at']).to be > merge_request.hook_attrs['updated_at'] .to eq(merge_request.hook_attrs.except('updated_at'))
expect(data[:merge_request]['updated_at'])
.to be > merge_request.hook_attrs['updated_at']
end end
include_examples 'project hook data' include_examples 'project hook data'
...@@ -65,13 +84,22 @@ describe 'Gitlab::NoteDataBuilder', lib: true do ...@@ -65,13 +84,22 @@ describe 'Gitlab::NoteDataBuilder', lib: true do
end end
describe 'When asking for a note on merge request diff' do describe 'When asking for a note on merge request diff' do
let(:merge_request) { create(:merge_request, created_at: fixed_time, updated_at: fixed_time) } let(:merge_request) do
let(:note) { create(:note_on_merge_request_diff, noteable_id: merge_request.id, project: project) } create(:merge_request, created_at: fixed_time, updated_at: fixed_time,
source_project: project)
end
let(:note) do
create(:note_on_merge_request_diff, noteable_id: merge_request.id,
project: project)
end
it 'returns the note and merge request diff data' do it 'returns the note and merge request diff data' do
expect(data).to have_key(:merge_request) expect(data).to have_key(:merge_request)
expect(data[:merge_request].except('updated_at')).to eq(merge_request.hook_attrs.except('updated_at')) expect(data[:merge_request].except('updated_at'))
expect(data[:merge_request]['updated_at']).to be > merge_request.hook_attrs['updated_at'] .to eq(merge_request.hook_attrs.except('updated_at'))
expect(data[:merge_request]['updated_at'])
.to be > merge_request.hook_attrs['updated_at']
end end
include_examples 'project hook data' include_examples 'project hook data'
...@@ -79,13 +107,22 @@ describe 'Gitlab::NoteDataBuilder', lib: true do ...@@ -79,13 +107,22 @@ describe 'Gitlab::NoteDataBuilder', lib: true do
end end
describe 'When asking for a note on project snippet' do describe 'When asking for a note on project snippet' do
let!(:snippet) { create(:project_snippet, created_at: fixed_time, updated_at: fixed_time) } let!(:snippet) do
let!(:note) { create(:note_on_project_snippet, noteable_id: snippet.id, project: project) } create(:project_snippet, created_at: fixed_time, updated_at: fixed_time,
project: project)
end
let!(:note) do
create(:note_on_project_snippet, noteable_id: snippet.id,
project: project)
end
it 'returns the note and project snippet data' do it 'returns the note and project snippet data' do
expect(data).to have_key(:snippet) expect(data).to have_key(:snippet)
expect(data[:snippet].except('updated_at')).to eq(snippet.hook_attrs.except('updated_at')) expect(data[:snippet].except('updated_at'))
expect(data[:snippet]['updated_at']).to be > snippet.hook_attrs['updated_at'] .to eq(snippet.hook_attrs.except('updated_at'))
expect(data[:snippet]['updated_at'])
.to be > snippet.hook_attrs['updated_at']
end end
include_examples 'project hook data' include_examples 'project hook data'
......
...@@ -189,7 +189,6 @@ describe Issue, "Issuable" do ...@@ -189,7 +189,6 @@ describe Issue, "Issuable" do
let(:data) { issue.to_hook_data(user) } let(:data) { issue.to_hook_data(user) }
let(:project) { issue.project } let(:project) { issue.project }
it "returns correct hook data" do it "returns correct hook data" do
expect(data[:object_kind]).to eq("issue") expect(data[:object_kind]).to eq("issue")
expect(data[:user]).to eq(user.hook_attrs) expect(data[:user]).to eq(user.hook_attrs)
...@@ -230,10 +229,8 @@ describe Issue, "Issuable" do ...@@ -230,10 +229,8 @@ describe Issue, "Issuable" do
describe "votes" do describe "votes" do
before do before do
author = create :user issue.notes.awards.create!(note: "thumbsup", author: user, project: issue.project)
project = create :empty_project issue.notes.awards.create!(note: "thumbsdown", author: user, project: issue.project)
issue.notes.awards.create!(note: "thumbsup", author: author, project: project)
issue.notes.awards.create!(note: "thumbsdown", author: author, project: project)
end end
it "returns correct values" do it "returns correct values" do
......
...@@ -119,7 +119,9 @@ describe MergeRequest, models: true do ...@@ -119,7 +119,9 @@ describe MergeRequest, models: true do
before do before do
allow(merge_request).to receive(:commits) { [merge_request.source_project.repository.commit] } allow(merge_request).to receive(:commits) { [merge_request.source_project.repository.commit] }
create(:note, commit_id: merge_request.commits.first.id, noteable_type: 'Commit', project: merge_request.project) create(:note_on_commit, commit_id: merge_request.commits.first.id,
noteable_type: 'Commit',
project: merge_request.project)
create(:note, noteable: merge_request, project: merge_request.project) create(:note, noteable: merge_request, project: merge_request.project)
end end
...@@ -129,7 +131,10 @@ describe MergeRequest, models: true do ...@@ -129,7 +131,10 @@ describe MergeRequest, models: true do
end end
it "should include notes for commits from target project as well" do it "should include notes for commits from target project as well" do
create(:note, commit_id: merge_request.commits.first.id, noteable_type: 'Commit', project: merge_request.target_project) create(:note_on_commit, commit_id: merge_request.commits.first.id,
noteable_type: 'Commit',
project: merge_request.target_project)
expect(merge_request.commits).not_to be_empty expect(merge_request.commits).not_to be_empty
expect(merge_request.mr_and_commit_notes.count).to eq(3) expect(merge_request.mr_and_commit_notes.count).to eq(3)
end end
......
...@@ -202,12 +202,18 @@ describe Note, models: true do ...@@ -202,12 +202,18 @@ describe Note, models: true do
let(:merge_request) { create :merge_request } let(:merge_request) { create :merge_request }
it "converts aliases to actual name" do it "converts aliases to actual name" do
note = create(:note, note: ":+1:", noteable: merge_request) note = create(:note, note: ":+1:",
noteable: merge_request,
project: merge_request.project)
expect(note.reload.note).to eq("thumbsup") expect(note.reload.note).to eq("thumbsup")
end end
it "is not an award emoji when comment is on a diff" do it "is not an award emoji when comment is on a diff" do
note = create(:note_on_merge_request_diff, note: ":blowfish:", noteable: merge_request, line_code: "11d5d2e667e9da4f7f610f81d86c974b146b13bd_0_2") note = create(:note_on_merge_request_diff, note: ":blowfish:",
noteable: merge_request,
project: merge_request.project,
line_code: "11d5d2e667e9da4f7f610f81d86c974b146b13bd_0_2")
note = note.reload note = note.reload
expect(note.note).to eq(":blowfish:") expect(note.note).to eq(":blowfish:")
......
...@@ -176,86 +176,117 @@ describe HipchatService, models: true do ...@@ -176,86 +176,117 @@ describe HipchatService, models: true do
context "Note events" do context "Note events" do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, creator_id: user.id) } let(:project) { create(:project, creator_id: user.id) }
let(:issue) { create(:issue, project: project) }
let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
let(:snippet) { create(:project_snippet, project: project) }
let(:commit_note) { create(:note_on_commit, author: user, project: project, commit_id: project.repository.commit.id, note: 'a comment on a commit') }
let(:merge_request_note) { create(:note_on_merge_request, noteable_id: merge_request.id, note: "merge request note") }
let(:issue_note) { create(:note_on_issue, noteable_id: issue.id, note: "issue note")}
let(:snippet_note) { create(:note_on_project_snippet, noteable_id: snippet.id, note: "snippet note") }
it "should call Hipchat API for commit comment events" do
data = Gitlab::NoteDataBuilder.build(commit_note, user)
hipchat.execute(data)
expect(WebMock).to have_requested(:post, api_url).once context 'when commit comment event triggered' do
let(:commit_note) do
create(:note_on_commit, author: user, project: project,
commit_id: project.repository.commit.id,
note: 'a comment on a commit')
end
it "should call Hipchat API for commit comment events" do
data = Gitlab::NoteDataBuilder.build(commit_note, user)
hipchat.execute(data)
message = hipchat.send(:create_message, data) expect(WebMock).to have_requested(:post, api_url).once
obj_attr = data[:object_attributes] message = hipchat.send(:create_message, data)
commit_id = Commit.truncate_sha(data[:commit][:id])
title = hipchat.send(:format_title, data[:commit][:message])
expect(message).to eq("#{user.name} commented on " \ obj_attr = data[:object_attributes]
"<a href=\"#{obj_attr[:url]}\">commit #{commit_id}</a> in " \ commit_id = Commit.truncate_sha(data[:commit][:id])
"<a href=\"#{project.web_url}\">#{project_name}</a>: " \ title = hipchat.send(:format_title, data[:commit][:message])
"#{title}" \
"<pre>a comment on a commit</pre>") expect(message).to eq("#{user.name} commented on " \
"<a href=\"#{obj_attr[:url]}\">commit #{commit_id}</a> in " \
"<a href=\"#{project.web_url}\">#{project_name}</a>: " \
"#{title}" \
"<pre>a comment on a commit</pre>")
end
end end
it "should call Hipchat API for merge request comment events" do context 'when merge request comment event triggered' do
data = Gitlab::NoteDataBuilder.build(merge_request_note, user) let(:merge_request) do
hipchat.execute(data) create(:merge_request, source_project: project,
target_project: project)
end
expect(WebMock).to have_requested(:post, api_url).once let(:merge_request_note) do
create(:note_on_merge_request, noteable_id: merge_request.id,
project: project,
note: "merge request note")
end
message = hipchat.send(:create_message, data) it "should call Hipchat API for merge request comment events" do
data = Gitlab::NoteDataBuilder.build(merge_request_note, user)
hipchat.execute(data)
obj_attr = data[:object_attributes] expect(WebMock).to have_requested(:post, api_url).once
merge_id = data[:merge_request]['iid']
title = data[:merge_request]['title']
expect(message).to eq("#{user.name} commented on " \ message = hipchat.send(:create_message, data)
"<a href=\"#{obj_attr[:url]}\">merge request !#{merge_id}</a> in " \
"<a href=\"#{project.web_url}\">#{project_name}</a>: " \ obj_attr = data[:object_attributes]
"<b>#{title}</b>" \ merge_id = data[:merge_request]['iid']
"<pre>merge request note</pre>") title = data[:merge_request]['title']
expect(message).to eq("#{user.name} commented on " \
"<a href=\"#{obj_attr[:url]}\">merge request !#{merge_id}</a> in " \
"<a href=\"#{project.web_url}\">#{project_name}</a>: " \
"<b>#{title}</b>" \
"<pre>merge request note</pre>")
end
end end
it "should call Hipchat API for issue comment events" do context 'when issue comment event triggered' do
data = Gitlab::NoteDataBuilder.build(issue_note, user) let(:issue) { create(:issue, project: project) }
hipchat.execute(data) let(:issue_note) do
create(:note_on_issue, noteable_id: issue.id, project: project,
note: "issue note")
end
message = hipchat.send(:create_message, data) it "should call Hipchat API for issue comment events" do
data = Gitlab::NoteDataBuilder.build(issue_note, user)
hipchat.execute(data)
obj_attr = data[:object_attributes] message = hipchat.send(:create_message, data)
issue_id = data[:issue]['iid']
title = data[:issue]['title']
expect(message).to eq("#{user.name} commented on " \ obj_attr = data[:object_attributes]
"<a href=\"#{obj_attr[:url]}\">issue ##{issue_id}</a> in " \ issue_id = data[:issue]['iid']
"<a href=\"#{project.web_url}\">#{project_name}</a>: " \ title = data[:issue]['title']
"<b>#{title}</b>" \
"<pre>issue note</pre>") expect(message).to eq("#{user.name} commented on " \
"<a href=\"#{obj_attr[:url]}\">issue ##{issue_id}</a> in " \
"<a href=\"#{project.web_url}\">#{project_name}</a>: " \
"<b>#{title}</b>" \
"<pre>issue note</pre>")
end
end end
it "should call Hipchat API for snippet comment events" do context 'when snippet comment event triggered' do
data = Gitlab::NoteDataBuilder.build(snippet_note, user) let(:snippet) { create(:project_snippet, project: project) }
hipchat.execute(data) let(:snippet_note) do
create(:note_on_project_snippet, noteable_id: snippet.id,
project: project,
note: "snippet note")
end
expect(WebMock).to have_requested(:post, api_url).once it "should call Hipchat API for snippet comment events" do
data = Gitlab::NoteDataBuilder.build(snippet_note, user)
hipchat.execute(data)
message = hipchat.send(:create_message, data) expect(WebMock).to have_requested(:post, api_url).once
obj_attr = data[:object_attributes] message = hipchat.send(:create_message, data)
snippet_id = data[:snippet]['id']
title = data[:snippet]['title']
expect(message).to eq("#{user.name} commented on " \ obj_attr = data[:object_attributes]
"<a href=\"#{obj_attr[:url]}\">snippet ##{snippet_id}</a> in " \ snippet_id = data[:snippet]['id']
"<a href=\"#{project.web_url}\">#{project_name}</a>: " \ title = data[:snippet]['title']
"<b>#{title}</b>" \
"<pre>snippet note</pre>") expect(message).to eq("#{user.name} commented on " \
"<a href=\"#{obj_attr[:url]}\">snippet ##{snippet_id}</a> in " \
"<a href=\"#{project.web_url}\">#{project_name}</a>: " \
"<b>#{title}</b>" \
"<pre>snippet note</pre>")
end
end end
end end
......
...@@ -142,13 +142,6 @@ describe SlackService, models: true do ...@@ -142,13 +142,6 @@ describe SlackService, models: true do
let(:slack) { SlackService.new } let(:slack) { SlackService.new }
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, creator_id: user.id) } let(:project) { create(:project, creator_id: user.id) }
let(:issue) { create(:issue, project: project) }
let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
let(:snippet) { create(:project_snippet, project: project) }
let(:commit_note) { create(:note_on_commit, author: user, project: project, commit_id: project.repository.commit.id, note: 'a comment on a commit') }
let(:merge_request_note) { create(:note_on_merge_request, noteable_id: merge_request.id, note: "merge request note") }
let(:issue_note) { create(:note_on_issue, noteable_id: issue.id, note: "issue note")}
let(:snippet_note) { create(:note_on_project_snippet, noteable_id: snippet.id, note: "snippet note") }
let(:webhook_url) { 'https://hooks.slack.com/services/SVRWFV0VVAR97N/B02R25XN3/ZBqu7xMupaEEICInN685' } let(:webhook_url) { 'https://hooks.slack.com/services/SVRWFV0VVAR97N/B02R25XN3/ZBqu7xMupaEEICInN685' }
before do before do
...@@ -162,32 +155,61 @@ describe SlackService, models: true do ...@@ -162,32 +155,61 @@ describe SlackService, models: true do
WebMock.stub_request(:post, webhook_url) WebMock.stub_request(:post, webhook_url)
end end
it "should call Slack API for commit comment events" do context 'when commit comment event executed' do
data = Gitlab::NoteDataBuilder.build(commit_note, user) let(:commit_note) do
slack.execute(data) create(:note_on_commit, author: user,
project: project,
commit_id: project.repository.commit.id,
note: 'a comment on a commit')
end
expect(WebMock).to have_requested(:post, webhook_url).once it "should call Slack API for commit comment events" do
data = Gitlab::NoteDataBuilder.build(commit_note, user)
slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
end end
it "should call Slack API for merge request comment events" do context 'when merge request comment event executed' do
data = Gitlab::NoteDataBuilder.build(merge_request_note, user) let(:merge_request_note) do
slack.execute(data) create(:note_on_merge_request, project: project,
note: "merge request note")
end
expect(WebMock).to have_requested(:post, webhook_url).once it "should call Slack API for merge request comment events" do
data = Gitlab::NoteDataBuilder.build(merge_request_note, user)
slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
end end
it "should call Slack API for issue comment events" do context 'when issue comment event executed' do
data = Gitlab::NoteDataBuilder.build(issue_note, user) let(:issue_note) do
slack.execute(data) create(:note_on_issue, project: project, note: "issue note")
end
expect(WebMock).to have_requested(:post, webhook_url).once it "should call Slack API for issue comment events" do
data = Gitlab::NoteDataBuilder.build(issue_note, user)
slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
end end
it "should call Slack API for snippet comment events" do context 'when snippet comment event executed' do
data = Gitlab::NoteDataBuilder.build(snippet_note, user) let(:snippet_note) do
slack.execute(data) create(:note_on_project_snippet, project: project,
note: "snippet note")
end
expect(WebMock).to have_requested(:post, webhook_url).once it "should call Slack API for snippet comment events" do
data = Gitlab::NoteDataBuilder.build(snippet_note, user)
slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
end end
end end
end end
require 'spec_helper' require 'spec_helper'
describe MergeRequests::MergeWhenBuildSucceedsService do describe MergeRequests::MergeWhenBuildSucceedsService do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:merge_request) { create(:merge_request) } let(:project) { create(:project) }
let(:mr_merge_if_green_enabled) do let(:mr_merge_if_green_enabled) do
create(:merge_request, merge_when_build_succeeds: true, merge_user: user, create(:merge_request, merge_when_build_succeeds: true, merge_user: user,
...@@ -10,11 +10,15 @@ describe MergeRequests::MergeWhenBuildSucceedsService do ...@@ -10,11 +10,15 @@ describe MergeRequests::MergeWhenBuildSucceedsService do
source_project: project, target_project: project, state: "opened") source_project: project, target_project: project, state: "opened")
end end
let(:project) { create(:project) }
let(:ci_commit) { create(:ci_commit_with_one_job, ref: mr_merge_if_green_enabled.source_branch, project: project) } let(:ci_commit) { create(:ci_commit_with_one_job, ref: mr_merge_if_green_enabled.source_branch, project: project) }
let(:service) { MergeRequests::MergeWhenBuildSucceedsService.new(project, user, commit_message: 'Awesome message') } let(:service) { MergeRequests::MergeWhenBuildSucceedsService.new(project, user, commit_message: 'Awesome message') }
describe "#execute" do describe "#execute" do
let(:merge_request) do
create(:merge_request, target_project: project, source_project: project,
source_branch: "feature", target_branch: 'master')
end
context 'first time enabling' do context 'first time enabling' do
before do before do
allow(merge_request).to receive(:ci_commit).and_return(ci_commit) allow(merge_request).to receive(:ci_commit).and_return(ci_commit)
......
...@@ -208,8 +208,10 @@ describe SystemNoteService, services: true do ...@@ -208,8 +208,10 @@ describe SystemNoteService, services: true do
end end
describe '.merge_when_build_succeeds' do describe '.merge_when_build_succeeds' do
let(:ci_commit) { build :ci_commit_without_jobs } let(:ci_commit) { build(:ci_commit_without_jobs )}
let(:noteable) { create :merge_request } let(:noteable) do
create(:merge_request, source_project: project, target_project: project)
end
subject { described_class.merge_when_build_succeeds(noteable, project, author, noteable.last_commit) } subject { described_class.merge_when_build_succeeds(noteable, project, author, noteable.last_commit) }
...@@ -221,8 +223,10 @@ describe SystemNoteService, services: true do ...@@ -221,8 +223,10 @@ describe SystemNoteService, services: true do
end end
describe '.cancel_merge_when_build_succeeds' do describe '.cancel_merge_when_build_succeeds' do
let(:ci_commit) { build :ci_commit_without_jobs } let(:ci_commit) { build(:ci_commit_without_jobs) }
let(:noteable) { create :merge_request } let(:noteable) do
create(:merge_request, source_project: project, target_project: project)
end
subject { described_class.cancel_merge_when_build_succeeds(noteable, project, author) } subject { described_class.cancel_merge_when_build_succeeds(noteable, project, author) }
......
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