]> git.openstreetmap.org Git - rails.git/blob - test/controllers/preferences_controller_test.rb
Make preferences page editable without clicking 'Edit Preferences'
[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", :method => :put },
14       { :controller => "preferences", :action => "update" }
15     )
16   end
17
18   def test_update_preferred_editor
19     user = create(:user, :languages => [])
20     user.preferences.create(:k => "site.color_scheme", :v => "light")
21     user.preferences.create(:k => "map.color_scheme", :v => "light")
22     session_for(user)
23
24     # Changing to a invalid editor should fail
25     put preferences_path, :params => { :user => { :preferred_editor => "unknown", :languages => [] } }
26     assert_response :success
27     assert_template :show
28     assert_select ".alert-success", false
29     assert_select ".alert-danger", true
30     user.reload
31     assert_nil user.preferred_editor
32     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
33     assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
34
35     # Changing to a valid editor should work
36     put preferences_path, :params => { :user => { :preferred_editor => "id", :languages => [] } }
37     assert_redirected_to preferences_path
38     follow_redirect!
39     assert_template :show
40     assert_select ".alert-success", /^Preferences updated/
41     user.reload
42     assert_equal "id", user.preferred_editor
43     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
44     assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
45
46     # Changing to the default editor should work
47     put preferences_path, :params => { :user => { :preferred_editor => "default", :languages => [] } }
48     assert_redirected_to preferences_path
49     follow_redirect!
50     assert_template :show
51     assert_select ".alert-success", /^Preferences updated/
52     user.reload
53     assert_nil user.preferred_editor
54     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
55     assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
56   end
57
58   def test_update_preferred_site_color_scheme
59     user = create(:user, :languages => [])
60     session_for(user)
61     assert_nil user.preferences.find_by(:k => "site.color_scheme")
62
63     # Changing when previously not defined
64     put preferences_path, :params => { :user => user.attributes, :site_color_scheme => "light" }
65     assert_redirected_to preferences_path
66     follow_redirect!
67     assert_template :show
68     assert_select ".alert-success", /^Preferences updated/
69     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
70
71     # Changing when previously defined
72     put preferences_path, :params => { :user => user.attributes, :site_color_scheme => "auto" }
73     assert_redirected_to preferences_path
74     follow_redirect!
75     assert_template :show
76     assert_select ".alert-success", /^Preferences updated/
77     assert_equal "auto", user.preferences.find_by(:k => "site.color_scheme")&.v
78   end
79
80   def test_update_preferred_map_color_scheme
81     user = create(:user, :languages => [])
82     session_for(user)
83     assert_nil user.preferences.find_by(:k => "map.color_scheme")
84
85     # Changing when previously not defined
86     put preferences_path, :params => { :user => user.attributes, :map_color_scheme => "light" }
87     assert_redirected_to preferences_path
88     follow_redirect!
89     assert_template :show
90     assert_select ".alert-success", /^Preferences updated/
91     assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
92
93     # Changing when previously defined
94     put preferences_path, :params => { :user => user.attributes, :map_color_scheme => "auto" }
95     assert_redirected_to preferences_path
96     follow_redirect!
97     assert_template :show
98     assert_select ".alert-success", /^Preferences updated/
99     assert_equal "auto", user.preferences.find_by(:k => "map.color_scheme")&.v
100   end
101 end