summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshley Dumaine <adumaine@datto.com>2017-08-30 13:58:19 -0400
committerSean McGivern <sean@gitlab.com>2017-09-06 10:07:47 +0100
commit959e6d221d6b11c64d17fc9d4734200806c293ab (patch)
treeaecb32f12f3115f3573735ce9342bc58841461e7
parentef4b3a39bc705dfa47762868ea064d2dbadc16e6 (diff)
downloadgitlab-ce-959e6d221d6b11c64d17fc9d4734200806c293ab.tar.gz
add unit tests for new collapse_outdated_diff_comments toggle
-rw-r--r--spec/features/merge_requests/collapse_outdated_diff_comments.rb76
-rw-r--r--spec/requests/api/projects_spec.rb30
-rw-r--r--spec/requests/api/v3/projects_spec.rb26
3 files changed, 132 insertions, 0 deletions
diff --git a/spec/features/merge_requests/collapse_outdated_diff_comments.rb b/spec/features/merge_requests/collapse_outdated_diff_comments.rb
new file mode 100644
index 00000000000..baca34026ea
--- /dev/null
+++ b/spec/features/merge_requests/collapse_outdated_diff_comments.rb
@@ -0,0 +1,76 @@
+require 'spec_helper'
+
+feature 'Collapse outdated diff comments', js: true do
+ let(:merge_request) { create(:merge_request, importing: true) }
+ let(:project) { merge_request.source_project }
+
+ let!(:outdated_discussion) { create(:diff_note_on_merge_request, project: project, noteable: merge_request, position: outdated_position).to_discussion }
+ let!(:active_discussion) { create(:diff_note_on_merge_request, noteable: merge_request, project: project).to_discussion }
+
+ let(:outdated_position) do
+ Gitlab::Diff::Position.new(
+ old_path: "files/ruby/popen.rb",
+ new_path: "files/ruby/popen.rb",
+ old_line: nil,
+ new_line: 9,
+ diff_refs: outdated_diff_refs
+ )
+ end
+
+ let(:outdated_diff_refs) { project.commit("874797c3a73b60d2187ed6e2fcabd289ff75171e").diff_refs }
+
+ before do
+ sign_in(create(:admin))
+ end
+
+ context 'when project.collapse_outdated_diff_comments == true' do
+ before do
+ project.update_column(:collapse_outdated_diff_comments, true)
+ end
+
+ context 'with unresolved outdated discussions' do
+ it 'does not show outdated discussion' do
+ visit_merge_request(merge_request)
+ within(".discussion[data-discussion-id='#{outdated_discussion.id}']") do
+ expect(page).to have_css('.discussion-body .hide .js-toggle-content', visible: false)
+ end
+ end
+ end
+
+ context 'with unresolved active discussions' do
+ it 'shows active discussion' do
+ visit_merge_request(merge_request)
+ within(".discussion[data-discussion-id='#{active_discussion.id}']") do
+ expect(page).to have_css('.discussion-body .hide .js-toggle-content', visible: true)
+ end
+ end
+ end
+ end
+
+ context 'when project.collapse_outdated_diff_comments == false' do
+ before do
+ project.update_column(:collapse_outdated_diff_comments, false)
+ end
+
+ context 'with unresolved outdated discussions' do
+ it 'shows outdated discussion' do
+ visit_merge_request(merge_request)
+ within(".discussion[data-discussion-id='#{outdated_discussion.id}']") do
+ expect(page).to have_css('.discussion-body .hide .js-toggle-content', visible: true)
+ end
+ end
+ end
+
+ context 'with unresolved active discussions' do
+ it 'shows active discussion' do
+ visit_merge_request(merge_request)
+ within(".discussion[data-discussion-id='#{active_discussion.id}']") do
+ expect(page).to have_css('.discussion-body .hide .js-toggle-content', visible: true)
+ end
+ end
+ end
+ end
+ def visit_merge_request(merge_request)
+ visit project_merge_request_path(project, merge_request)
+ end
+end
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 4490e50702b..5e3fdbd468e 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -414,6 +414,7 @@ describe API::Projects do
jobs_enabled: false,
merge_requests_enabled: false,
wiki_enabled: false,
+ collapse_outdated_diff_comments: false,
only_allow_merge_if_pipeline_succeeds: false,
request_access_enabled: true,
only_allow_merge_if_all_discussions_are_resolved: false,
@@ -477,6 +478,18 @@ describe API::Projects do
expect(json_response['avatar_url']).to eq("http://localhost/uploads/-/system/project/avatar/#{project_id}/banana_sample.gif")
end
+ it 'sets a project as allowing outdated diff comments to collapse regardless of discussion resolution' do
+ project = attributes_for(:project, { collapse_outdated_diff_comments: false })
+ post api('/projects', user), project
+ expect(json_response['collapse_outdated_diff_comments']).to be_falsey
+ end
+
+ it 'sets a project as allowing outdated diff comments to collapse if collapse_outdated_diff_comments' do
+ project = attributes_for(:project, { collapse_outdated_diff_comments: true })
+ post api('/projects', user), project
+ expect(json_response['collapse_outdated_diff_comments']).to be_truthy
+ end
+
it 'sets a project as allowing merge even if build fails' do
project = attributes_for(:project, { only_allow_merge_if_pipeline_succeeds: false })
post api('/projects', user), project
@@ -642,6 +655,22 @@ describe API::Projects do
expect(json_response['visibility']).to eq('private')
end
+ it 'sets a project as allowing outdated diff comments to collapse regardless of discussion resolution' do
+ project = attributes_for(:project, { collapse_outdated_diff_comments: false })
+
+ post api("/projects/user/#{user.id}", admin), project
+
+ expect(json_response['collapse_outdated_diff_comments']).to be_falsey
+ end
+
+ it 'sets a project as allowing outdated diff comments to collapse only if collapse_outdated_diff_comments' do
+ project = attributes_for(:project, { collapse_outdated_diff_comments: true })
+
+ post api("/projects/user/#{user.id}", admin), project
+
+ expect(json_response['collapse_outdated_diff_comments']).to be_truthy
+ end
+
it 'sets a project as allowing merge even if build fails' do
project = attributes_for(:project, { only_allow_merge_if_pipeline_succeeds: false })
post api("/projects/user/#{user.id}", admin), project
@@ -732,6 +761,7 @@ describe API::Projects do
expect(json_response['wiki_enabled']).to be_present
expect(json_response['jobs_enabled']).to be_present
expect(json_response['snippets_enabled']).to be_present
+ expect(json_response['collapse_outdated_diff_comments']).to eq(project.collapse_outdated_diff_comments)
expect(json_response['container_registry_enabled']).to be_present
expect(json_response['created_at']).to be_present
expect(json_response['last_activity_at']).to be_present
diff --git a/spec/requests/api/v3/projects_spec.rb b/spec/requests/api/v3/projects_spec.rb
index a514166274a..bbe56c972bd 100644
--- a/spec/requests/api/v3/projects_spec.rb
+++ b/spec/requests/api/v3/projects_spec.rb
@@ -394,6 +394,7 @@ describe API::V3::Projects do
issues_enabled: false,
merge_requests_enabled: false,
wiki_enabled: false,
+ collapse_outdated_diff_comments: false,
only_allow_merge_if_build_succeeds: false,
request_access_enabled: true,
only_allow_merge_if_all_discussions_are_resolved: false
@@ -455,6 +456,18 @@ describe API::V3::Projects do
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
end
+ it 'sets a project as allowing outdated diff comments to collapse regardless of discussion resolution' do
+ project = attributes_for(:project, { collapse_outdated_diff_comments: false })
+ post v3_api('/projects', user), project
+ expect(json_response['collapse_outdated_diff_comments']).to be_falsey
+ end
+
+ it 'sets a project as allowing outdated diff comments to collapse if collapse_outdated_diff_comments' do
+ project = attributes_for(:project, { collapse_outdated_diff_comments: true })
+ post v3_api('/projects', user), project
+ expect(json_response['collapse_outdated_diff_comments']).to be_truthy
+ end
+
it 'sets a project as allowing merge even if build fails' do
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
post v3_api('/projects', user), project
@@ -599,6 +612,18 @@ describe API::V3::Projects do
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
end
+ it 'sets a project as allowing outdated diff comments to collapse regardless of discussion resolution' do
+ project = attributes_for(:project, { collapse_outdated_diff_comments: false })
+ post v3_api("/projects/user/#{user.id}", admin), project
+ expect(json_response['collapse_outdated_diff_comments']).to be_falsey
+ end
+
+ it 'sets a project as allowing outdated diff comments to collapse only if collapse_outdated_diff_comments' do
+ project = attributes_for(:project, { collapse_outdated_diff_comments: true })
+ post v3_api("/projects/user/#{user.id}", admin), project
+ expect(json_response['collapse_outdated_diff_comments']).to be_truthy
+ end
+
it 'sets a project as allowing merge even if build fails' do
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
post v3_api("/projects/user/#{user.id}", admin), project
@@ -687,6 +712,7 @@ describe API::V3::Projects do
expect(json_response['wiki_enabled']).to be_present
expect(json_response['builds_enabled']).to be_present
expect(json_response['snippets_enabled']).to be_present
+ expect(json_response['collapse_outdated_diff_comments']).to eq(project.collapse_outdated_diff_comments)
expect(json_response['container_registry_enabled']).to be_present
expect(json_response['created_at']).to be_present
expect(json_response['last_activity_at']).to be_present