spec/lib/gdk/reminder_helper_spec.rb (51 lines of code) (raw):
# frozen_string_literal: true
RSpec.describe GDK::ReminderHelper do
let(:reminder_type) { 'test' }
let(:fake_cache_dir) { Pathname.new('/fake/cache') }
let(:reminder_cache_path) { fake_cache_dir.join(GDK::ReminderHelper::REMINDER_DIR_NAME, reminder_type) }
let!(:now) { DateTime.parse('2025-03-25T19:00:00+00:00').to_time }
subject { described_class }
before do
allow(GDK.config).to receive(:__cache_dir).and_return(fake_cache_dir)
allow(FileUtils).to receive(:mkdir_p)
allow(Time).to receive(:now).and_return(now)
end
shared_context 'with existing reminder cache path' do |days_ago|
let(:last_run_time) { (now - (days_ago * 24 * 60 * 60)).iso8601 }
before do
allow(File).to receive(:exist?).with(reminder_cache_path).and_return(true)
allow(File).to receive(:read).with(reminder_cache_path).and_return(last_run_time)
end
end
describe '.should_run_reminder?' do
it 'creates the reminder directory if it does not exist' do
expect(FileUtils).to receive(:mkdir_p).with(fake_cache_dir.join(GDK::ReminderHelper::REMINDER_DIR_NAME))
subject.should_run_reminder?(reminder_type)
end
context 'when reminder has never run' do
before do
allow(File).to receive(:exist?).with(reminder_cache_path).and_return(false)
end
it 'returns true and the cache path' do
expect(subject.should_run_reminder?(reminder_type)).to be(true)
end
end
context 'when last run was within the default interval (5 days)' do
include_context 'with existing reminder cache path', 2
it 'returns false' do
expect(subject.should_run_reminder?(reminder_type)).to be(false)
end
end
context 'when last run was longer than the default interval (5 days)' do
include_context 'with existing reminder cache path', 10
it 'returns true' do
expect(subject.should_run_reminder?(reminder_type)).to be(true)
end
end
end
describe '.update_reminder_timestamp!' do
it 'writes current timestamp to reminder file' do
expect(File).to receive(:write).with(reminder_cache_path, now.iso8601)
subject.update_reminder_timestamp!(reminder_type)
end
end
end