summaryrefslogtreecommitdiff
path: root/spec/models/concerns
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2017-03-17 13:25:52 -0600
committerLuke "Jared" Bennett <lbennett@gitlab.com>2017-04-05 17:44:14 +0100
commit79889a6aa3dc878d196d0f2f445ab6b10ef10c74 (patch)
tree25367a69b4a529335e106d0d65c2d9a38e97f092 /spec/models/concerns
parent80b2e18fb62b8da7410f90b3e5340b9e63e765a3 (diff)
downloadgitlab-ce-79889a6aa3dc878d196d0f2f445ab6b10ef10c74.tar.gz
Add specs
Diffstat (limited to 'spec/models/concerns')
-rw-r--r--spec/models/concerns/noteable_spec.rb84
-rw-r--r--spec/models/concerns/resolvable_note_spec.rb73
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