From 8c6d8c85dbf019db8ab9a7753c5e787d28076cf9 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Thu, 17 Nov 2016 09:44:00 +0800 Subject: [PATCH] Stop showing first notification prompt once user sees the notification. --- app/models/notification.rb | 2 -- app/models/user.rb | 18 +----------------- spec/models/user_spec.rb | 36 ++++-------------------------------- 3 files changed, 5 insertions(+), 51 deletions(-) diff --git a/app/models/notification.rb b/app/models/notification.rb index 9bfe5a0ef20..9d0814c8615 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -56,7 +56,6 @@ class Notification < ActiveRecord::Base .update_all("read = 't'") if count > 0 - user.mark_first_notification_read user.publish_notifications_state end @@ -69,7 +68,6 @@ class Notification < ActiveRecord::Base read: false).update_all(read: true) if count > 0 - user.mark_first_notification_read user.publish_notifications_state end end diff --git a/app/models/user.rb b/app/models/user.rb index 936833fe74d..62f7835a595 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -345,22 +345,6 @@ class User < ActiveRecord::Base TRACK_FIRST_NOTIFICATION_READ_DURATION = 1.week.to_i - def self.first_notification_read_key(user) - "#{user.id}:first-notification-read" - end - - def mark_first_notification_read - first_notification_read_key = User.first_notification_read_key(self) - - if !$redis.get(first_notification_read_key) - $redis.setex( - first_notification_read_key, - User::TRACK_FIRST_NOTIFICATION_READ_DURATION, - 1 - ) - end - end - def read_first_notification? if (trust_level > TrustLevel[0] || created_at < TRACK_FIRST_NOTIFICATION_READ_DURATION.seconds.ago) @@ -368,7 +352,7 @@ class User < ActiveRecord::Base return true end - !!$redis.get(self.class.first_notification_read_key(self)) + self.seen_notification_id == 0 ? false : true end def publish_notifications_state diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 86e1aa79c73..31dca6883f0 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1319,49 +1319,21 @@ describe User do describe '#read_first_notification?' do let(:user) { Fabricate(:user, trust_level: TrustLevel[0]) } - let(:post) { Fabricate(:post) } - let(:topic) { Fabricate(:topic, first_post: post) } + let(:notification) { Fabricate(:private_message_notification) } - let(:notification) do - Fabricate(:private_message_notification, - user: user, read: false, topic: topic, post_number: post.post_number - ) - end - - after do - $redis.del(User.first_notification_read_key(user)) - end - - describe 'when first notification has not been read' do + describe 'when first notification has not been seen' do it 'should return the right value' do expect(user.read_first_notification?).to eq(false) end end - describe 'when first notification has been read' do + describe 'when first notification has been seen' do it 'should return the right value' do - notification - Notification.read(user, [notification.id]) - + user.update_attributes!(seen_notification_id: notification.id) expect(user.reload.read_first_notification?).to eq(true) end end - describe 'when post has been read' do - it 'should return the right value' do - notification - Notification.mark_posts_read(user, notification.topic_id, [1]) - - expect(user.read_first_notification?).to eq(true) - end - end - - describe 'when user does not have any notifications' do - it 'should return the right value' do - expect(user.read_first_notification?).to eq(false) - end - end - describe 'when user is not trust level 0' do it 'should return the right value' do user.update_attributes!(trust_level: TrustLevel[1])