summaryrefslogtreecommitdiff
path: root/spec/models/diff_viewer/server_side_spec.rb
blob: 27de0584b8a6141e47467e6cd263ca6ed7333376 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
51
52
53
54
55
56
57
# frozen_string_literal: true

require 'spec_helper'

describe DiffViewer::ServerSide do
  set(:project) { create(:project, :repository) }
  let(:commit) { project.commit_by(oid: '570e7b2abdd848b95f2f578043fc23bd6f6fd24d') }
  let!(:diff_file) { commit.diffs.diff_file_with_new_path('files/ruby/popen.rb') }

  let(:viewer_class) do
    Class.new(DiffViewer::Base) do
      include DiffViewer::ServerSide
    end
  end

  subject { viewer_class.new(diff_file) }

  describe '#prepare!' do
    it 'loads all diff file data' do
      expect(Blob).to receive(:lazy).at_least(:twice)

      subject.prepare!
    end
  end

  describe '#render_error' do
    context 'when the diff file is stored externally' do
      before do
        allow(diff_file).to receive(:stored_externally?).and_return(true)
      end

      it 'return :server_side_but_stored_externally' do
        expect(subject.render_error).to eq(:server_side_but_stored_externally)
      end
    end
  end

  describe '#render_error_reason' do
    context 'when the diff file is stored externally' do
      before do
        allow(diff_file).to receive(:stored_externally?).and_return(true)
      end

      it 'returns error message if stored in LFS' do
        allow(diff_file).to receive(:external_storage).and_return(:lfs)

        expect(subject.render_error_message).to include('it is stored in LFS')
      end

      it 'returns error message if stored externally' do
        allow(diff_file).to receive(:external_storage).and_return(:foo)

        expect(subject.render_error_message).to include('it is stored externally')
      end
    end
  end
end