2019-03-30 03:23:56 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-06-06 17:28:06 -04:00
|
|
|
require 'spec_helper'
|
|
|
|
|
2020-06-24 14:09:03 -04:00
|
|
|
RSpec.describe DiffViewer::Base do
|
2017-06-06 17:28:06 -04:00
|
|
|
include FakeBlobHelpers
|
|
|
|
|
|
|
|
let(:project) { create(:project, :repository) }
|
|
|
|
let(:commit) { project.commit('570e7b2abdd848b95f2f578043fc23bd6f6fd24d') }
|
|
|
|
let(:diff_file) { commit.diffs.diff_file_with_new_path('files/ruby/popen.rb') }
|
|
|
|
|
|
|
|
let(:viewer_class) do
|
|
|
|
Class.new(described_class) do
|
|
|
|
include DiffViewer::ServerSide
|
|
|
|
|
|
|
|
self.extensions = %w(jpg)
|
|
|
|
self.binary = true
|
|
|
|
self.collapse_limit = 1.megabyte
|
|
|
|
self.size_limit = 5.megabytes
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:viewer) { viewer_class.new(diff_file) }
|
|
|
|
|
|
|
|
describe '.can_render?' do
|
|
|
|
context 'when the extension is supported' do
|
|
|
|
let(:commit) { project.commit('2f63565e7aac07bcdadb654e253078b727143ec4') }
|
|
|
|
let(:diff_file) { commit.diffs.diff_file_with_new_path('files/images/6049019_460s.jpg') }
|
|
|
|
|
|
|
|
context 'when the binaryness matches' do
|
|
|
|
it 'returns true' do
|
|
|
|
expect(viewer_class.can_render?(diff_file)).to be_truthy
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the binaryness does not match' do
|
2017-11-03 09:16:43 -04:00
|
|
|
let(:commit) { project.commit_by(oid: 'ae73cb07c9eeaf35924a10f713b364d32b2dd34f') }
|
|
|
|
let(:diff_file) { commit.diffs.diff_file_with_new_path('Gemfile.zip') }
|
2017-06-06 17:28:06 -04:00
|
|
|
|
|
|
|
it 'returns false' do
|
|
|
|
expect(viewer_class.can_render?(diff_file)).to be_falsey
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the extension and file type are not supported' do
|
|
|
|
it 'returns false' do
|
|
|
|
expect(viewer_class.can_render?(diff_file)).to be_falsey
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the file was renamed and only the old blob is supported' do
|
2017-11-03 09:16:43 -04:00
|
|
|
let(:commit) { project.commit_by(oid: '2f63565e7aac07bcdadb654e253078b727143ec4') }
|
2017-06-06 17:28:06 -04:00
|
|
|
let(:diff_file) { commit.diffs.diff_file_with_new_path('files/images/6049019_460s.jpg') }
|
|
|
|
|
|
|
|
before do
|
|
|
|
allow(diff_file).to receive(:renamed_file?).and_return(true)
|
2017-11-03 09:16:43 -04:00
|
|
|
viewer_class.extensions = %w(notjpg)
|
2017-06-06 17:28:06 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns false' do
|
|
|
|
expect(viewer_class.can_render?(diff_file)).to be_falsey
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#collapsed?' do
|
|
|
|
context 'when the combined blob size is larger than the collapse limit' do
|
|
|
|
before do
|
2017-11-03 09:16:43 -04:00
|
|
|
allow(diff_file).to receive(:raw_size).and_return(1025.kilobytes)
|
2017-06-06 17:28:06 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns true' do
|
|
|
|
expect(viewer.collapsed?).to be_truthy
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the combined blob size is smaller than the collapse limit' do
|
|
|
|
it 'returns false' do
|
|
|
|
expect(viewer.collapsed?).to be_falsey
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#too_large?' do
|
|
|
|
context 'when the combined blob size is larger than the size limit' do
|
|
|
|
before do
|
2017-11-03 09:16:43 -04:00
|
|
|
allow(diff_file).to receive(:raw_size).and_return(6.megabytes)
|
2017-06-06 17:28:06 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns true' do
|
|
|
|
expect(viewer.too_large?).to be_truthy
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the blob size is smaller than the size limit' do
|
|
|
|
it 'returns false' do
|
|
|
|
expect(viewer.too_large?).to be_falsey
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#render_error' do
|
|
|
|
context 'when the combined blob size is larger than the size limit' do
|
|
|
|
before do
|
2017-11-03 09:16:43 -04:00
|
|
|
allow(diff_file).to receive(:raw_size).and_return(6.megabytes)
|
2017-06-06 17:28:06 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns :too_large' do
|
|
|
|
expect(viewer.render_error).to eq(:too_large)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the combined blob size is smaller than the size limit' do
|
|
|
|
it 'returns nil' do
|
|
|
|
expect(viewer.render_error).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-12-13 12:49:05 -05:00
|
|
|
|
|
|
|
describe '#render_error_message' do
|
|
|
|
it 'returns nothing when no render_error' do
|
|
|
|
expect(viewer.render_error).to be_nil
|
|
|
|
expect(viewer.render_error_message).to be_nil
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when render_error error' do
|
|
|
|
before do
|
|
|
|
allow(viewer).to receive(:render_error).and_return(:too_large)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns an error message' do
|
|
|
|
expect(viewer.render_error_message).to include('it is too large')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'includes a "view the blob" link' do
|
|
|
|
expect(viewer.render_error_message).to include('view the blob')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2017-06-06 17:28:06 -04:00
|
|
|
end
|