71 lines
2.1 KiB
Ruby
71 lines
2.1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
describe Gitlab::Diff::HighlightCache do
|
||
|
let(:merge_request) { create(:merge_request_with_diffs) }
|
||
|
|
||
|
subject(:cache) { described_class.new(merge_request.diffs, backend: backend) }
|
||
|
|
||
|
describe '#decorate' do
|
||
|
let(:backend) { double('backend').as_null_object }
|
||
|
|
||
|
# Manually creates a Diff::File object to avoid triggering the cache on
|
||
|
# the FileCollection::MergeRequestDiff
|
||
|
let(:diff_file) do
|
||
|
diffs = merge_request.diffs
|
||
|
raw_diff = diffs.diffable.raw_diffs(diffs.diff_options.merge(paths: ['CHANGELOG'])).first
|
||
|
Gitlab::Diff::File.new(raw_diff,
|
||
|
repository: diffs.project.repository,
|
||
|
diff_refs: diffs.diff_refs,
|
||
|
fallback_diff_refs: diffs.fallback_diff_refs)
|
||
|
end
|
||
|
|
||
|
it 'does not calculate highlighting when reading from cache' do
|
||
|
cache.write_if_empty
|
||
|
cache.decorate(diff_file)
|
||
|
|
||
|
expect_any_instance_of(Gitlab::Diff::Highlight).not_to receive(:highlight)
|
||
|
|
||
|
diff_file.highlighted_diff_lines
|
||
|
end
|
||
|
|
||
|
it 'assigns highlighted diff lines to the DiffFile' do
|
||
|
cache.write_if_empty
|
||
|
cache.decorate(diff_file)
|
||
|
|
||
|
expect(diff_file.highlighted_diff_lines.size).to be > 5
|
||
|
end
|
||
|
|
||
|
it 'submits a single reading from the cache' do
|
||
|
cache.decorate(diff_file)
|
||
|
cache.decorate(diff_file)
|
||
|
|
||
|
expect(backend).to have_received(:read).with(cache.key).once
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#write_if_empty' do
|
||
|
let(:backend) { double('backend', read: {}).as_null_object }
|
||
|
|
||
|
it 'submits a single writing to the cache' do
|
||
|
cache.write_if_empty
|
||
|
cache.write_if_empty
|
||
|
|
||
|
expect(backend).to have_received(:write).with(cache.key,
|
||
|
hash_including('CHANGELOG-false-false-false'),
|
||
|
expires_in: 1.week).once
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#clear' do
|
||
|
let(:backend) { double('backend').as_null_object }
|
||
|
|
||
|
it 'clears cache' do
|
||
|
cache.clear
|
||
|
|
||
|
expect(backend).to have_received(:delete).with(cache.key)
|
||
|
end
|
||
|
end
|
||
|
end
|