# frozen_string_literal: true require 'spec_helper' RSpec.describe ExpireJobCacheWorker do let_it_be(:pipeline) { create(:ci_empty_pipeline) } let(:project) { pipeline.project } describe '#perform' do context 'with a job in the pipeline' do let(:job) { create(:ci_build, pipeline: pipeline) } let(:job_args) { job.id } include_examples 'an idempotent worker' do it 'invalidates Etag caching for the job path' do job_path = "/#{project.full_path}/builds/#{job.id}.json" spy_store = Gitlab::EtagCaching::Store.new allow(Gitlab::EtagCaching::Store).to receive(:new) { spy_store } expect(spy_store).to receive(:touch) .exactly(worker_exec_times).times .with(job_path) .and_call_original expect(ExpirePipelineCacheWorker).to receive(:perform_async) .with(pipeline.id) .exactly(worker_exec_times).times subject end end end context 'when there is no job in the pipeline' do it 'does not change the etag store' do expect(Gitlab::EtagCaching::Store).not_to receive(:new) perform_multiple(non_existing_record_id) end end end end