3 class AccountsControllerTest < ActionDispatch::IntegrationTest
5 # test all routes which lead to this controller
8 { :path => "/account", :method => :get },
9 { :controller => "accounts", :action => "show" }
12 { :path => "/account", :method => :put },
13 { :controller => "accounts", :action => "update" }
16 { :path => "/account", :method => :delete },
17 { :controller => "accounts", :action => "destroy" }
21 assert_redirected_to "/account"
24 def test_show_and_update
25 # Get a user to work with - note that this user deliberately
26 # conflicts with uppercase_user in the email and display name
27 # fields to test that we can change other fields without any
28 # validation errors being reported
29 user = create(:user, :languages => [])
30 _uppercase_user = build(:user, :email => user.email.upcase, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
32 # Make sure that you are redirected to the login page when
33 # you are not logged in
35 assert_redirected_to login_path(:referer => account_path)
37 # Make sure we get the page when we are logged in as the right user
40 assert_response :success
42 assert_select "form#accountForm" do |form|
43 assert_equal "post", form.attr("method").to_s
44 assert_select "input[name='_method']", true
45 assert_equal "/account", form.attr("action").to_s
48 # Updating the description using GET should fail
49 user.description = "new description"
50 user.preferred_editor = "default"
51 get account_path, :params => { :user => user.attributes }
52 assert_response :success
54 assert_not_equal user.description, User.find(user.id).description
56 # Adding external authentication should redirect to the auth provider
57 patch account_path, :params => { :user => user.attributes.merge(:auth_provider => "google") }
58 assert_redirected_to auth_path(:provider => "google", :origin => "/account")
60 assert_redirected_to %r{^https://accounts.google.com/o/oauth2/auth\?.*}
62 # Changing name to one that exists should fail
63 new_attributes = user.attributes.dup.merge(:display_name => create(:user).display_name)
64 patch account_path, :params => { :user => new_attributes }
65 assert_response :success
67 assert_select ".alert-success", false
68 assert_select "form#accountForm > div > input.is-invalid#user_display_name"
70 # Changing name to one that exists should fail, regardless of case
71 new_attributes = user.attributes.dup.merge(:display_name => create(:user).display_name.upcase)
72 patch account_path, :params => { :user => new_attributes }
73 assert_response :success
75 assert_select ".alert-success", false
76 assert_select "form#accountForm > div > input.is-invalid#user_display_name"
78 # Changing name to one that doesn't exist should work
79 new_attributes = user.attributes.dup.merge(:display_name => "new tester")
80 patch account_path, :params => { :user => new_attributes }
81 assert_redirected_to account_path
83 assert_response :success
85 assert_select ".alert-success", /^User information updated successfully/
86 assert_select "form#accountForm > div > input#user_display_name[value=?]", "new tester"
88 # Record the change of name
89 user.display_name = "new tester"
91 # Changing email to one that exists should fail
92 user.new_email = create(:user).email
93 assert_no_difference "ActionMailer::Base.deliveries.size" do
94 perform_enqueued_jobs do
95 patch account_path, :params => { :user => user.attributes }
98 assert_response :success
100 assert_select ".alert-success", false
101 assert_select "form#accountForm > div > input.is-invalid#user_new_email"
103 # Changing email to one that exists should fail, regardless of case
104 user.new_email = create(:user).email.upcase
105 assert_no_difference "ActionMailer::Base.deliveries.size" do
106 perform_enqueued_jobs do
107 patch account_path, :params => { :user => user.attributes }
110 assert_response :success
111 assert_template :show
112 assert_select ".alert-success", false
113 assert_select "form#accountForm > div > input.is-invalid#user_new_email"
115 # Changing email to one that doesn't exist should work
116 user.new_email = "new_tester@example.com"
117 assert_difference "ActionMailer::Base.deliveries.size", 1 do
118 perform_enqueued_jobs do
119 patch account_path, :params => { :user => user.attributes }
122 assert_redirected_to account_path
124 assert_response :success
125 assert_template :show
126 assert_select ".alert-success", /^User information updated successfully/
127 assert_select "form#accountForm > div > input#user_new_email[value=?]", user.new_email
128 email = ActionMailer::Base.deliveries.first
129 assert_equal 1, email.to.count
130 assert_equal user.new_email, email.to.first
133 def test_show_private_account
134 user = create(:user, :data_public => false)
136 # Make sure that you are redirected to the login page when
137 # you are not logged in
139 assert_redirected_to login_path(:referer => account_path)
141 # Make sure we get the page when we are logged in as the right user
144 assert_response :success
145 assert_template :show
146 assert_select "form#accountForm" do |form|
147 assert_equal "post", form.attr("method").to_s
148 assert_select "input[name='_method']", true
149 assert_equal "/account", form.attr("action").to_s
152 # Make sure we have a button to "go public"
153 assert_select "form.button_to[action='/user/go_public']", true
156 def test_destroy_allowed
161 assert_response :redirect
164 def test_destroy_not_allowed
165 with_user_account_deletion_delay(24) do
167 create(:changeset, :user => user, :created_at => Time.now.utc)
171 assert_response :bad_request