← Back to Upcase

Timezones and DST with Rspec!

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