diff options
author | Filipa Lacerda <filipa@gitlab.com> | 2017-10-09 09:14:38 +0100 |
---|---|---|
committer | Filipa Lacerda <filipa@gitlab.com> | 2017-10-09 09:14:38 +0100 |
commit | b6ab735ad2e596007d8dc0123bf5e2e018e99df8 (patch) | |
tree | 479d0fb7097caeeb132558b333cd2b8666118362 /spec/models/user_spec.rb | |
parent | fe5fe5242f67a7d91ff43659978892d507b71014 (diff) | |
parent | f45bb52af643cd271d415317f40b5541b18ec634 (diff) | |
download | gitlab-ce-38869-commitslist.tar.gz |
Merge branch 'master' into 38869-commitslist38869-commitslist
* master: (83 commits)
Move cycle analytics banner into a vue file
Remove executable permissions on images to make docs lint happy
Sync up hard coded DN class in migration
Redefine `respond_to?` in light of `method_missing`
Make internal methods private
Leave bad DNs alone instead of raising errors
Refactor DN error classes
Add changelog entry for LDAP normalization
Add migration specs
Move migration to background
Update DN class in migration
Normalize values, reusing DN normalization code
Remove telephoneNumber format comment
Fix space stripping
Rename method to `to_normalized_s`
Refactor initialize method for clarity
Move downcasing to normalize method
Normalize existing persisted DNs
Resolve Rubocop offenses
Switch to new DN class
...
Diffstat (limited to 'spec/models/user_spec.rb')
-rw-r--r-- | spec/models/user_spec.rb | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 9f517e4af72..ece6968dde6 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -2,6 +2,7 @@ require 'spec_helper' describe User do include Gitlab::CurrentSettings + include ProjectForksHelper describe 'modules' do subject { described_class } @@ -1431,7 +1432,7 @@ describe User do describe "#contributed_projects" do subject { create(:user) } let!(:project1) { create(:project) } - let!(:project2) { create(:project, forked_from_project: project3) } + let!(:project2) { fork_project(project3) } let!(:project3) { create(:project) } let!(:merge_request) { create(:merge_request, source_project: project2, target_project: project3, author: subject) } let!(:push_event) { create(:push_event, project: project1, author: subject) } @@ -1455,6 +1456,23 @@ describe User do end end + describe '#fork_of' do + let(:user) { create(:user) } + + it "returns a user's fork of a project" do + project = create(:project, :public) + user_fork = fork_project(project, user, namespace: user.namespace) + + expect(user.fork_of(project)).to eq(user_fork) + end + + it 'returns nil if the project does not have a fork network' do + project = create(:project) + + expect(user.fork_of(project)).to be_nil + end + end + describe '#can_be_removed?' do subject { create(:user) } @@ -2282,4 +2300,49 @@ describe User do end end end + + describe '#confirm_deletion_with_password?' do + where( + password_automatically_set: [true, false], + ldap_user: [true, false], + password_authentication_disabled: [true, false] + ) + + with_them do + let!(:user) { create(:user, password_automatically_set: password_automatically_set) } + let!(:identity) { create(:identity, user: user) if ldap_user } + + # Only confirm deletion with password if all inputs are false + let(:expected) { !(password_automatically_set || ldap_user || password_authentication_disabled) } + + before do + stub_application_setting(password_authentication_enabled: !password_authentication_disabled) + end + + it 'returns false unless all inputs are true' do + expect(user.confirm_deletion_with_password?).to eq(expected) + end + end + end + + describe '#delete_async' do + let(:user) { create(:user) } + let(:deleted_by) { create(:user) } + + it 'blocks the user then schedules them for deletion if a hard delete is specified' do + expect(DeleteUserWorker).to receive(:perform_async).with(deleted_by.id, user.id, hard_delete: true) + + user.delete_async(deleted_by: deleted_by, params: { hard_delete: true }) + + expect(user).to be_blocked + end + + it 'schedules user for deletion without blocking them' do + expect(DeleteUserWorker).to receive(:perform_async).with(deleted_by.id, user.id, {}) + + user.delete_async(deleted_by: deleted_by) + + expect(user).not_to be_blocked + end + end end |