From 8e6988163f7a1defb86dd24868cdc419c7a3482c Mon Sep 17 00:00:00 2001 From: Osama Sayegh Date: Wed, 29 Dec 2021 01:19:39 +0300 Subject: [PATCH] FIX: Don't allow NULL values for `notification_level` in `category_users` (#15407) --- app/models/category_user.rb | 2 +- ..._not_null_notification_level_in_category_users.rb | 10 ++++++++++ spec/jobs/export_user_archive_spec.rb | 4 ++-- spec/models/topic_list_spec.rb | 6 +++++- spec/models/topic_tracking_state_spec.rb | 12 ------------ 5 files changed, 18 insertions(+), 16 deletions(-) create mode 100644 db/migrate/20211224111749_not_null_notification_level_in_category_users.rb diff --git a/app/models/category_user.rb b/app/models/category_user.rb index 84d3744db08..4f8cfb10be6 100644 --- a/app/models/category_user.rb +++ b/app/models/category_user.rb @@ -243,7 +243,7 @@ end # id :integer not null, primary key # category_id :integer not null # user_id :integer not null -# notification_level :integer +# notification_level :integer not null # last_seen_at :datetime # # Indexes diff --git a/db/migrate/20211224111749_not_null_notification_level_in_category_users.rb b/db/migrate/20211224111749_not_null_notification_level_in_category_users.rb new file mode 100644 index 00000000000..8638bb447b1 --- /dev/null +++ b/db/migrate/20211224111749_not_null_notification_level_in_category_users.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class NotNullNotificationLevelInCategoryUsers < ActiveRecord::Migration[6.1] + def change + up_only do + execute("DELETE FROM category_users WHERE notification_level IS NULL") + end + change_column_null :category_users, :notification_level, false + end +end diff --git a/spec/jobs/export_user_archive_spec.rb b/spec/jobs/export_user_archive_spec.rb index c82393e26e5..b1cd6ebc8c2 100644 --- a/spec/jobs/export_user_archive_spec.rb +++ b/spec/jobs/export_user_archive_spec.rb @@ -331,7 +331,7 @@ describe Jobs::ExportUserArchive do .category_users .where(category_id: category_id) .first_or_initialize - .update!(last_seen_at: reset_at) + .update!(last_seen_at: reset_at, notification_level: NotificationLevels.all[:regular]) end # Set Watching First Post on announcements, Tracking on subcategory, Muted on deleted, nothing on subsubcategory @@ -355,7 +355,7 @@ describe Jobs::ExportUserArchive do expect(data[1][:category_id]).to eq(subsubcategory.id.to_s) expect(data[1][:category_names]).to eq("#{category.name}|#{subcategory.name}|#{subsubcategory.name}") - expect(data[1][:notification_level]).to eq('') # empty string, not 'normal' + expect(data[1][:notification_level]).to eq('regular') expect(DateTime.parse(data[1][:dismiss_new_timestamp])).to eq(reset_at) expect(data[2][:category_id]).to eq(announcements.id.to_s) diff --git a/spec/models/topic_list_spec.rb b/spec/models/topic_list_spec.rb index 97555b46172..734f983e299 100644 --- a/spec/models/topic_list_spec.rb +++ b/spec/models/topic_list_spec.rb @@ -50,7 +50,11 @@ describe TopicList do describe '#load_topics' do it 'loads additional data for serialization' do - category_user = CategoryUser.create!(user: user, category: topic.category) + category_user = CategoryUser.create!( + user: user, + category: topic.category, + notification_level: NotificationLevels.all[:regular] + ) topic = topic_list.load_topics.first diff --git a/spec/models/topic_tracking_state_spec.rb b/spec/models/topic_tracking_state_spec.rb index 947b16615e4..1f136016416 100644 --- a/spec/models/topic_tracking_state_spec.rb +++ b/spec/models/topic_tracking_state_spec.rb @@ -354,18 +354,6 @@ describe TopicTrackingState do expect(report.length).to eq(1) end - it "correctly handles category_users with null notification level" do - post - - report = TopicTrackingState.report(user) - expect(report.length).to eq(1) - - CategoryUser.create!(user_id: user.id, category_id: post.topic.category_id) - - report = TopicTrackingState.report(user) - expect(report.length).to eq(1) - end - it "works when categories are default muted" do SiteSetting.mute_all_categories_by_default = true