Files
nairobi/spec/models/direct_message_spec.rb
Javi Martín c574a4d93a Fix DirectMessage.today on different time zones
The dates are saved on UTC times on the database. So, for example,
if living in West Australia, `Date.current.beginning_of_day` will be
stored as UTC's yesterday at 15:15:00, while `Date.current.end_of_day`
will be stored as UTC's today at 15:14:59.

When we use the `DATE` database function, PostgreSQL will select the
records with the same UTC date as the current UTC date. However, we need
the records with the same application date (as defined in
`config.time_zone`) as the current application date. The test passed
(for us) because we were using `beginning_of_day + 3.hours` to make sure
we were creating records when the date in Madrid was the same as the UTC
date.

Using a ruby interval for the time condition solves the problem.
2019-08-28 20:32:40 +02:00

98 lines
2.6 KiB
Ruby

require "rails_helper"
describe DirectMessage do
let(:direct_message) { build(:direct_message) }
it "is valid" do
expect(direct_message).to be_valid
end
it "is not valid without a title" do
direct_message.title = nil
expect(direct_message).not_to be_valid
end
it "is not valid without a body" do
direct_message.body = nil
expect(direct_message).not_to be_valid
end
it "is not valid without an associated sender" do
direct_message.sender = nil
expect(direct_message).not_to be_valid
end
it "is not valid without an associated receiver" do
direct_message.receiver = nil
expect(direct_message).not_to be_valid
end
describe "maximum number of direct messages per day" do
context "when set" do
before do
Setting[:direct_message_max_per_day] = 3
end
it "is not valid if above maximum" do
sender = create(:user)
direct_message1 = create(:direct_message, sender: sender)
direct_message2 = create(:direct_message, sender: sender)
direct_message3 = create(:direct_message, sender: sender)
direct_message4 = build(:direct_message, sender: sender)
expect(direct_message4).not_to be_valid
end
it "is valid if below maximum" do
sender = create(:user)
direct_message1 = create(:direct_message, sender: sender)
direct_message2 = create(:direct_message, sender: sender)
direct_message3 = build(:direct_message)
expect(direct_message).to be_valid
end
it "is valid if no direct_messages sent" do
direct_message = build(:direct_message)
expect(direct_message).to be_valid
end
end
context "when unset" do
before do
Setting[:direct_message_max_per_day] = nil
end
it "is valid" do
direct_message = build(:direct_message)
expect(direct_message).to be_valid
end
end
end
describe "scopes" do
describe "today", :with_non_utc_time_zone do
it "returns direct messages created today" do
create(:direct_message, created_at: Date.current.beginning_of_day)
create(:direct_message, created_at: Time.current)
create(:direct_message, created_at: Date.current.end_of_day)
expect(described_class.today.count).to eq 3
end
it "does not return direct messages created another day" do
direct_message1 = create(:direct_message, created_at: 1.day.ago)
direct_message2 = create(:direct_message, created_at: 1.day.from_now)
expect(described_class.today.count).to eq 0
end
end
end
end