← Back to Upcase

Timezones and DST with Rspec!


(nimashariatian) #1

Hi guys…
How do you prevent Time issues due to daylight savings in Rspec?
The time zone in the specs are UTC
But in our application controller I am setting the time zone to User’s timezone which could be EST like this:

Time.zone = current_user.preferences.timezone

These would be affected by daylight savings time and specs randomly fail for a week due to this issue.

Is there a better workaround than doing this:

it "resends the invitations" do
   Time.use_zone(user.preferences.timezone) do
       invitation = create :invitation, user: user.preferences
       now = Time.current
       Timecop.freeze(now) do
            post :invite, id: user.id
       end
       expect(invitation.reload.sent_at.to_i).to eq(now.to_i)
   end
end

The other solution that i could come up with was to mock the timezone like:

it "resends the invitations" do
   Time.use_zone(user.preferences.timezone) do
      allow(Time).to receive(:zone) { Time.zone }  #this would ensure all zones are UTC
       ....
   end
end

In my app I am doing time comparaison like:

  def can_reinvite?
    return true if sent_at.nil?
    self.sent_at < 1.week.ago
  end