BigW Consortium Gitlab

sent_notification_spec.rb 5.81 KB
Newer Older
1 2 3
require 'spec_helper'

describe SentNotification, model: true do
Douwe Maan committed
4 5 6
  describe 'validation' do
    describe 'note validity' do
      context "when the project doesn't match the noteable's project" do
Douwe Maan committed
7
        subject { build(:sent_notification, noteable: create(:issue)) }
Douwe Maan committed
8 9 10 11 12 13 14

        it "is invalid" do
          expect(subject).not_to be_valid
        end
      end

      context "when the project doesn't match the discussion project" do
15
        let(:discussion_id) { create(:note).discussion_id }
Douwe Maan committed
16 17 18 19 20 21 22 23 24 25
        subject { build(:sent_notification, in_reply_to_discussion_id: discussion_id) }

        it "is invalid" do
          expect(subject).not_to be_valid
        end
      end

      context "when the noteable project and discussion project match" do
        let(:project) { create(:project) }
        let(:issue) { create(:issue, project: project) }
26
        let(:discussion_id) { create(:note, project: project, noteable: issue).discussion_id }
Douwe Maan committed
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
        subject { build(:sent_notification, project: project, noteable: issue, in_reply_to_discussion_id: discussion_id) }

        it "is valid" do
          expect(subject).to be_valid
        end
      end
    end
  end

  describe '.record' do
    let(:user) { create(:user) }
    let(:issue) { create(:issue) }

    it 'creates a new SentNotification' do
      expect { described_class.record(issue, user.id) }.to change { SentNotification.count }.by(1)
    end
  end

  describe '.record_note' do
    let(:user) { create(:user) }
    let(:note) { create(:diff_note_on_merge_request) }

    it 'creates a new SentNotification' do
      expect { described_class.record_note(note, user.id) }.to change { SentNotification.count }.by(1)
    end
  end

  describe '#create_reply' do
    context 'for issue' do
      let(:issue) { create(:issue) }
      subject { described_class.record(issue, issue.author.id) }

      it 'creates a comment on the issue' do
        note = subject.create_reply('Test')
        expect(note.in_reply_to?(issue)).to be_truthy
      end
    end

    context 'for issue comment' do
      let(:note) { create(:note_on_issue) }
      subject { described_class.record_note(note, note.author.id) }

      it 'creates a comment on the issue' do
        new_note = subject.create_reply('Test')
        expect(new_note.in_reply_to?(note)).to be_truthy
72
        expect(new_note.discussion_id).not_to eq(note.discussion_id)
Douwe Maan committed
73 74 75 76 77 78 79 80 81 82
      end
    end

    context 'for issue discussion' do
      let(:note) { create(:discussion_note_on_issue) }
      subject { described_class.record_note(note, note.author.id) }

      it 'creates a reply on the discussion' do
        new_note = subject.create_reply('Test')
        expect(new_note.in_reply_to?(note)).to be_truthy
83
        expect(new_note.discussion_id).to eq(note.discussion_id)
Douwe Maan committed
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
      end
    end

    context 'for merge request' do
      let(:merge_request) { create(:merge_request) }
      subject { described_class.record(merge_request, merge_request.author.id) }

      it 'creates a comment on the merge_request' do
        note = subject.create_reply('Test')
        expect(note.in_reply_to?(merge_request)).to be_truthy
      end
    end

    context 'for merge request comment' do
      let(:note) { create(:note_on_merge_request) }
      subject { described_class.record_note(note, note.author.id) }

      it 'creates a comment on the merge request' do
        new_note = subject.create_reply('Test')
        expect(new_note.in_reply_to?(note)).to be_truthy
104
        expect(new_note.discussion_id).not_to eq(note.discussion_id)
Douwe Maan committed
105 106 107 108 109 110 111 112 113 114
      end
    end

    context 'for merge request diff discussion' do
      let(:note) { create(:diff_note_on_merge_request) }
      subject { described_class.record_note(note, note.author.id) }

      it 'creates a reply on the discussion' do
        new_note = subject.create_reply('Test')
        expect(new_note.in_reply_to?(note)).to be_truthy
115
        expect(new_note.discussion_id).to eq(note.discussion_id)
Douwe Maan committed
116 117 118 119 120 121 122 123 124 125
      end
    end

    context 'for merge request non-diff discussion' do
      let(:note) { create(:discussion_note_on_merge_request) }
      subject { described_class.record_note(note, note.author.id) }

      it 'creates a reply on the discussion' do
        new_note = subject.create_reply('Test')
        expect(new_note.in_reply_to?(note)).to be_truthy
126
        expect(new_note.discussion_id).to eq(note.discussion_id)
Douwe Maan committed
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
      end
    end

    context 'for commit' do
      let(:project) { create(:project) }
      let(:commit) { project.commit }
      subject { described_class.record(commit, project.creator.id) }

      it 'creates a comment on the commit' do
        note = subject.create_reply('Test')
        expect(note.in_reply_to?(commit)).to be_truthy
      end
    end

    context 'for commit comment' do
      let(:note) { create(:note_on_commit) }
      subject { described_class.record_note(note, note.author.id) }

      it 'creates a comment on the commit' do
        new_note = subject.create_reply('Test')
        expect(new_note.in_reply_to?(note)).to be_truthy
148
        expect(new_note.discussion_id).not_to eq(note.discussion_id)
Douwe Maan committed
149 150 151 152 153 154 155 156 157 158
      end
    end

    context 'for commit diff discussion' do
      let(:note) { create(:diff_note_on_commit) }
      subject { described_class.record_note(note, note.author.id) }

      it 'creates a reply on the discussion' do
        new_note = subject.create_reply('Test')
        expect(new_note.in_reply_to?(note)).to be_truthy
159
        expect(new_note.discussion_id).to eq(note.discussion_id)
Douwe Maan committed
160 161 162 163 164 165 166 167 168 169
      end
    end

    context 'for commit non-diff discussion' do
      let(:note) { create(:discussion_note_on_commit) }
      subject { described_class.record_note(note, note.author.id) }

      it 'creates a reply on the discussion' do
        new_note = subject.create_reply('Test')
        expect(new_note.in_reply_to?(note)).to be_truthy
170
        expect(new_note.discussion_id).to eq(note.discussion_id)
Douwe Maan committed
171 172 173
      end
    end
  end
174
end