1 # frozen_string_literal: true
6 class BasicPreferencesControllerTest < ActionDispatch::IntegrationTest
8 # test all routes which lead to this controller
11 { :path => "/preferences/basic", :method => :get },
12 { :controller => "preferences/basic_preferences", :action => "show" }
15 { :path => "/preferences/basic", :method => :put },
16 { :controller => "preferences/basic_preferences", :action => "update" }
20 assert_redirected_to "/preferences/basic"
22 get "/preferences/edit"
23 assert_redirected_to "/preferences/basic"
26 def test_update_preferred_editor
27 user = create(:user, :languages => [])
28 user.preferences.create(:k => "site.color_scheme", :v => "light")
29 user.preferences.create(:k => "map.color_scheme", :v => "light")
30 user.preferences.create(:k => "editor.color_scheme", :v => "light")
33 # Changing to a invalid editor should fail
34 put basic_preferences_path, :params => { :user => { :preferred_editor => "unknown" } }
35 assert_response :success
37 assert_select ".alert-success", false
38 assert_select ".alert-danger", true
40 assert_nil user.preferred_editor
41 assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
42 assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
43 assert_equal "light", user.preferences.find_by(:k => "editor.color_scheme")&.v
45 # Changing to a valid editor should work
46 put basic_preferences_path, :params => { :user => { :preferred_editor => "id" } }
47 assert_redirected_to basic_preferences_path
50 assert_select ".alert-success", /^Preferences updated/
52 assert_equal "id", user.preferred_editor
53 assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
54 assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
55 assert_equal "light", user.preferences.find_by(:k => "editor.color_scheme")&.v
57 # Changing to the default editor should work
58 put basic_preferences_path, :params => { :user => { :preferred_editor => "default" } }
59 assert_redirected_to basic_preferences_path
62 assert_select ".alert-success", /^Preferences updated/
64 assert_nil user.preferred_editor
65 assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
66 assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
67 assert_equal "light", user.preferences.find_by(:k => "editor.color_scheme")&.v
70 def test_update_with_referer
71 session_for(create(:user))
72 put basic_preferences_path, :params => { :referer => root_path }
73 assert_redirected_to root_path
76 def test_update_preferred_language_from_en_selecting_fr
77 check_language_change %w[en], "fr", %w[fr]
80 def test_update_preferred_language_from_unknown_selecting_fr
81 check_language_change %w[unknown], "fr", %w[fr]
84 def test_update_preferred_language_from_unknown_en_selecting_en
85 check_language_change %w[unknown en], "en", %w[unknown en]
88 def test_update_preferred_language_from_unknown_en_selecting_fr
89 check_language_change %w[unknown en], "fr", %w[fr]
92 def test_update_preferred_language_from_en_unknown_selecting_fr
93 check_language_change %w[en unknown], "fr", %w[fr]
96 def test_update_preferred_language_from_ru_en_selecting_en
97 check_language_change %w[ru en], "en", %w[en ru]
100 def test_update_preferred_language_from_fr_enau_selecting_en
101 check_language_change %w[fr en-AU], "en", %w[en en-AU fr]
104 def test_update_preferred_language_from_fr_enau_en_selecting_en
105 check_language_change %w[fr en-AU en], "en", %w[en en-AU fr]
108 def test_update_preferred_language_from_fr_es_selecting_de
109 check_language_change %w[fr es], "de", %w[de]
112 def test_update_preferred_site_color_scheme
113 user = create(:user, :languages => [])
115 assert_nil user.preferences.find_by(:k => "site.color_scheme")
117 # Changing when previously not defined
118 put basic_preferences_path, :params => { :user => user.attributes, :site_color_scheme => "light" }
119 assert_redirected_to basic_preferences_path
121 assert_template :show
122 assert_select ".alert-success", /^Preferences updated/
123 assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
125 # Changing when previously defined
126 put basic_preferences_path, :params => { :user => user.attributes, :site_color_scheme => "auto" }
127 assert_redirected_to basic_preferences_path
129 assert_template :show
130 assert_select ".alert-success", /^Preferences updated/
131 assert_equal "auto", user.preferences.find_by(:k => "site.color_scheme")&.v
134 def test_update_preferred_map_color_scheme
135 user = create(:user, :languages => [])
137 assert_nil user.preferences.find_by(:k => "map.color_scheme")
139 # Changing when previously not defined
140 put basic_preferences_path, :params => { :user => user.attributes, :map_color_scheme => "light" }
141 assert_redirected_to basic_preferences_path
143 assert_template :show
144 assert_select ".alert-success", /^Preferences updated/
145 assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
147 # Changing when previously defined
148 put basic_preferences_path, :params => { :user => user.attributes, :map_color_scheme => "auto" }
149 assert_redirected_to basic_preferences_path
151 assert_template :show
152 assert_select ".alert-success", /^Preferences updated/
153 assert_equal "auto", user.preferences.find_by(:k => "map.color_scheme")&.v
156 def test_update_preferred_editor_color_scheme
157 user = create(:user, :languages => [])
159 assert_nil user.preferences.find_by(:k => "editor.color_scheme")
161 # Changing when previously not defined
162 put basic_preferences_path, :params => { :user => user.attributes, :editor_color_scheme => "light" }
163 assert_redirected_to basic_preferences_path
165 assert_template :show
166 assert_select ".alert-success", /^Preferences updated/
167 assert_equal "light", user.preferences.find_by(:k => "editor.color_scheme")&.v
169 # Changing when previously defined
170 put basic_preferences_path, :params => { :user => user.attributes, :editor_color_scheme => "auto" }
171 assert_redirected_to basic_preferences_path
173 assert_template :show
174 assert_select ".alert-success", /^Preferences updated/
175 assert_equal "auto", user.preferences.find_by(:k => "editor.color_scheme")&.v
180 def check_language_change(from_languages, selecting_language, to_languages)
181 I18n.with_locale "en" do
182 user = create(:user, :preferred_editor => "remote", :languages => from_languages)
183 another_user = create(:user, :languages => %w[not going to change])
186 put basic_preferences_path, :params => { :language => selecting_language }
188 assert_redirected_to basic_preferences_path
190 assert_equal to_languages, user.languages
191 assert_equal "remote", user.preferred_editor
193 assert_equal %w[not going to change], another_user.languages