describe Dossier do include ActiveJob::TestHelper before { Timecop.freeze(Time.zone.now) } after { Timecop.return } let(:archive) { create(:archive) } describe 'scopes' do describe 'staled' do let(:recent_archive) { create(:archive) } let(:staled_archive) { create(:archive, updated_at: (Archive::RETENTION_DURATION + 2).days.ago) } subject do archive; recent_archive; staled_archive Archive.stale end it { is_expected.to match_array([staled_archive]) } end end describe '.status' do it { expect(archive.status).to eq('pending') } end describe '#make_available!' do before { archive.make_available! } it { expect(archive.status).to eq('generated') } end describe '#available?' do subject { archive.available? } context 'without attachment' do let(:archive) { create(:archive, file: nil) } it { is_expected.to eq(false) } end context 'with an attachment' do context 'when the attachment was created but the process was not over' do let(:archive) { create(:archive, :pending, file: Rack::Test::UploadedFile.new('spec/fixtures/files/file.pdf', 'application/pdf')) } it { is_expected.to eq(false) } end context 'when the attachment was created but the process was not over' do let(:archive) { create(:archive, :generated, file: Rack::Test::UploadedFile.new('spec/fixtures/files/file.pdf', 'application/pdf')) } it { is_expected.to eq(true) } end end end end