85 lines
2.0 KiB
Ruby
85 lines
2.0 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
RSpec.describe Gitlab::EtagCaching::Store, :clean_gitlab_redis_shared_state do
|
||
|
let(:store) { described_class.new }
|
||
|
|
||
|
describe '#get' do
|
||
|
subject { store.get(key) }
|
||
|
|
||
|
context 'with invalid keys' do
|
||
|
let(:key) { 'a' }
|
||
|
|
||
|
it 'raises errors' do
|
||
|
expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception).and_call_original
|
||
|
|
||
|
expect { subject }.to raise_error Gitlab::EtagCaching::Store::InvalidKeyError
|
||
|
end
|
||
|
|
||
|
it 'does not raise errors in production' do
|
||
|
expect(store).to receive(:skip_validation?).and_return true
|
||
|
expect(Gitlab::ErrorTracking).not_to receive(:track_and_raise_for_dev_exception)
|
||
|
|
||
|
subject
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'with GraphQL keys' do
|
||
|
let(:key) { '/api/graphql:pipelines/id/5' }
|
||
|
|
||
|
it 'returns a stored value' do
|
||
|
etag = store.touch(key)
|
||
|
|
||
|
is_expected.to eq(etag)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'with RESTful keys' do
|
||
|
let(:key) { '/my-group/my-project/builds/234.json' }
|
||
|
|
||
|
it 'returns a stored value' do
|
||
|
etag = store.touch(key)
|
||
|
|
||
|
is_expected.to eq(etag)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#touch' do
|
||
|
subject { store.touch(key) }
|
||
|
|
||
|
context 'with invalid keys' do
|
||
|
let(:key) { 'a' }
|
||
|
|
||
|
it 'raises errors' do
|
||
|
expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception).and_call_original
|
||
|
|
||
|
expect { subject }.to raise_error Gitlab::EtagCaching::Store::InvalidKeyError
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'with GraphQL keys' do
|
||
|
let(:key) { '/api/graphql:pipelines/id/5' }
|
||
|
|
||
|
it 'stores and returns a value' do
|
||
|
etag = store.touch(key)
|
||
|
|
||
|
expect(etag).to be_present
|
||
|
expect(store.get(key)).to eq(etag)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'with RESTful keys' do
|
||
|
let(:key) { '/my-group/my-project/builds/234.json' }
|
||
|
|
||
|
it 'stores and returns a value' do
|
||
|
etag = store.touch(key)
|
||
|
|
||
|
expect(etag).to be_present
|
||
|
expect(store.get(key)).to eq(etag)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|