Add RSpec metadata tags for time traveling around specs

This commit is contained in:
Dallas Reedy 2021-11-03 10:32:10 +00:00 committed by David Fernandez
parent 0634b22222
commit 032ebec002
6 changed files with 69 additions and 23 deletions

View file

@ -2,7 +2,7 @@
require 'spec_helper'
RSpec.describe Resolvers::DoraMetricsResolver do
RSpec.describe Resolvers::DoraMetricsResolver, time_travel_to: '2021-05-01' do
include GraphqlHelpers
let_it_be(:guest) { create(:user) }
@ -15,12 +15,6 @@
let(:current_user) { reporter }
let(:args) { { metric: 'deployment_frequency' } }
around do |example|
travel_to '2021-05-01'.to_time do
example.run
end
end
before_all do
group.add_guest(guest)
group.add_reporter(reporter)

View file

@ -3,9 +3,8 @@
require 'spec_helper'
RSpec.describe TrialStatusWidgetHelper, :saas do
describe 'data attributes for mounting Vue components' do
describe 'data attributes for mounting Vue components', :freeze_time do
let(:trial_length) { 30 } # days
let(:today_for_specs) { Date.parse('2021-01-15') }
let(:trial_days_remaining) { 18 }
let(:trial_end_date) { Date.current.advance(days: trial_days_remaining) }
let(:trial_start_date) { Date.current.advance(days: trial_days_remaining - trial_length) }
@ -23,7 +22,6 @@
end
before do
travel_to today_for_specs
build(:gitlab_subscription, :active_trial,
namespace: group,
trial_starts_on: trial_start_date,
@ -37,10 +35,6 @@
end
end
after do
travel_back
end
describe '#trial_status_popover_data_attrs' do
using RSpec::Parameterized::TableSyntax

View file

@ -41,10 +41,8 @@
params[:created_before] = nil
end
it 'is valid' do
travel_to '2019-03-01' do
expect(subject).to be_valid
end
it 'is valid', time_travel_to: '2019-03-01' do
expect(subject).to be_valid
end
end

View file

@ -9,11 +9,9 @@
let_it_be(plan) { create(plan) }
end
describe 'default values' do
it do
travel_to(Date.today + 30) do
expect(subject.start_date).to eq(Date.today)
end
describe 'default values', time_travel: 30.days do
specify do
expect(subject.start_date).to eq(Date.today)
end
end

View file

@ -0,0 +1,29 @@
# frozen_string_literal: true
require 'active_support/testing/time_helpers'
RSpec.configure do |config|
config.include ActiveSupport::Testing::TimeHelpers
config.around(:example, :freeze_time) do |example|
freeze_time { example.run }
end
config.around(:example, :time_travel) do |example|
duration = example.metadata[:time_travel]
raise 'The time_travel RSpec metadata must have an ActiveSupport::Duration value (such as `30.days`).' unless duration.is_a?(ActiveSupport::Duration)
travel(duration) { example.run }
end
config.around(:example, :time_travel_to) do |example|
date_or_time = example.metadata[:time_travel_to]
unless date_or_time.respond_to?(:to_time) && date_or_time.to_time.present?
raise 'The time_travel_to RSpec metadata must have a Date or Time value.'
end
travel_to(date_or_time) { example.run }
end
end

View file

@ -0,0 +1,33 @@
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'time travel' do
describe ':freeze_time' do
it 'freezes time around a spec example', :freeze_time do
expect { sleep 0.1 }.not_to change { Time.now.to_f }
end
end
describe ':time_travel' do
today = Date.current
it 'time-travels by the given duration', time_travel: 3.days do
expect(Date.current).to eq(today + 3.days)
end
it 'works with negative durations', time_travel: -5.days do
expect(Date.current).to eq(today - 5.days)
end
end
describe ':time_travel_to' do
it 'time-travels to the specified date', time_travel_to: '2020-01-01' do
expect(Date.current).to eq(Date.new(2020, 1, 1))
end
it 'time-travels to the specified date & time', time_travel_to: '2020-02-02 10:30:45 -0700' do
expect(Time.current).to eq(Time.new(2020, 2, 2, 17, 30, 45, '+00:00'))
end
end
end