From 1b4ba3eb99e30bded9bffea20c457af5e08a58f2 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Wed, 6 Feb 2013 12:44:09 +0100 Subject: [PATCH 1/3] Add user delete option. --- app/controllers/registrations_controller.rb | 11 +++++++++++ app/views/profiles/account.html.haml | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index cbac7613e59..b7ee75619cb 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -1,6 +1,17 @@ class RegistrationsController < Devise::RegistrationsController before_filter :signup_enabled? + def destroy + if current_user.owned_projects.count > 0 + redirect_to account_profile_path, alert: "Remove projects and groups before removing account." and return + end + current_user.destroy + + respond_to do |format| + format.html { redirect_to new_user_session_path, notice: "Account successfully removed." } + end + end + private def signup_enabled? diff --git a/app/views/profiles/account.html.haml b/app/views/profiles/account.html.haml index 2ad000b815b..9f81fc8127e 100644 --- a/app/views/profiles/account.html.haml +++ b/app/views/profiles/account.html.haml @@ -77,4 +77,10 @@ .input = f.submit 'Save username', class: "btn btn-save" - +- if Gitlab.config.gitlab.signup_enabled + %fieldset.update-username + %legend + Remove account + %small.cred.pull-right + Before removing the account you must remove all projects! + = link_to 'Delete account', user_registration_path, confirm: "REMOVE #{current_user.name}? Are you sure?", method: :delete, class: "btn btn-remove delete-key btn-small pull-right" \ No newline at end of file From f339af858b25cc32ac1bc0c46add29a6a3f43b51 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 11 Feb 2013 13:06:37 +0100 Subject: [PATCH 2/3] Test the delete acount option. --- spec/requests/profile_spec.rb | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 spec/requests/profile_spec.rb diff --git a/spec/requests/profile_spec.rb b/spec/requests/profile_spec.rb new file mode 100644 index 00000000000..c18d8f921a3 --- /dev/null +++ b/spec/requests/profile_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +describe "Profile account page" do + let(:user) { create(:user) } + + before do + login_as :user + end + + describe "when signup is enabled" do + before do + Gitlab.config.gitlab.stub(:signup_enabled).and_return(true) + visit account_profile_path + end + it { page.should have_content("Remove account") } + + it "should delete the account", js: true do + expect { click_link "Delete account" }.to change {User.count}.by(-1) + current_path.should == new_user_session_path + end + end + + describe "when signup is enabled and user has a project" do + before do + Gitlab.config.gitlab.stub(:signup_enabled).and_return(true) + @project = create(:project, namespace: @user.namespace) + @project.team << [@user, :master] + visit account_profile_path + end + it { page.should have_content("Remove account") } + + it "should not allow user to delete the account" do + expect { click_link "Delete account" }.not_to change {User.count}.by(-1) + end + end + + describe "when signup is disabled" do + before do + Gitlab.config.gitlab.stub(:signup_enabled).and_return(false) + visit account_profile_path + end + + it "should not have option to remove account" do + page.should_not have_content("Remove account") + current_path.should == account_profile_path + end + end +end \ No newline at end of file From 483f720861e7aa018b581dce7bb52d4650405edf Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 11 Feb 2013 13:12:41 +0100 Subject: [PATCH 3/3] UPdate field name. --- app/views/profiles/account.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/profiles/account.html.haml b/app/views/profiles/account.html.haml index 9f81fc8127e..5465d1f96e9 100644 --- a/app/views/profiles/account.html.haml +++ b/app/views/profiles/account.html.haml @@ -78,7 +78,7 @@ = f.submit 'Save username', class: "btn btn-save" - if Gitlab.config.gitlab.signup_enabled - %fieldset.update-username + %fieldset.remove-account %legend Remove account %small.cred.pull-right