Ensure inbox caching timestamp gets updated when answering questions and returning to inbox

This commit is contained in:
Karina Kwiatek 2023-08-16 21:57:31 +02:00
parent eed4ed5d4b
commit 54ac832c91
2 changed files with 11 additions and 0 deletions

View File

@ -20,6 +20,7 @@ class Answer < ApplicationRecord
after_create do after_create do
Inbox.where(user: self.user, question: self.question).destroy_all Inbox.where(user: self.user, question: self.question).destroy_all
user.touch :inbox_updated_at # rubocop:disable Rails/SkipsModelValidations
Notification.notify self.question.user, self unless self.question.user == self.user or self.question.user.nil? Notification.notify self.question.user, self unless self.question.user == self.user or self.question.user.nil?
Subscription.subscribe self.user, self Subscription.subscribe self.user, self

View File

@ -4,6 +4,8 @@
require "rails_helper" require "rails_helper"
describe Ajax::AnswerController, :ajax_controller, type: :controller do describe Ajax::AnswerController, :ajax_controller, type: :controller do
include ActiveSupport::Testing::TimeHelpers
let(:question) { FactoryBot.create(:question, user: FactoryBot.build(:user, privacy_allow_stranger_answers: asker_allows_strangers)) } let(:question) { FactoryBot.create(:question, user: FactoryBot.build(:user, privacy_allow_stranger_answers: asker_allows_strangers)) }
let(:asker_allows_strangers) { true } let(:asker_allows_strangers) { true }
@ -327,6 +329,14 @@ describe Ajax::AnswerController, :ajax_controller, type: :controller do
user.save user.save
expect { subject }.to(change { Inbox.where(question_id: answer.question.id, user_id: user.id).count }.by(1)) expect { subject }.to(change { Inbox.where(question_id: answer.question.id, user_id: user.id).count }.by(1))
end end
it "updates the inbox caching timestamp for the user who answered" do
initial_timestamp = 1.day.ago
answer.user.update(inbox_updated_at: initial_timestamp)
freeze_time do
expect { subject }.to(change { answer.user.reload.inbox_updated_at }.from(initial_timestamp).to(DateTime.now))
end
end
end end
context "when the answer exists and was not made by the current user" do context "when the answer exists and was not made by the current user" do