DEV: Fix flaky specs due to 8226ab1099
. (#15060)
The users all shared the same `User#last_seen_at` column so depending on
how the database returned the records, the user that we're interested in
may be excluded from the update query.
Follow-up to 8226ab1099
This commit is contained in:
parent
adf6498fe2
commit
c0f278d358
|
@ -90,11 +90,9 @@ describe UserStat do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'updates first unread pm timestamp correctly' do
|
it 'updates first unread pm timestamp correctly' do
|
||||||
freeze_time
|
user = Fabricate(:user, last_seen_at: Time.zone.now)
|
||||||
|
user_2 = Fabricate(:user, last_seen_at: Time.zone.now)
|
||||||
pm_topic = Fabricate(:private_message_topic)
|
pm_topic = Fabricate(:private_message_topic, user: user, recipient: user_2)
|
||||||
user = pm_topic.user
|
|
||||||
user.update!(last_seen_at: Time.zone.now)
|
|
||||||
create_post(user: user, topic_id: pm_topic.id)
|
create_post(user: user, topic_id: pm_topic.id)
|
||||||
|
|
||||||
TopicUser.change(user.id, pm_topic.id,
|
TopicUser.change(user.id, pm_topic.id,
|
||||||
|
@ -102,9 +100,6 @@ describe UserStat do
|
||||||
)
|
)
|
||||||
|
|
||||||
# user that is not tracking PM topic
|
# user that is not tracking PM topic
|
||||||
user_2 = Fabricate(:user, last_seen_at: Time.zone.now)
|
|
||||||
pm_topic.allowed_users << user_2
|
|
||||||
|
|
||||||
TopicUser.change(user_2.id, pm_topic.id,
|
TopicUser.change(user_2.id, pm_topic.id,
|
||||||
notification_level: TopicUser.notification_levels[:regular]
|
notification_level: TopicUser.notification_levels[:regular]
|
||||||
)
|
)
|
||||||
|
@ -124,9 +119,9 @@ describe UserStat do
|
||||||
user_4_orig_first_unread_pm_at = user_4.user_stat.first_unread_pm_at
|
user_4_orig_first_unread_pm_at = user_4.user_stat.first_unread_pm_at
|
||||||
|
|
||||||
# User for another PM topic
|
# User for another PM topic
|
||||||
pm_topic_2 = Fabricate(:private_message_topic)
|
user_5 = Fabricate(:user, last_seen_at: Time.zone.now)
|
||||||
user_5 = pm_topic_2.user
|
user_6 = Fabricate(:user, last_seen_at: 10.minutes.ago)
|
||||||
user_5.update!(last_seen_at: Time.zone.now)
|
pm_topic_2 = Fabricate(:private_message_topic, user: user_5, recipient: user_6)
|
||||||
create_post(user: user_5, topic_id: pm_topic_2.id)
|
create_post(user: user_5, topic_id: pm_topic_2.id)
|
||||||
|
|
||||||
TopicUser.change(user_5.id, pm_topic_2.id,
|
TopicUser.change(user_5.id, pm_topic_2.id,
|
||||||
|
@ -134,30 +129,27 @@ describe UserStat do
|
||||||
)
|
)
|
||||||
|
|
||||||
# User out of last seen limit
|
# User out of last seen limit
|
||||||
user_6 = Fabricate(:user, last_seen_at: Time.zone.now)
|
TopicUser.change(user_6.id, pm_topic_2.id,
|
||||||
pm_topic.allowed_users << user_6
|
|
||||||
create_post(user: user_6, topic_id: pm_topic.id)
|
|
||||||
|
|
||||||
TopicUser.change(user_6.id, pm_topic.id,
|
|
||||||
notification_level: TopicUser.notification_levels[:tracking]
|
notification_level: TopicUser.notification_levels[:tracking]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
create_post(user: user_6, topic_id: pm_topic_2.id)
|
||||||
user_6_orig_first_unread_pm_at = user_6.user_stat.first_unread_pm_at
|
user_6_orig_first_unread_pm_at = user_6.user_stat.first_unread_pm_at
|
||||||
|
|
||||||
admin = Fabricate(:admin)
|
create_post(user: user_2, topic_id: pm_topic.id)
|
||||||
create_post(user: admin, topic_id: pm_topic.id)
|
create_post(user: user_6, topic_id: pm_topic_2.id)
|
||||||
create_post(user: admin, topic_id: pm_topic_2.id)
|
|
||||||
pm_topic.update!(updated_at: 10.minutes.from_now)
|
pm_topic.update!(updated_at: 10.minutes.from_now)
|
||||||
pm_topic_2.update!(updated_at: 20.minutes.from_now)
|
pm_topic_2.update!(updated_at: 20.minutes.from_now)
|
||||||
|
|
||||||
stub_const(UserStat, "UPDATE_UNREAD_USERS_LIMIT", 4) do
|
stub_const(UserStat, "UPDATE_UNREAD_USERS_LIMIT", 4) do
|
||||||
UserStat.ensure_consistency!
|
UserStat.ensure_consistency!(1.hour.ago)
|
||||||
end
|
end
|
||||||
|
|
||||||
expect(user.user_stat.reload.first_unread_pm_at).to eq_time(pm_topic.reload.updated_at)
|
# User affected
|
||||||
expect(user_2.user_stat.reload.first_unread_pm_at).to eq_time(UserStat::UPDATE_UNREAD_MINUTES_AGO.minutes.ago)
|
expect(user.user_stat.reload.first_unread_pm_at).to be_within(1.seconds).of(pm_topic.reload.updated_at)
|
||||||
|
expect(user_2.user_stat.reload.first_unread_pm_at).to be_within(1.seconds).of(UserStat::UPDATE_UNREAD_MINUTES_AGO.minutes.ago)
|
||||||
expect(user_3.user_stat.reload.first_unread_pm_at).to eq_time(user_3_orig_first_unread_pm_at)
|
expect(user_3.user_stat.reload.first_unread_pm_at).to eq_time(user_3_orig_first_unread_pm_at)
|
||||||
expect(user_4.user_stat.reload.first_unread_pm_at).to eq_time(UserStat::UPDATE_UNREAD_MINUTES_AGO.minutes.ago)
|
expect(user_4.user_stat.reload.first_unread_pm_at).to be_within(1.seconds).of(UserStat::UPDATE_UNREAD_MINUTES_AGO.minutes.ago)
|
||||||
expect(user_5.user_stat.reload.first_unread_pm_at).to eq_time(pm_topic_2.reload.updated_at)
|
expect(user_5.user_stat.reload.first_unread_pm_at).to eq_time(pm_topic_2.reload.updated_at)
|
||||||
expect(user_6.user_stat.reload.first_unread_pm_at).to eq_time(user_6_orig_first_unread_pm_at)
|
expect(user_6.user_stat.reload.first_unread_pm_at).to eq_time(user_6_orig_first_unread_pm_at)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue