From 049bc33838e057a5264631bf49bbe459309dba58 Mon Sep 17 00:00:00 2001 From: Bianca Nenciu <nbianca@users.noreply.github.com> Date: Wed, 8 Dec 2021 14:40:35 +0200 Subject: [PATCH] FIX: Update has_topic_draft when draft is updated (#15219) Current user state regarding the new topic draft was not updated when the draft was created or destroyed. --- app/models/user_stat.rb | 9 ++++++--- spec/models/draft_spec.rb | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/models/user_stat.rb b/app/models/user_stat.rb index 8fad8fcfb3a..63bac29ec34 100644 --- a/app/models/user_stat.rb +++ b/app/models/user_stat.rb @@ -207,16 +207,19 @@ class UserStat < ActiveRecord::Base def self.update_draft_count(user_id = nil) if user_id.present? - draft_count = DB.query_single <<~SQL, user_id: user_id + draft_count, has_topic_draft = DB.query_single <<~SQL, user_id: user_id, new_topic: Draft::NEW_TOPIC UPDATE user_stats SET draft_count = (SELECT COUNT(*) FROM drafts WHERE user_id = :user_id) WHERE user_id = :user_id - RETURNING draft_count + RETURNING draft_count, (SELECT 1 FROM drafts WHERE draft_key = :new_topic) SQL MessageBus.publish( '/user', - { draft_count: draft_count.first }, + { + draft_count: draft_count, + has_topic_draft: !!has_topic_draft + }, user_ids: [user_id] ) else diff --git a/spec/models/draft_spec.rb b/spec/models/draft_spec.rb index 0e4dc72bf52..4dd9de5fe7d 100644 --- a/spec/models/draft_spec.rb +++ b/spec/models/draft_spec.rb @@ -180,16 +180,18 @@ describe Draft do it 'updates draft count when a draft is created or destroyed' do messages = MessageBus.track_publish("/user") do - Draft.set(user, "test", 0, "data") + Draft.set(user, Draft::NEW_TOPIC, 0, "data") end expect(messages.first.data[:draft_count]).to eq(1) + expect(messages.first.data[:has_topic_draft]).to eq(true) messages = MessageBus.track_publish("/user") do Draft.where(user: user).destroy_all end expect(messages.first.data[:draft_count]).to eq(0) + expect(messages.first.data[:has_topic_draft]).to eq(false) end describe '#stream' do