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