1 # frozen_string_literal: true
5 class UserNotificationPreferencesTest < ActiveSupport::TestCase
6 def test_all_enabled_by_default
7 preferences = UserNotificationPreferences.new(create(:user))
8 assert_equal ["email"], preferences.changeset_comment
9 assert_equal ["email"], preferences.diary_comment
10 assert_equal ["email"], preferences.direct_message
11 assert_equal ["email"], preferences.gpx_import_failure
12 assert_equal ["email"], preferences.gpx_import_success
13 assert_equal ["email"], preferences.new_follower
14 assert_equal ["email"], preferences.note_comment
18 preferences = UserNotificationPreferences.new(create(:user))
20 "changeset_comment" => ["email"],
21 "diary_comment" => [],
22 "direct_message" => ["email"],
23 "gpx_import_failure" => ["email"],
24 "gpx_import_success" => nil,
28 assert_equal ["email"], preferences.changeset_comment
29 assert_equal [], preferences.diary_comment
30 assert_equal ["email"], preferences.direct_message
31 assert_equal ["email"], preferences.gpx_import_failure
32 assert_equal [], preferences.gpx_import_success
33 assert_equal [], preferences.new_follower
36 assert_equal ["email"], preferences.note_comment
39 def test_update_ignore_invalid_values
40 preferences = UserNotificationPreferences.new(create(:user))
42 preferences.update("changeset_comment" => ["whatsapp"])
43 assert_equal [], preferences.changeset_comment
44 assert_equal 0, UserPreference.where("k LIKE '%whatsapp%'").count
46 preferences.update("changeset_comment" => %w[whatsapp email])
47 assert_equal ["email"], preferences.changeset_comment
48 assert_equal 0, UserPreference.where("k LIKE '%whatsapp%'").count
50 preferences.update("imaginary_event" => ["email"])
51 assert_equal 0, UserPreference.where("k LIKE '%imaginary_event%'").count
54 def test_update_ignore_unmentioned_events
55 preferences = UserNotificationPreferences.new(create(:user))
57 "changeset_comment" => ["email"],
60 assert_equal 1, count_event_preferences_in_db("changeset_comment")
61 assert_equal 1, count_event_preferences_in_db("diary_comment")
62 assert_equal 0, count_event_preferences_in_db("direct_message")
63 assert_equal 0, count_event_preferences_in_db("gpx_import_failure")
64 assert_equal 0, count_event_preferences_in_db("gpx_import_success")
65 assert_equal 0, count_event_preferences_in_db("new_follower")
66 assert_equal 0, count_event_preferences_in_db("note_comment")
67 assert_equal 0, count_event_preferences_in_db("note_comment")
72 def count_event_preferences_in_db(event_name)
73 # A bit paranoid, but want to avoid misspellings, etc that produce
75 raise "Unknown event #{event_name.inspect}" unless UserNotificationPreferences::EVENTS.include?(event_name)
77 UserPreference.where("k LIKE 'notification.#{event_name}.%'").count