BigW Consortium Gitlab

diff_discussion_spec.rb 3.38 KB
Newer Older
1 2
require 'spec_helper'

3
describe DiffDiscussion do
4
  include RepoHelpers
Douwe Maan committed
5

6 7
  subject { described_class.new([diff_note]) }

8
  let(:project) { create(:project, :repository) }
9 10
  let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
  let(:diff_note) { create(:diff_note_on_merge_request, noteable: merge_request, project: project) }
Douwe Maan committed
11

Douwe Maan committed
12 13 14
  describe '#reply_attributes' do
    it 'includes position and original_position' do
      attributes = subject.reply_attributes
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
      expect(attributes[:position]).to eq(diff_note.position.to_json)
      expect(attributes[:original_position]).to eq(diff_note.original_position.to_json)
    end
  end

  describe '#merge_request_version_params' do
    let(:merge_request) { create(:merge_request, source_project: project, target_project: project, importing: true) }
    let!(:merge_request_diff1) { merge_request.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') }
    let!(:merge_request_diff2) { merge_request.merge_request_diffs.create(head_commit_sha: nil) }
    let!(:merge_request_diff3) { merge_request.merge_request_diffs.create(head_commit_sha: '5937ac0a7beb003549fc5fd26fc247adbce4a52e') }

    context 'when the discussion is active' do
      it 'returns an empty hash, which will end up showing the latest version' do
        expect(subject.merge_request_version_params).to eq({})
      end
    end

    context 'when the discussion is on an older merge request version' do
      let(:position) do
        Gitlab::Diff::Position.new(
          old_path: ".gitmodules",
          new_path: ".gitmodules",
          old_line: nil,
          new_line: 4,
          diff_refs: merge_request_diff1.diff_refs
        )
      end

      let(:diff_note) { create(:diff_note_on_merge_request, noteable: merge_request, project: project, position: position) }

      before do
        diff_note.position = diff_note.original_position
        diff_note.save!
      end

      it 'returns the diff ID for the version to show' do
51
        expect(subject.merge_request_version_params).to eq(diff_id: merge_request_diff1.id)
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
      end
    end

    context 'when the discussion is on a comparison between merge request versions' do
      let(:position) do
        Gitlab::Diff::Position.new(
          old_path: ".gitmodules",
          new_path: ".gitmodules",
          old_line: 4,
          new_line: 4,
          diff_refs: merge_request_diff3.compare_with(merge_request_diff1.head_commit_sha).diff_refs
        )
      end

      let(:diff_note) { create(:diff_note_on_merge_request, noteable: merge_request, project: project, position: position) }

68 69 70 71 72
      before do
        diff_note.position = diff_note.original_position
        diff_note.save!
      end

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
      it 'returns the diff ID and start sha of the versions to compare' do
        expect(subject.merge_request_version_params).to eq(diff_id: merge_request_diff3.id, start_sha: merge_request_diff1.head_commit_sha)
      end
    end

    context 'when the discussion does not have a merge request version' do
      let(:diff_note) { create(:diff_note_on_merge_request, noteable: merge_request, project: project, diff_refs: project.commit(sample_commit.id).diff_refs) }

      before do
        diff_note.position = diff_note.original_position
        diff_note.save!
      end

      it 'returns nil' do
        expect(subject.merge_request_version_params).to be_nil
      end
Douwe Maan committed
89 90
    end
  end
91
end