diff options
author | Douwe Maan <douwe@selenight.nl> | 2017-03-17 13:25:52 -0600 |
---|---|---|
committer | Luke "Jared" Bennett <lbennett@gitlab.com> | 2017-04-05 17:44:14 +0100 |
commit | 79889a6aa3dc878d196d0f2f445ab6b10ef10c74 (patch) | |
tree | 25367a69b4a529335e106d0d65c2d9a38e97f092 /spec/models/concerns | |
parent | 80b2e18fb62b8da7410f90b3e5340b9e63e765a3 (diff) | |
download | gitlab-ce-79889a6aa3dc878d196d0f2f445ab6b10ef10c74.tar.gz |
Add specs
Diffstat (limited to 'spec/models/concerns')
-rw-r--r-- | spec/models/concerns/noteable_spec.rb | 84 | ||||
-rw-r--r-- | spec/models/concerns/resolvable_note_spec.rb | 73 |
2 files changed, 144 insertions, 13 deletions
diff --git a/spec/models/concerns/noteable_spec.rb b/spec/models/concerns/noteable_spec.rb index 51855fb2f0d..24962d3b074 100644 --- a/spec/models/concerns/noteable_spec.rb +++ b/spec/models/concerns/noteable_spec.rb @@ -1,5 +1,85 @@ require 'spec_helper' -describe Noteable, model: true do - # TODO: Test +describe MergeRequest, Noteable, model: true do + let(:merge_request) { create(:merge_request) } + let(:project) { merge_request.project } + let!(:active_diff_note1) { create(:diff_note_on_merge_request, project: project, noteable: merge_request) } + let!(:active_diff_note2) { create(:diff_note_on_merge_request, project: project, noteable: merge_request) } + let!(:active_diff_note3) { create(:diff_note_on_merge_request, project: project, noteable: merge_request, position: active_position2) } + let!(:outdated_diff_note1) { create(:diff_note_on_merge_request, project: project, noteable: merge_request, position: outdated_position) } + let!(:outdated_diff_note2) { create(:diff_note_on_merge_request, project: project, noteable: merge_request, position: outdated_position) } + let!(:discussion_note1) { create(:discussion_note_on_merge_request, project: project, noteable: merge_request) } + let!(:discussion_note2) { create(:discussion_note_on_merge_request, in_reply_to: discussion_note1) } + let!(:commit_diff_note1) { create(:diff_note_on_commit, project: project) } + let!(:commit_diff_note2) { create(:diff_note_on_commit, project: project) } + let!(:commit_note1) { create(:note_on_commit, project: project) } + let!(:commit_note2) { create(:note_on_commit, project: project) } + let!(:commit_discussion_note1) { create(:discussion_note_on_commit, project: project) } + let!(:commit_discussion_note2) { create(:discussion_note_on_commit, in_reply_to: commit_discussion_note1) } + let!(:commit_discussion_note3) { create(:discussion_note_on_commit, project: project) } + let!(:note1) { create(:note, project: project, noteable: merge_request) } + let!(:note2) { create(:note, project: project, noteable: merge_request) } + + let(:active_position2) do + Gitlab::Diff::Position.new( + old_path: "files/ruby/popen.rb", + new_path: "files/ruby/popen.rb", + old_line: 16, + new_line: 22, + diff_refs: merge_request.diff_refs + ) + end + + 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: project.commit("874797c3a73b60d2187ed6e2fcabd289ff75171e").diff_refs + ) + end + + describe '#discussions' do + subject { merge_request.discussions } + + it 'includes discussions for diff notes, commit diff notes, commit notes, and regular notes' do + expect(subject).to eq([ + DiffDiscussion.new([active_diff_note1, active_diff_note2], merge_request), + DiffDiscussion.new([active_diff_note3], merge_request), + DiffDiscussion.new([outdated_diff_note1, outdated_diff_note2], merge_request), + SimpleDiscussion.new([discussion_note1, discussion_note2], merge_request), + DiffDiscussion.new([commit_diff_note1, commit_diff_note2], merge_request), + OutOfContextDiscussion.new([commit_note1, commit_note2], merge_request), + SimpleDiscussion.new([commit_discussion_note1, commit_discussion_note2], merge_request), + SimpleDiscussion.new([commit_discussion_note3], merge_request), + IndividualNoteDiscussion.new([note1], merge_request), + IndividualNoteDiscussion.new([note2], merge_request) + ]) + end + end + + describe '#grouped_diff_discussions' do + subject { merge_request.grouped_diff_discussions } + + it "includes active discussions" do + discussions = subject.values + + expect(discussions.count).to eq(2) + expect(discussions.map(&:id)).to eq([active_diff_note1.discussion_id, active_diff_note3.discussion_id]) + expect(discussions.all?(&:active?)).to be true + + expect(discussions.first.notes).to eq([active_diff_note1, active_diff_note2]) + expect(discussions.last.notes).to eq([active_diff_note3]) + end + + it "doesn't include outdated discussions" do + expect(subject.values.map(&:id)).not_to include(outdated_diff_note1.discussion_id) + end + + it "groups the discussions by line code" do + expect(subject[active_diff_note1.line_code].id).to eq(active_diff_note1.discussion_id) + expect(subject[active_diff_note3.line_code].id).to eq(active_diff_note3.discussion_id) + end + end end diff --git a/spec/models/concerns/resolvable_note_spec.rb b/spec/models/concerns/resolvable_note_spec.rb index 3306b311e4a..a5a26958410 100644 --- a/spec/models/concerns/resolvable_note_spec.rb +++ b/spec/models/concerns/resolvable_note_spec.rb @@ -3,16 +3,37 @@ require 'spec_helper' describe Note, ResolvableNote, models: true do subject { create(:discussion_note_on_merge_request) } - describe '.resolvable' do - # TODO: Test - end + context 'resolvability scopes' do + let!(:note1) { create(:note) } + let!(:note2) { create(:diff_note_on_commit) } + let!(:note3) { create(:diff_note_on_merge_request, :resolved) } + let!(:note4) { create(:discussion_note_on_merge_request) } + let!(:note5) { create(:discussion_note_on_issue) } + let!(:note6) { create(:discussion_note_on_merge_request, :system) } + + describe '.potentially_resolvable' do + it 'includes diff and discussion notes on merge requests' do + expect(Note.potentially_resolvable).to match_array([note3, note4, note6]) + end + end - describe '.resolved' do - # TODO: Test - end + describe '.resolvable' do + it 'includes non-system diff and discussion notes on merge requests' do + expect(Note.resolvable).to match_array([note3, note4]) + end + end + + describe '.resolved' do + it 'includes resolved non-system diff and discussion notes on merge requests' do + expect(Note.resolved).to match_array([note3]) + end + end - describe '.unresolved' do - # TODO: Test + describe '.unresolved' do + it 'includes non-resolved non-system diff and discussion notes on merge requests' do + expect(Note.unresolved).to match_array([note4]) + end + end end describe ".resolve!" do @@ -55,7 +76,7 @@ describe Note, ResolvableNote, models: true do describe '#resolvable?' do context "when potentially resolvable" do before do - allow(subject).to receive(:discussion_resolvable?).and_return(true) + allow(subject).to receive(:potentially_resolvable?).and_return(true) end context "when a system note" do @@ -77,7 +98,7 @@ describe Note, ResolvableNote, models: true do context "when not potentially resolvable" do before do - allow(subject).to receive(:discussion_resolvable?).and_return(false) + allow(subject).to receive(:potentially_resolvable?).and_return(false) end it "returns false" do @@ -125,7 +146,37 @@ describe Note, ResolvableNote, models: true do end describe "#resolved?" do - # TODO: Test + let(:current_user) { create(:user) } + + context 'when not resolvable' do + before do + subject.resolve!(current_user) + + allow(subject).to receive(:resolvable?).and_return(false) + end + + it 'returns false' do + expect(subject.resolved?).to be_falsey + end + end + + context 'when resolvable' do + context 'when the note has been resolved' do + before do + subject.resolve!(current_user) + end + + it 'returns true' do + expect(subject.resolved?).to be_truthy + end + end + + context 'when the note has not been resolved' do + it 'returns false' do + expect(subject.resolved?).to be_falsey + end + end + end end describe "#resolve!" do |