diff options
-rw-r--r-- | app/controllers/users_controller.rb | 6 | ||||
-rw-r--r-- | app/helpers/users_helper.rb | 8 | ||||
-rw-r--r-- | app/views/users/_destroy_account.html.haml | 15 | ||||
-rw-r--r-- | config/locales/en/users.en.yml | 1 | ||||
-rw-r--r-- | test/integration/browser/account_livecycle_test.rb | 20 |
5 files changed, 38 insertions, 12 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 0a0f551..da82d1c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -44,7 +44,7 @@ class UsersController < ApplicationController end def destroy - @user.account.destroy + @user.account.destroy(release_handles) flash[:notice] = I18n.t(:account_destroyed) # admins can destroy other users if @user != current_user @@ -65,4 +65,8 @@ class UsersController < ApplicationController params.require(:user).permit(:password, :password_confirmation) end end + + def release_handles + ! params[:block_username] + end end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 1b2dc5d..985f750 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -11,4 +11,12 @@ module UsersHelper end end + + def destroy_account_text + if @user == current_user + t(:destroy_my_account) + else + t(:admin_destroy_account, :username => @user.login) + end + end end diff --git a/app/views/users/_destroy_account.html.haml b/app/views/users/_destroy_account.html.haml index a2c4ddd..66a7dc2 100644 --- a/app/views/users/_destroy_account.html.haml +++ b/app/views/users/_destroy_account.html.haml @@ -3,14 +3,15 @@ -# %legend - - if @user == current_user - = t(:destroy_my_account) - - else - = t(:admin_destroy_account, :username => @user.login) + = destroy_account_text %p= t(:destroy_account_info) -= destroy_btn user_path(@user), :type => "danger" do - %i.icon-remove.icon-white - = t(:destroy_my_account) += form_tag user_path(@user), method: :delete do + .checkbox + = label_tag do + = check_box_tag 'block_username', 1, true + = t(:keep_username_blocked) + = submit_tag destroy_account_text, class: "btn btn-danger" + - if @user != current_user and @user.enabled? %legend = t(:deactivate_account, :username => @user.login) diff --git a/config/locales/en/users.en.yml b/config/locales/en/users.en.yml index b9f1724..d3dab30 100644 --- a/config/locales/en/users.en.yml +++ b/config/locales/en/users.en.yml @@ -19,6 +19,7 @@ en: destroy_my_account: "Destroy my account" destroy_account_info: "This will permanently destroy your account and all the data associated with it. Proceed with caution!" admin_destroy_account: "Destroy the account %{username}" + keep_username_blocked: "Keep the username blocked from reuse for a while" account_destroyed: "The account has been destroyed successfully." set_email_address: "Set email address" forward_email: "Forward Email" diff --git a/test/integration/browser/account_livecycle_test.rb b/test/integration/browser/account_livecycle_test.rb index 835dfdc..3d23363 100644 --- a/test/integration/browser/account_livecycle_test.rb +++ b/test/integration/browser/account_livecycle_test.rb @@ -8,7 +8,7 @@ class AccountLivecycleTest < BrowserIntegrationTest test "signup successfully when invited" do username, password = submit_signup - assert page.has_content?("Welcome #{username}") + assert_successful_login username click_on 'Log Out' assert page.has_content?("Log In") assert_equal '/', current_path @@ -28,14 +28,14 @@ class AccountLivecycleTest < BrowserIntegrationTest fill_in 'Password confirmation', with: password click_on 'Sign Up' - assert page.has_content?("Welcome #{username}") + assert_successful_login username end end test "signup with username ending in dot json" do username = Faker::Internet.user_name + '.json' submit_signup username - assert page.has_content?("Welcome #{username}") + assert_successful_login username end test "signup with reserved username" do @@ -48,7 +48,7 @@ class AccountLivecycleTest < BrowserIntegrationTest username, password = submit_signup click_on 'Log Out' attempt_login(username, password) - assert page.has_content?("Welcome #{username}") + assert_successful_login username within('.sidenav li.active') do assert page.has_content?("Overview") end @@ -80,6 +80,15 @@ class AccountLivecycleTest < BrowserIntegrationTest assert page.has_content?('has already been taken') end + test "handle available after non blocking account destruction" do + username, password = submit_signup + click_on I18n.t('account_settings') + uncheck I18n.t('keep_username_blocked') + click_on I18n.t('destroy_my_account') + submit_signup(username) + assert_successful_login username + end + test "change pgp key" do with_config user_actions: ['change_pgp_key'] do pgp_key = FactoryGirl.build :pgp_key @@ -111,4 +120,7 @@ class AccountLivecycleTest < BrowserIntegrationTest assert page.has_no_selector? '.btn-primary.disabled' end + def assert_successful_login(username) + assert page.has_content?("Welcome #{username}") + end end |