]> git.openstreetmap.org Git - rails.git/blob - test/controllers/preferences_controller_test.rb
Store selected site color scheme
[rails.git] / test / controllers / preferences_controller_test.rb
1 require "test_helper"
2
3 class PreferencesControllerTest < ActionDispatch::IntegrationTest
4   ##
5   # test all routes which lead to this controller
6   def test_routes
7     assert_routing(
8       { :path => "/preferences", :method => :get },
9       { :controller => "preferences", :action => "show" }
10     )
11
12     assert_routing(
13       { :path => "/preferences/edit", :method => :get },
14       { :controller => "preferences", :action => "edit" }
15     )
16
17     assert_routing(
18       { :path => "/preferences", :method => :put },
19       { :controller => "preferences", :action => "update" }
20     )
21   end
22
23   def test_update_preferred_editor
24     user = create(:user, :languages => [])
25     user.preferences.create(:k => "site.color_scheme", :v => "light")
26     session_for(user)
27
28     # Changing to a invalid editor should fail
29     user.preferred_editor = "unknown"
30     put preferences_path, :params => { :user => user.attributes }
31     assert_response :success
32     assert_template :edit
33     assert_select ".alert-success", false
34     assert_select ".alert-danger", true
35     assert_select "form > div > select#user_preferred_editor > option[selected]", false
36     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
37
38     # Changing to a valid editor should work
39     user.preferred_editor = "id"
40     put preferences_path, :params => { :user => user.attributes }
41     assert_redirected_to preferences_path
42     follow_redirect!
43     assert_template :show
44     assert_select ".alert-success", /^Preferences updated/
45     assert_select "dd", "iD (in-browser editor)"
46     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
47
48     # Changing to the default editor should work
49     user.preferred_editor = "default"
50     put preferences_path, :params => { :user => user.attributes }
51     assert_redirected_to preferences_path
52     follow_redirect!
53     assert_template :show
54     assert_select ".alert-success", /^Preferences updated/
55     assert_select "dd", "Default (currently iD)"
56     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
57   end
58
59   def test_update_preferred_site_color_scheme
60     user = create(:user, :languages => [])
61     session_for(user)
62     assert_nil user.preferences.find_by(:k => "site.color_scheme")
63
64     # Changing when previously not defined
65     put preferences_path, :params => { :user => user.attributes, :site_color_scheme => "light" }
66     assert_redirected_to preferences_path
67     follow_redirect!
68     assert_template :show
69     assert_select ".alert-success", /^Preferences updated/
70     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
71
72     # Changing when previously defined
73     put preferences_path, :params => { :user => user.attributes, :site_color_scheme => "auto" }
74     assert_redirected_to preferences_path
75     follow_redirect!
76     assert_template :show
77     assert_select ".alert-success", /^Preferences updated/
78     assert_equal "auto", user.preferences.find_by(:k => "site.color_scheme")&.v
79   end
80 end