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