diff options
author | Toon Claes <toon@gitlab.com> | 2019-02-28 19:57:34 +0100 |
---|---|---|
committer | Toon Claes <toon@gitlab.com> | 2019-02-28 19:57:34 +0100 |
commit | 62d7990b9bb30cf33ed87017c5c633d1cccc75c2 (patch) | |
tree | c3e1b69c58a412ba1c6f50a0337a23d9f9d6e1a4 /spec/models/user_spec.rb | |
parent | f6453eca992a9c142268e78ac782cef98110d183 (diff) | |
download | gitlab-ce-tc-standard-gem.tar.gz |
Ran standardrb --fix on the whole codebasetc-standard-gem
Inspired by https://twitter.com/searls/status/1101137953743613952 I
decided to try https://github.com/testdouble/standard on our codebase.
It's opinionated, but at least it's a _standard_.
Diffstat (limited to 'spec/models/user_spec.rb')
-rw-r--r-- | spec/models/user_spec.rb | 1460 |
1 files changed, 730 insertions, 730 deletions
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 85b157a9435..eeec662d959 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,12 +1,12 @@ -require 'spec_helper' +require "spec_helper" describe User do include ProjectForksHelper include TermsHelper - it_behaves_like 'having unique enum values' + it_behaves_like "having unique enum values" - describe 'modules' do + describe "modules" do subject { described_class } it { is_expected.to include_module(Gitlab::ConfigHelper) } @@ -16,11 +16,11 @@ describe User do it { is_expected.to include_module(BlocksJsonSerialization) } end - describe 'delegations' do + describe "delegations" do it { is_expected.to delegate_method(:path).to(:namespace).with_prefix } end - describe 'associations' do + describe "associations" do it { is_expected.to have_one(:namespace) } it { is_expected.to have_one(:status) } it { is_expected.to have_many(:snippets).dependent(:destroy) } @@ -43,8 +43,8 @@ describe User do it { is_expected.to have_many(:pipelines).dependent(:nullify) } it { is_expected.to have_many(:chat_names).dependent(:destroy) } it { is_expected.to have_many(:uploads) } - it { is_expected.to have_many(:reported_abuse_reports).dependent(:destroy).class_name('AbuseReport') } - it { is_expected.to have_many(:custom_attributes).class_name('UserCustomAttribute') } + it { is_expected.to have_many(:reported_abuse_reports).dependent(:destroy).class_name("AbuseReport") } + it { is_expected.to have_many(:custom_attributes).class_name("UserCustomAttribute") } it { is_expected.to have_many(:releases).dependent(:nullify) } describe "#abuse_report" do @@ -74,8 +74,8 @@ describe User do end end - describe '#group_members' do - it 'does not include group memberships for which user is a requester' do + describe "#group_members" do + it "does not include group memberships for which user is a requester" do user = create(:user) group = create(:group, :public, :access_requestable) group.request_access(user) @@ -84,8 +84,8 @@ describe User do end end - describe '#project_members' do - it 'does not include project memberships for which user is a requester' do + describe "#project_members" do + it "does not include project memberships for which user is a requester" do user = create(:user) project = create(:project, :public, :access_requestable) project.request_access(user) @@ -95,63 +95,63 @@ describe User do end end - describe 'validations' do - describe 'username' do - it 'validates presence' do + describe "validations" do + describe "username" do + it "validates presence" do expect(subject).to validate_presence_of(:username) end - it 'rejects blacklisted names' do - user = build(:user, username: 'dashboard') + it "rejects blacklisted names" do + user = build(:user, username: "dashboard") expect(user).not_to be_valid - expect(user.errors.messages[:username]).to eq ['dashboard is a reserved name'] + expect(user.errors.messages[:username]).to eq ["dashboard is a reserved name"] end - it 'allows child names' do - user = build(:user, username: 'avatar') + it "allows child names" do + user = build(:user, username: "avatar") expect(user).to be_valid end - it 'allows wildcard names' do - user = build(:user, username: 'blob') + it "allows wildcard names" do + user = build(:user, username: "blob") expect(user).to be_valid end - context 'when username is changed' do - let(:user) { build_stubbed(:user, username: 'old_path', namespace: build_stubbed(:namespace)) } + context "when username is changed" do + let(:user) { build_stubbed(:user, username: "old_path", namespace: build_stubbed(:namespace)) } - it 'validates move_dir is allowed for the namespace' do + it "validates move_dir is allowed for the namespace" do expect(user.namespace).to receive(:any_project_has_container_registry_tags?).and_return(true) - user.username = 'new_path' + user.username = "new_path" expect(user).to be_invalid - expect(user.errors.messages[:username].first).to match('cannot be changed if a personal project has container registry tags') + expect(user.errors.messages[:username].first).to match("cannot be changed if a personal project has container registry tags") end end - context 'when the username is in use by another user' do - let(:username) { 'foo' } + context "when the username is in use by another user" do + let(:username) { "foo" } let!(:other_user) { create(:user, username: username) } - it 'is invalid' do + it "is invalid" do user = build(:user, username: username) expect(user).not_to be_valid - expect(user.errors.full_messages).to eq(['Username has already been taken']) + expect(user.errors.full_messages).to eq(["Username has already been taken"]) end end end - it 'has a DB-level NOT NULL constraint on projects_limit' do + it "has a DB-level NOT NULL constraint on projects_limit" do user = create(:user) expect(user.persisted?).to eq(true) - expect do + expect { user.update_columns(projects_limit: nil) - end.to raise_error(ActiveRecord::StatementInvalid) + }.to raise_error(ActiveRecord::StatementInvalid) end it { is_expected.to validate_presence_of(:projects_limit) } @@ -162,23 +162,23 @@ describe User do it { is_expected.to validate_length_of(:bio).is_at_most(255) } - it_behaves_like 'an object with email-formated attributes', :email do + it_behaves_like "an object with email-formated attributes", :email do subject { build(:user) } end - it_behaves_like 'an object with email-formated attributes', :public_email, :notification_email do + it_behaves_like "an object with email-formated attributes", :public_email, :notification_email do subject { build(:user).tap { |user| user.emails << build(:email, email: email_value) } } end - describe '#commit_email' do + describe "#commit_email" do subject(:user) { create(:user) } - it 'defaults to the primary email' do + it "defaults to the primary email" do expect(user.email).to be_present expect(user.commit_email).to eq(user.email) end - it 'defaults to the primary email when the column in the database is null' do + it "defaults to the primary email when the column in the database is null" do user.update_column(:commit_email, nil) found_user = described_class.find_by(id: user.id) @@ -186,13 +186,13 @@ describe User do expect(found_user.commit_email).to eq(user.email) end - it 'returns the private commit email when commit_email has _private' do + it "returns the private commit email when commit_email has _private" do user.update_column(:commit_email, Gitlab::PrivateCommitEmail::TOKEN) expect(user.commit_email).to eq(user.private_commit_email) end - it 'can be set to a confirmed email' do + it "can be set to a confirmed email" do confirmed = create(:email, :confirmed, user: user) user.commit_email = confirmed.email @@ -200,7 +200,7 @@ describe User do expect(user.commit_email).to eq(confirmed.email) end - it 'can not be set to an unconfirmed email' do + it "can not be set to an unconfirmed email" do unconfirmed = create(:email, user: user) user.commit_email = unconfirmed.email @@ -209,168 +209,168 @@ describe User do expect(user.commit_email).to eq(user.email) end - it 'can not be set to a non-existent email' do - user.commit_email = 'non-existent-email@nonexistent.nonexistent' + it "can not be set to a non-existent email" do + user.commit_email = "non-existent-email@nonexistent.nonexistent" # This should set the commit_email attribute to the primary email expect(user).to be_valid expect(user.commit_email).to eq(user.email) end - it 'can not be set to an invalid email, even if confirmed' do - confirmed = create(:email, :confirmed, :skip_validate, user: user, email: 'invalid') + it "can not be set to an invalid email, even if confirmed" do + confirmed = create(:email, :confirmed, :skip_validate, user: user, email: "invalid") user.commit_email = confirmed.email expect(user).not_to be_valid end end - describe 'email' do - context 'when no signup domains whitelisted' do + describe "email" do + context "when no signup domains whitelisted" do before do allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return([]) end - it 'accepts any email' do + it "accepts any email" do user = build(:user, email: "info@example.com") expect(user).to be_valid end end - context 'when a signup domain is whitelisted and subdomains are allowed' do + context "when a signup domain is whitelisted and subdomains are allowed" do before do - allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return(['example.com', '*.example.com']) + allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return(["example.com", "*.example.com"]) end - it 'accepts info@example.com' do + it "accepts info@example.com" do user = build(:user, email: "info@example.com") expect(user).to be_valid end - it 'accepts info@test.example.com' do + it "accepts info@test.example.com" do user = build(:user, email: "info@test.example.com") expect(user).to be_valid end - it 'rejects example@test.com' do + it "rejects example@test.com" do user = build(:user, email: "example@test.com") expect(user).to be_invalid end end - context 'when a signup domain is whitelisted and subdomains are not allowed' do + context "when a signup domain is whitelisted and subdomains are not allowed" do before do - allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return(['example.com']) + allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return(["example.com"]) end - it 'accepts info@example.com' do + it "accepts info@example.com" do user = build(:user, email: "info@example.com") expect(user).to be_valid end - it 'rejects info@test.example.com' do + it "rejects info@test.example.com" do user = build(:user, email: "info@test.example.com") expect(user).to be_invalid end - it 'rejects example@test.com' do + it "rejects example@test.com" do user = build(:user, email: "example@test.com") expect(user).to be_invalid end - it 'accepts example@test.com when added by another user' do + it "accepts example@test.com when added by another user" do user = build(:user, email: "example@test.com", created_by_id: 1) expect(user).to be_valid end end - context 'domain blacklist' do + context "domain blacklist" do before do allow_any_instance_of(ApplicationSetting).to receive(:domain_blacklist_enabled?).and_return(true) - allow_any_instance_of(ApplicationSetting).to receive(:domain_blacklist).and_return(['example.com']) + allow_any_instance_of(ApplicationSetting).to receive(:domain_blacklist).and_return(["example.com"]) end - context 'when a signup domain is blacklisted' do - it 'accepts info@test.com' do - user = build(:user, email: 'info@test.com') + context "when a signup domain is blacklisted" do + it "accepts info@test.com" do + user = build(:user, email: "info@test.com") expect(user).to be_valid end - it 'rejects info@example.com' do - user = build(:user, email: 'info@example.com') + it "rejects info@example.com" do + user = build(:user, email: "info@example.com") expect(user).not_to be_valid end - it 'accepts info@example.com when added by another user' do - user = build(:user, email: 'info@example.com', created_by_id: 1) + it "accepts info@example.com when added by another user" do + user = build(:user, email: "info@example.com", created_by_id: 1) expect(user).to be_valid end end - context 'when a signup domain is blacklisted but a wildcard subdomain is allowed' do + context "when a signup domain is blacklisted but a wildcard subdomain is allowed" do before do - allow_any_instance_of(ApplicationSetting).to receive(:domain_blacklist).and_return(['test.example.com']) - allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return(['*.example.com']) + allow_any_instance_of(ApplicationSetting).to receive(:domain_blacklist).and_return(["test.example.com"]) + allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return(["*.example.com"]) end - it 'gives priority to whitelist and allow info@test.example.com' do - user = build(:user, email: 'info@test.example.com') + it "gives priority to whitelist and allow info@test.example.com" do + user = build(:user, email: "info@test.example.com") expect(user).to be_valid end end - context 'with both lists containing a domain' do + context "with both lists containing a domain" do before do - allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return(['test.com']) + allow_any_instance_of(ApplicationSetting).to receive(:domain_whitelist).and_return(["test.com"]) end - it 'accepts info@test.com' do - user = build(:user, email: 'info@test.com') + it "accepts info@test.com" do + user = build(:user, email: "info@test.com") expect(user).to be_valid end - it 'rejects info@example.com' do - user = build(:user, email: 'info@example.com') + it "rejects info@example.com" do + user = build(:user, email: "info@example.com") expect(user).not_to be_valid end end end - context 'owns_notification_email' do - it 'accepts temp_oauth_email emails' do + context "owns_notification_email" do + it "accepts temp_oauth_email emails" do user = build(:user, email: "temp-email-for-oauth@example.com") expect(user).to be_valid end end - context 'set_commit_email' do - it 'keeps commit email when private commit email is being used' do + context "set_commit_email" do + it "keeps commit email when private commit email is being used" do user = create(:user, commit_email: Gitlab::PrivateCommitEmail::TOKEN) expect(user.read_attribute(:commit_email)).to eq(Gitlab::PrivateCommitEmail::TOKEN) end - it 'keeps the commit email when nil' do + it "keeps the commit email when nil" do user = create(:user, commit_email: nil) expect(user.read_attribute(:commit_email)).to be_nil end - it 'reverts to nil when email is not verified' do + it "reverts to nil when email is not verified" do user = create(:user, commit_email: "foo@bar.com") expect(user.read_attribute(:commit_email)).to be_nil end end - context 'owns_commit_email' do - it 'accepts private commit email' do + context "owns_commit_email" do + it "accepts private commit email" do user = build(:user, commit_email: Gitlab::PrivateCommitEmail::TOKEN) expect(user).to be_valid end - it 'accepts nil commit email' do + it "accepts nil commit email" do user = build(:user, commit_email: nil) expect(user).to be_valid @@ -408,7 +408,7 @@ describe User do expect(users_with_two_factor).not_to include(user_without_2fa.id) end - it 'works with ORDER BY' do + it "works with ORDER BY" do user_with_2fa = create(:user, :two_factor_via_otp, :two_factor_via_u2f) expect(described_class @@ -446,8 +446,8 @@ describe User do end end - describe '.limit_to_todo_authors' do - context 'when filtering by todo authors' do + describe ".limit_to_todo_authors" do + context "when filtering by todo authors" do let(:user1) { create(:user) } let(:user2) { create(:user) } @@ -456,7 +456,7 @@ describe User do create(:todo, user: user2, author: user2, state: :pending) end - it 'only returns users that have authored todos' do + it "only returns users that have authored todos" do users = described_class.limit_to_todo_authors( user: user2, with_todos: true, @@ -466,7 +466,7 @@ describe User do expect(users).to eq([user2]) end - it 'ignores users that do not have a todo in the matching state' do + it "ignores users that do not have a todo in the matching state" do users = described_class.limit_to_todo_authors( user: user1, with_todos: true, @@ -477,8 +477,8 @@ describe User do end end - context 'when not filtering by todo authors' do - it 'returns the input relation' do + context "when not filtering by todo authors" do + it "returns the input relation" do user1 = create(:user) user2 = create(:user) rel = described_class.limit_to_todo_authors(user: user1) @@ -487,8 +487,8 @@ describe User do end end - context 'when no user is provided' do - it 'returns the input relation' do + context "when no user is provided" do + it "returns the input relation" do user1 = create(:user) user2 = create(:user) rel = described_class.limit_to_todo_authors @@ -498,19 +498,19 @@ describe User do end end - describe '.by_username' do - it 'finds users regardless of the case passed' do - user = create(:user, username: 'CaMeLcAsEd') - user2 = create(:user, username: 'UPPERCASE') + describe ".by_username" do + it "finds users regardless of the case passed" do + user = create(:user, username: "CaMeLcAsEd") + user2 = create(:user, username: "UPPERCASE") - expect(described_class.by_username(%w(CAMELCASED uppercase))) + expect(described_class.by_username(%w[CAMELCASED uppercase])) .to contain_exactly(user, user2) end - it 'finds a single user regardless of the case passed' do - user = create(:user, username: 'CaMeLcAsEd') + it "finds a single user regardless of the case passed" do + user = create(:user, username: "CaMeLcAsEd") - expect(described_class.by_username('CAMELCASED')) + expect(described_class.by_username("CAMELCASED")) .to contain_exactly(user) end end @@ -522,8 +522,8 @@ describe User do it { is_expected.to respond_to(:external?) } end - describe 'before save hook' do - context 'when saving an external user' do + describe "before save hook" do + context "when saving an external user" do let(:user) { create(:user) } let(:external_user) { create(:user, external: true) } @@ -534,11 +534,11 @@ describe User do end end - describe '#check_for_verified_email' do + describe "#check_for_verified_email" do let(:user) { create(:user) } - let(:secondary) { create(:email, :confirmed, email: 'secondary@example.com', user: user) } + let(:secondary) { create(:email, :confirmed, email: "secondary@example.com", user: user) } - it 'allows a verfied secondary email to be used as the primary without needing reconfirmation' do + it "allows a verfied secondary email to be used as the primary without needing reconfirmation" do user.update!(email: secondary.email) user.reload expect(user.email).to eq secondary.email @@ -548,39 +548,39 @@ describe User do end end - describe 'after commit hook' do - describe '#update_emails_with_primary_email' do + describe "after commit hook" do + describe "#update_emails_with_primary_email" do before do - @user = create(:user, email: 'primary@example.com').tap do |user| + @user = create(:user, email: "primary@example.com").tap do |user| user.skip_reconfirmation! end - @secondary = create :email, email: 'secondary@example.com', user: @user + @secondary = create :email, email: "secondary@example.com", user: @user @user.reload end - it 'gets called when email updated' do + it "gets called when email updated" do expect(@user).to receive(:update_emails_with_primary_email) - @user.update!(email: 'new_primary@example.com') + @user.update!(email: "new_primary@example.com") end - it 'adds old primary to secondary emails when secondary is a new email ' do - @user.update!(email: 'new_primary@example.com') + it "adds old primary to secondary emails when secondary is a new email " do + @user.update!(email: "new_primary@example.com") @user.reload expect(@user.emails.count).to eq 2 - expect(@user.emails.pluck(:email)).to match_array([@secondary.email, 'primary@example.com']) + expect(@user.emails.pluck(:email)).to match_array([@secondary.email, "primary@example.com"]) end - it 'adds old primary to secondary emails if secondary is becoming a primary' do + it "adds old primary to secondary emails if secondary is becoming a primary" do @user.update!(email: @secondary.email) @user.reload expect(@user.emails.count).to eq 1 - expect(@user.emails.first.email).to eq 'primary@example.com' + expect(@user.emails.first.email).to eq "primary@example.com" end - it 'transfers old confirmation values into new secondary' do + it "transfers old confirmation values into new secondary" do @user.update!(email: @secondary.email) @user.reload @@ -589,177 +589,177 @@ describe User do end end - describe '#update_notification_email' do + describe "#update_notification_email" do # Regression: https://gitlab.com/gitlab-org/gitlab-ce/issues/22846 - context 'when changing :email' do + context "when changing :email" do let(:user) { create(:user) } - let(:new_email) { 'new-email@example.com' } + let(:new_email) { "new-email@example.com" } - it 'sets :unconfirmed_email' do - expect do + it "sets :unconfirmed_email" do + expect { user.tap { |u| u.update!(email: new_email) }.reload - end.to change(user, :unconfirmed_email).to(new_email) + }.to change(user, :unconfirmed_email).to(new_email) end - it 'does not change :notification_email' do - expect do + it "does not change :notification_email" do + expect { user.tap { |u| u.update!(email: new_email) }.reload - end.not_to change(user, :notification_email) + }.not_to change(user, :notification_email) end - it 'updates :notification_email to the new email once confirmed' do + it "updates :notification_email to the new email once confirmed" do user.update!(email: new_email) - expect do + expect { user.tap(&:confirm).reload - end.to change(user, :notification_email).to eq(new_email) + }.to change(user, :notification_email).to eq(new_email) end - context 'and :notification_email is set to a secondary email' do + context "and :notification_email is set to a secondary email" do let!(:email_attrs) { attributes_for(:email, :confirmed, user: user) } - let(:secondary) { create(:email, :confirmed, email: 'secondary@example.com', user: user) } + let(:secondary) { create(:email, :confirmed, email: "secondary@example.com", user: user) } before do user.emails.create(email_attrs) user.tap { |u| u.update!(notification_email: email_attrs[:email]) }.reload end - it 'does not change :notification_email to :email' do - expect do + it "does not change :notification_email to :email" do + expect { user.tap { |u| u.update!(email: new_email) }.reload - end.not_to change(user, :notification_email) + }.not_to change(user, :notification_email) end - it 'does not change :notification_email to :email once confirmed' do + it "does not change :notification_email to :email once confirmed" do user.update!(email: new_email) - expect do + expect { user.tap(&:confirm).reload - end.not_to change(user, :notification_email) + }.not_to change(user, :notification_email) end end end end - describe '#update_invalid_gpg_signatures' do + describe "#update_invalid_gpg_signatures" do let(:user) do - create(:user, email: 'tula.torphy@abshire.ca').tap do |user| + create(:user, email: "tula.torphy@abshire.ca").tap do |user| user.skip_reconfirmation! end end - it 'does nothing when the name is updated' do + it "does nothing when the name is updated" do expect(user).not_to receive(:update_invalid_gpg_signatures) - user.update!(name: 'Bette') + user.update!(name: "Bette") end - it 'synchronizes the gpg keys when the email is updated' do + it "synchronizes the gpg keys when the email is updated" do expect(user).to receive(:update_invalid_gpg_signatures).at_most(:twice) - user.update!(email: 'shawnee.ritchie@denesik.com') + user.update!(email: "shawnee.ritchie@denesik.com") end end end - describe '#update_tracked_fields!', :clean_gitlab_redis_shared_state do + describe "#update_tracked_fields!", :clean_gitlab_redis_shared_state do let(:request) { OpenStruct.new(remote_ip: "127.0.0.1") } let(:user) { create(:user) } - it 'writes trackable attributes' do - expect do + it "writes trackable attributes" do + expect { user.update_tracked_fields!(request) - end.to change { user.reload.current_sign_in_at } + }.to change { user.reload.current_sign_in_at } end - it 'does not write trackable attributes when called a second time within the hour' do + it "does not write trackable attributes when called a second time within the hour" do user.update_tracked_fields!(request) - expect do + expect { user.update_tracked_fields!(request) - end.not_to change { user.reload.current_sign_in_at } + }.not_to change { user.reload.current_sign_in_at } end - it 'writes trackable attributes for a different user' do + it "writes trackable attributes for a different user" do user2 = create(:user) user.update_tracked_fields!(request) - expect do + expect { user2.update_tracked_fields!(request) - end.to change { user2.reload.current_sign_in_at } + }.to change { user2.reload.current_sign_in_at } end - it 'does not write if the DB is in read-only mode' do + it "does not write if the DB is in read-only mode" do expect(Gitlab::Database).to receive(:read_only?).and_return(true) - expect do + expect { user.update_tracked_fields!(request) - end.not_to change { user.reload.current_sign_in_at } + }.not_to change { user.reload.current_sign_in_at } end end - shared_context 'user keys' do + shared_context "user keys" do let(:user) { create(:user) } let!(:key) { create(:key, user: user) } let!(:deploy_key) { create(:deploy_key, user: user) } end - describe '#keys' do - include_context 'user keys' + describe "#keys" do + include_context "user keys" - context 'with key and deploy key stored' do - it 'returns stored key, but not deploy_key' do + context "with key and deploy key stored" do + it "returns stored key, but not deploy_key" do expect(user.keys).to include key expect(user.keys).not_to include deploy_key end end end - describe '#deploy_keys' do - include_context 'user keys' + describe "#deploy_keys" do + include_context "user keys" - context 'with key and deploy key stored' do - it 'returns stored deploy key, but not normal key' do + context "with key and deploy key stored" do + it "returns stored deploy key, but not normal key" do expect(user.deploy_keys).to include deploy_key expect(user.deploy_keys).not_to include key end end end - describe '#confirm' do + describe "#confirm" do before do allow_any_instance_of(ApplicationSetting).to receive(:send_user_confirmation_email).and_return(true) end - let(:user) { create(:user, confirmed_at: nil, unconfirmed_email: 'test@gitlab.com') } + let(:user) { create(:user, confirmed_at: nil, unconfirmed_email: "test@gitlab.com") } - it 'returns unconfirmed' do + it "returns unconfirmed" do expect(user.confirmed?).to be_falsey end - it 'confirms a user' do + it "confirms a user" do user.confirm expect(user.confirmed?).to be_truthy end end - describe '#to_reference' do + describe "#to_reference" do let(:user) { create(:user) } - it 'returns a String reference to the object' do + it "returns a String reference to the object" do expect(user.to_reference).to eq "@#{user.username}" end end - describe '#generate_password' do + describe "#generate_password" do it "does not generate password by default" do - user = create(:user, password: 'abcdefghe') + user = create(:user, password: "abcdefghe") - expect(user.password).to eq('abcdefghe') + expect(user.password).to eq("abcdefghe") end end - describe 'ensure user preference' do - it 'has user preference upon user initialization' do + describe "ensure user preference" do + it "has user preference upon user initialization" do user = build(:user) expect(user.user_preference).to be_present @@ -767,33 +767,33 @@ describe User do end end - describe 'ensure incoming email token' do - it 'has incoming email token' do + describe "ensure incoming email token" do + it "has incoming email token" do user = create(:user) expect(user.incoming_email_token).not_to be_blank end - it 'uses SecureRandom to generate the incoming email token' do - expect(SecureRandom).to receive(:hex).and_return('3b8ca303') + it "uses SecureRandom to generate the incoming email token" do + expect(SecureRandom).to receive(:hex).and_return("3b8ca303") user = create(:user) - expect(user.incoming_email_token).to eql('gitlab') + expect(user.incoming_email_token).to eql("gitlab") end end - describe '#ensure_user_rights_and_limits' do - describe 'with external user' do + describe "#ensure_user_rights_and_limits" do + describe "with external user" do let(:user) { create(:user, external: true) } - it 'receives callback when external changes' do + it "receives callback when external changes" do expect(user).to receive(:ensure_user_rights_and_limits) user.update(external: false) end - it 'ensures correct rights and limits for user' do + it "ensures correct rights and limits for user" do stub_config_setting(default_can_create_group: true) expect { user.update(external: false) }.to change { user.can_create_group }.to(true) @@ -801,24 +801,24 @@ describe User do end end - describe 'without external user' do + describe "without external user" do let(:user) { create(:user, external: false) } - it 'receives callback when external changes' do + it "receives callback when external changes" do expect(user).to receive(:ensure_user_rights_and_limits) user.update(external: true) end - it 'ensures correct rights and limits for user' do + it "ensures correct rights and limits for user" do expect { user.update(external: true) }.to change { user.can_create_group }.to(false) .and change { user.projects_limit }.to(0) end end end - describe 'feed token' do - it 'ensures a feed token on read' do + describe "feed token" do + it "ensures a feed token on read" do user = create(:user, feed_token: nil) feed_token = user.feed_token @@ -827,28 +827,28 @@ describe User do end end - describe '#recently_sent_password_reset?' do - it 'is false when reset_password_sent_at is nil' do + describe "#recently_sent_password_reset?" do + it "is false when reset_password_sent_at is nil" do user = build_stubbed(:user, reset_password_sent_at: nil) expect(user.recently_sent_password_reset?).to eq false end - it 'is false when sent more than one minute ago' do + it "is false when sent more than one minute ago" do user = build_stubbed(:user, reset_password_sent_at: 5.minutes.ago) expect(user.recently_sent_password_reset?).to eq false end - it 'is true when sent less than one minute ago' do + it "is true when sent less than one minute ago" do user = build_stubbed(:user, reset_password_sent_at: Time.now) expect(user.recently_sent_password_reset?).to eq true end end - describe '#disable_two_factor!' do - it 'clears all 2FA-related fields' do + describe "#disable_two_factor!" do + it "clears all 2FA-related fields" do user = create(:user, :two_factor) expect(user).to be_two_factor_enabled @@ -867,17 +867,17 @@ describe User do end end - describe 'projects' do + describe "projects" do before do @user = create(:user) @project = create(:project, namespace: @user.namespace) - @project_2 = create(:project, group: create(:group)) do |project| + @project_2 = create(:project, group: create(:group)) { |project| project.add_maintainer(@user) - end - @project_3 = create(:project, group: create(:group)) do |project| + } + @project_3 = create(:project, group: create(:group)) { |project| project.add_developer(@user) - end + } end it { expect(@user.authorized_projects).to include(@project) } @@ -891,7 +891,7 @@ describe User do it { expect(@user.personal_projects).not_to include(@project_3) } end - describe 'groups' do + describe "groups" do let(:user) { create(:user) } let(:group) { create(:group) } @@ -905,45 +905,45 @@ describe User do it { expect(user.namespaces).to contain_exactly(user.namespace, group) } it { expect(user.manageable_namespaces).to contain_exactly(user.namespace, group) } - context 'with child groups', :nested_groups do + context "with child groups", :nested_groups do let!(:subgroup) { create(:group, parent: group) } - describe '#manageable_namespaces' do - it 'includes all the namespaces the user can manage' do + describe "#manageable_namespaces" do + it "includes all the namespaces the user can manage" do expect(user.manageable_namespaces).to contain_exactly(user.namespace, group, subgroup) end end - describe '#manageable_groups' do - it 'includes all the namespaces the user can manage' do + describe "#manageable_groups" do + it "includes all the namespaces the user can manage" do expect(user.manageable_groups).to contain_exactly(group, subgroup) end - it 'does not include duplicates if a membership was added for the subgroup' do + it "does not include duplicates if a membership was added for the subgroup" do subgroup.add_owner(user) expect(user.manageable_groups).to contain_exactly(group, subgroup) end end - describe '#manageable_groups_with_routes' do - it 'eager loads routes from manageable groups' do + describe "#manageable_groups_with_routes" do + it "eager loads routes from manageable groups" do control_count = - ActiveRecord::QueryRecorder.new(skip_cached: false) do + ActiveRecord::QueryRecorder.new(skip_cached: false) { user.manageable_groups_with_routes.map(&:route) - end.count + }.count create(:group, parent: subgroup) - expect do + expect { user.manageable_groups_with_routes.map(&:route) - end.not_to exceed_all_query_limit(control_count) + }.not_to exceed_all_query_limit(control_count) end end end end - describe 'group multiple owners' do + describe "group multiple owners" do before do @user = create :user @user2 = create :user @@ -956,7 +956,7 @@ describe User do it { expect(@user2.several_namespaces?).to be_truthy } end - describe 'namespaced' do + describe "namespaced" do before do @user = create :user @project = create(:project, namespace: @user.namespace) @@ -966,8 +966,8 @@ describe User do it { expect(@user.namespaces).to eq([@user.namespace]) } end - describe 'blocking user' do - let(:user) { create(:user, name: 'John Smith') } + describe "blocking user" do + let(:user) { create(:user, name: "John Smith") } it "blocks user" do user.block @@ -976,47 +976,47 @@ describe User do end end - describe '.filter_items' do + describe ".filter_items" do let(:user) { double } - it 'filters by active users by default' do + it "filters by active users by default" do expect(described_class).to receive(:active).and_return([user]) expect(described_class.filter_items(nil)).to include user end - it 'filters by admins' do + it "filters by admins" do expect(described_class).to receive(:admins).and_return([user]) - expect(described_class.filter_items('admins')).to include user + expect(described_class.filter_items("admins")).to include user end - it 'filters by blocked' do + it "filters by blocked" do expect(described_class).to receive(:blocked).and_return([user]) - expect(described_class.filter_items('blocked')).to include user + expect(described_class.filter_items("blocked")).to include user end - it 'filters by two_factor_disabled' do + it "filters by two_factor_disabled" do expect(described_class).to receive(:without_two_factor).and_return([user]) - expect(described_class.filter_items('two_factor_disabled')).to include user + expect(described_class.filter_items("two_factor_disabled")).to include user end - it 'filters by two_factor_enabled' do + it "filters by two_factor_enabled" do expect(described_class).to receive(:with_two_factor).and_return([user]) - expect(described_class.filter_items('two_factor_enabled')).to include user + expect(described_class.filter_items("two_factor_enabled")).to include user end - it 'filters by wop' do + it "filters by wop" do expect(described_class).to receive(:without_projects).and_return([user]) - expect(described_class.filter_items('wop')).to include user + expect(described_class.filter_items("wop")).to include user end end - describe '.without_projects' do + describe ".without_projects" do let!(:project) { create(:project, :public, :access_requestable) } let!(:user) { create(:user) } let!(:user_without_project) { create(:user) } @@ -1027,7 +1027,7 @@ describe User do project.add_maintainer(user) # create invite to projet - create(:project_member, :developer, project: project, invite_token: '1234', invite_email: 'inviteduser1@example.com') + create(:project_member, :developer, project: project, invite_token: "1234", invite_email: "inviteduser1@example.com") # create request to join project project.request_access(user_without_project2) @@ -1038,19 +1038,19 @@ describe User do it { expect(described_class.without_projects).to include user_without_project2 } end - describe 'user creation' do - describe 'normal user' do - let(:user) { create(:user, name: 'John Smith') } + describe "user creation" do + describe "normal user" do + let(:user) { create(:user, name: "John Smith") } it { expect(user.admin?).to be_falsey } it { expect(user.require_ssh_key?).to be_truthy } it { expect(user.can_create_group?).to be_truthy } it { expect(user.can_create_project?).to be_truthy } - it { expect(user.first_name).to eq('John') } + it { expect(user.first_name).to eq("John") } it { expect(user.external).to be_falsey } end - describe 'with defaults' do + describe "with defaults" do let(:user) { described_class.new } it "applies defaults to user" do @@ -1061,7 +1061,7 @@ describe User do end end - describe 'with default overrides' do + describe "with default overrides" do let(:user) { described_class.new(projects_limit: 123, can_create_group: false, can_create_team: true) } it "applies defaults to user" do @@ -1070,7 +1070,7 @@ describe User do expect(user.theme_id).to eq(1) end - it 'does not undo projects_limit setting if it matches old DB default of 10' do + it "does not undo projects_limit setting if it matches old DB default of 10" do # If the real default project limit is 10 then this test is worthless expect(Gitlab.config.gitlab.default_projects_limit).not_to eq(10) user = described_class.new(projects_limit: 10) @@ -1078,7 +1078,7 @@ describe User do end end - context 'when Gitlab::CurrentSettings.user_default_external is true' do + context "when Gitlab::CurrentSettings.user_default_external is true" do before do stub_application_setting(user_default_external: true) end @@ -1091,7 +1091,7 @@ describe User do expect(user.projects_limit).to be 0 end - describe 'with default overrides' do + describe "with default overrides" do it "creates a non-external user" do user = create(:user, external: false) @@ -1100,11 +1100,11 @@ describe User do end end - describe '#require_ssh_key?', :use_clean_rails_memory_store_caching do + describe "#require_ssh_key?", :use_clean_rails_memory_store_caching do protocol_and_expectation = { - 'http' => false, - 'ssh' => true, - '' => true + "http" => false, + "ssh" => true, + "" => true, } protocol_and_expectation.each do |protocol, expected| @@ -1116,7 +1116,7 @@ describe User do end end - it 'returns false when the user has 1 or more SSH keys' do + it "returns false when the user has 1 or more SSH keys" do key = create(:personal_key) expect(key.user.require_ssh_key?).to eq(false) @@ -1124,16 +1124,16 @@ describe User do end end - describe '.find_for_database_authentication' do - it 'strips whitespace from login' do + describe ".find_for_database_authentication" do + it "strips whitespace from login" do user = create(:user) - expect(described_class.find_for_database_authentication({ login: " #{user.username} " })).to eq user + expect(described_class.find_for_database_authentication({login: " #{user.username} "})).to eq user end end - describe '.find_by_any_email' do - it 'finds user through private commit email' do + describe ".find_by_any_email" do + it "finds user through private commit email" do user = create(:user) private_email = user.private_commit_email @@ -1141,85 +1141,85 @@ describe User do expect(described_class.find_by_any_email(private_email, confirmed: true)).to eq(user) end - it 'finds by primary email' do - user = create(:user, email: 'foo@example.com') + it "finds by primary email" do + user = create(:user, email: "foo@example.com") expect(described_class.find_by_any_email(user.email)).to eq user expect(described_class.find_by_any_email(user.email, confirmed: true)).to eq user end - it 'finds by uppercased email' do - user = create(:user, email: 'foo@example.com') + it "finds by uppercased email" do + user = create(:user, email: "foo@example.com") expect(described_class.find_by_any_email(user.email.upcase)).to eq user expect(described_class.find_by_any_email(user.email.upcase, confirmed: true)).to eq user end - context 'finds by secondary email' do + context "finds by secondary email" do let(:user) { email.user } - context 'primary email confirmed' do - context 'secondary email confirmed' do - let!(:email) { create(:email, :confirmed, email: 'foo@example.com') } + context "primary email confirmed" do + context "secondary email confirmed" do + let!(:email) { create(:email, :confirmed, email: "foo@example.com") } - it 'finds user respecting the confirmed flag' do + it "finds user respecting the confirmed flag" do expect(described_class.find_by_any_email(email.email)).to eq user expect(described_class.find_by_any_email(email.email, confirmed: true)).to eq user end end - context 'secondary email not confirmed' do - let!(:email) { create(:email, email: 'foo@example.com') } + context "secondary email not confirmed" do + let!(:email) { create(:email, email: "foo@example.com") } - it 'finds user respecting the confirmed flag' do + it "finds user respecting the confirmed flag" do expect(described_class.find_by_any_email(email.email)).to eq user expect(described_class.find_by_any_email(email.email, confirmed: true)).to be_nil end end end - context 'primary email not confirmed' do + context "primary email not confirmed" do let(:user) { create(:user, confirmed_at: nil) } - let!(:email) { create(:email, :confirmed, user: user, email: 'foo@example.com') } + let!(:email) { create(:email, :confirmed, user: user, email: "foo@example.com") } - it 'finds user respecting the confirmed flag' do + it "finds user respecting the confirmed flag" do expect(described_class.find_by_any_email(email.email)).to eq user expect(described_class.find_by_any_email(email.email, confirmed: true)).to be_nil end end end - it 'returns nil when nothing found' do - expect(described_class.find_by_any_email('')).to be_nil + it "returns nil when nothing found" do + expect(described_class.find_by_any_email("")).to be_nil end - it 'returns nil when user is not confirmed' do - user = create(:user, email: 'foo@example.com', confirmed_at: nil) + it "returns nil when user is not confirmed" do + user = create(:user, email: "foo@example.com", confirmed_at: nil) expect(described_class.find_by_any_email(user.email, confirmed: false)).to eq(user) expect(described_class.find_by_any_email(user.email, confirmed: true)).to be_nil end end - describe '.by_any_email' do - it 'returns an ActiveRecord::Relation' do - expect(described_class.by_any_email('foo@example.com')) + describe ".by_any_email" do + it "returns an ActiveRecord::Relation" do + expect(described_class.by_any_email("foo@example.com")) .to be_a_kind_of(ActiveRecord::Relation) end - it 'returns a relation of users' do + it "returns a relation of users" do user = create(:user) expect(described_class.by_any_email(user.email)).to eq([user]) end - it 'returns a relation of users for confirmed users' do + it "returns a relation of users for confirmed users" do user = create(:user) expect(described_class.by_any_email(user.email, confirmed: true)).to eq([user]) end - it 'finds user through a private commit email' do + it "finds user through a private commit email" do user = create(:user) private_email = user.private_commit_email @@ -1227,7 +1227,7 @@ describe User do expect(described_class.by_any_email(private_email, confirmed: true)).to eq([user]) end - it 'finds user through a private commit email in an array' do + it "finds user through a private commit email in an array" do user = create(:user) private_email = user.private_commit_email @@ -1236,268 +1236,268 @@ describe User do end end - describe '.search' do - let!(:user) { create(:user, name: 'user', username: 'usern', email: 'email@gmail.com') } - let!(:user2) { create(:user, name: 'user name', username: 'username', email: 'someemail@gmail.com') } - let!(:user3) { create(:user, name: 'us', username: 'se', email: 'foo@gmail.com') } + describe ".search" do + let!(:user) { create(:user, name: "user", username: "usern", email: "email@gmail.com") } + let!(:user2) { create(:user, name: "user name", username: "username", email: "someemail@gmail.com") } + let!(:user3) { create(:user, name: "us", username: "se", email: "foo@gmail.com") } - describe 'name matching' do - it 'returns users with a matching name with exact match first' do + describe "name matching" do + it "returns users with a matching name with exact match first" do expect(described_class.search(user.name)).to eq([user, user2]) end - it 'returns users with a partially matching name' do + it "returns users with a partially matching name" do expect(described_class.search(user.name[0..2])).to eq([user, user2]) end - it 'returns users with a matching name regardless of the casing' do + it "returns users with a matching name regardless of the casing" do expect(described_class.search(user2.name.upcase)).to eq([user2]) end - it 'returns users with a exact matching name shorter than 3 chars' do + it "returns users with a exact matching name shorter than 3 chars" do expect(described_class.search(user3.name)).to eq([user3]) end - it 'returns users with a exact matching name shorter than 3 chars regardless of the casing' do + it "returns users with a exact matching name shorter than 3 chars regardless of the casing" do expect(described_class.search(user3.name.upcase)).to eq([user3]) end end - describe 'email matching' do - it 'returns users with a matching Email' do + describe "email matching" do + it "returns users with a matching Email" do expect(described_class.search(user.email)).to eq([user]) end - it 'does not return users with a partially matching Email' do + it "does not return users with a partially matching Email" do expect(described_class.search(user.email[0..2])).not_to include(user, user2) end - it 'returns users with a matching Email regardless of the casing' do + it "returns users with a matching Email regardless of the casing" do expect(described_class.search(user2.email.upcase)).to eq([user2]) end end - describe 'username matching' do - it 'returns users with a matching username' do + describe "username matching" do + it "returns users with a matching username" do expect(described_class.search(user.username)).to eq([user, user2]) end - it 'returns users with a partially matching username' do + it "returns users with a partially matching username" do expect(described_class.search(user.username[0..2])).to eq([user, user2]) end - it 'returns users with a matching username regardless of the casing' do + it "returns users with a matching username regardless of the casing" do expect(described_class.search(user2.username.upcase)).to eq([user2]) end - it 'returns users with a exact matching username shorter than 3 chars' do + it "returns users with a exact matching username shorter than 3 chars" do expect(described_class.search(user3.username)).to eq([user3]) end - it 'returns users with a exact matching username shorter than 3 chars regardless of the casing' do + it "returns users with a exact matching username shorter than 3 chars regardless of the casing" do expect(described_class.search(user3.username.upcase)).to eq([user3]) end end - it 'returns no matches for an empty string' do - expect(described_class.search('')).to be_empty + it "returns no matches for an empty string" do + expect(described_class.search("")).to be_empty end - it 'returns no matches for nil' do + it "returns no matches for nil" do expect(described_class.search(nil)).to be_empty end end - describe '.search_with_secondary_emails' do + describe ".search_with_secondary_emails" do delegate :search_with_secondary_emails, to: :described_class - let!(:user) { create(:user, name: 'John Doe', username: 'john.doe', email: 'john.doe@example.com' ) } - let!(:another_user) { create(:user, name: 'Albert Smith', username: 'albert.smith', email: 'albert.smith@example.com' ) } + let!(:user) { create(:user, name: "John Doe", username: "john.doe", email: "john.doe@example.com") } + let!(:another_user) { create(:user, name: "Albert Smith", username: "albert.smith", email: "albert.smith@example.com") } let!(:email) do - create(:email, user: another_user, email: 'alias@example.com') + create(:email, user: another_user, email: "alias@example.com") end - it 'returns users with a matching name' do + it "returns users with a matching name" do expect(search_with_secondary_emails(user.name)).to eq([user]) end - it 'returns users with a partially matching name' do + it "returns users with a partially matching name" do expect(search_with_secondary_emails(user.name[0..2])).to eq([user]) end - it 'returns users with a matching name regardless of the casing' do + it "returns users with a matching name regardless of the casing" do expect(search_with_secondary_emails(user.name.upcase)).to eq([user]) end - it 'returns users with a matching email' do + it "returns users with a matching email" do expect(search_with_secondary_emails(user.email)).to eq([user]) end - it 'does not return users with a partially matching email' do + it "does not return users with a partially matching email" do expect(search_with_secondary_emails(user.email[0..2])).not_to include([user]) end - it 'returns users with a matching email regardless of the casing' do + it "returns users with a matching email regardless of the casing" do expect(search_with_secondary_emails(user.email.upcase)).to eq([user]) end - it 'returns users with a matching username' do + it "returns users with a matching username" do expect(search_with_secondary_emails(user.username)).to eq([user]) end - it 'returns users with a partially matching username' do + it "returns users with a partially matching username" do expect(search_with_secondary_emails(user.username[0..2])).to eq([user]) end - it 'returns users with a matching username regardless of the casing' do + it "returns users with a matching username regardless of the casing" do expect(search_with_secondary_emails(user.username.upcase)).to eq([user]) end - it 'returns users with a matching whole secondary email' do + it "returns users with a matching whole secondary email" do expect(search_with_secondary_emails(email.email)).to eq([email.user]) end - it 'does not return users with a matching part of secondary email' do + it "does not return users with a matching part of secondary email" do expect(search_with_secondary_emails(email.email[1..4])).not_to include([email.user]) end - it 'returns no matches for an empty string' do - expect(search_with_secondary_emails('')).to be_empty + it "returns no matches for an empty string" do + expect(search_with_secondary_emails("")).to be_empty end - it 'returns no matches for nil' do + it "returns no matches for nil" do expect(search_with_secondary_emails(nil)).to be_empty end end - describe '.find_by_ssh_key_id' do - context 'using an existing SSH key ID' do + describe ".find_by_ssh_key_id" do + context "using an existing SSH key ID" do let(:user) { create(:user) } let(:key) { create(:key, user: user) } - it 'returns the corresponding User' do + it "returns the corresponding User" do expect(described_class.find_by_ssh_key_id(key.id)).to eq(user) end end - context 'using an invalid SSH key ID' do - it 'returns nil' do + context "using an invalid SSH key ID" do + it "returns nil" do expect(described_class.find_by_ssh_key_id(-1)).to be_nil end end end - describe '.by_login' do - let(:username) { 'John' } + describe ".by_login" do + let(:username) { "John" } let!(:user) { create(:user, username: username) } - it 'gets the correct user' do + it "gets the correct user" do expect(described_class.by_login(user.email.upcase)).to eq user expect(described_class.by_login(user.email)).to eq user expect(described_class.by_login(username.downcase)).to eq user expect(described_class.by_login(username)).to eq user expect(described_class.by_login(nil)).to be_nil - expect(described_class.by_login('')).to be_nil + expect(described_class.by_login("")).to be_nil end end - describe '.find_by_username' do - it 'returns nil if not found' do - expect(described_class.find_by_username('JohnDoe')).to be_nil + describe ".find_by_username" do + it "returns nil if not found" do + expect(described_class.find_by_username("JohnDoe")).to be_nil end - it 'is case-insensitive' do - user = create(:user, username: 'JohnDoe') + it "is case-insensitive" do + user = create(:user, username: "JohnDoe") - expect(described_class.find_by_username('JOHNDOE')).to eq user + expect(described_class.find_by_username("JOHNDOE")).to eq user end end - describe '.find_by_username!' do - it 'raises RecordNotFound' do - expect { described_class.find_by_username!('JohnDoe') } + describe ".find_by_username!" do + it "raises RecordNotFound" do + expect { described_class.find_by_username!("JohnDoe") } .to raise_error(ActiveRecord::RecordNotFound) end - it 'is case-insensitive' do - user = create(:user, username: 'JohnDoe') + it "is case-insensitive" do + user = create(:user, username: "JohnDoe") - expect(described_class.find_by_username!('JOHNDOE')).to eq user + expect(described_class.find_by_username!("JOHNDOE")).to eq user end end - describe '.find_by_full_path' do + describe ".find_by_full_path" do let!(:user) { create(:user) } - context 'with a route matching the given path' do + context "with a route matching the given path" do let!(:route) { user.namespace.route } - it 'returns the user' do + it "returns the user" do expect(described_class.find_by_full_path(route.path)).to eq(user) end - it 'is case-insensitive' do + it "is case-insensitive" do expect(described_class.find_by_full_path(route.path.upcase)).to eq(user) expect(described_class.find_by_full_path(route.path.downcase)).to eq(user) end end - context 'with a redirect route matching the given path' do - let!(:redirect_route) { user.namespace.redirect_routes.create(path: 'foo') } + context "with a redirect route matching the given path" do + let!(:redirect_route) { user.namespace.redirect_routes.create(path: "foo") } - context 'without the follow_redirects option' do - it 'returns nil' do + context "without the follow_redirects option" do + it "returns nil" do expect(described_class.find_by_full_path(redirect_route.path)).to eq(nil) end end - context 'with the follow_redirects option set to true' do - it 'returns the user' do + context "with the follow_redirects option set to true" do + it "returns the user" do expect(described_class.find_by_full_path(redirect_route.path, follow_redirects: true)).to eq(user) end - it 'is case-insensitive' do + it "is case-insensitive" do expect(described_class.find_by_full_path(redirect_route.path.upcase, follow_redirects: true)).to eq(user) expect(described_class.find_by_full_path(redirect_route.path.downcase, follow_redirects: true)).to eq(user) end end end - context 'without a route or a redirect route matching the given path' do - context 'without the follow_redirects option' do - it 'returns nil' do - expect(described_class.find_by_full_path('unknown')).to eq(nil) + context "without a route or a redirect route matching the given path" do + context "without the follow_redirects option" do + it "returns nil" do + expect(described_class.find_by_full_path("unknown")).to eq(nil) end end - context 'with the follow_redirects option set to true' do - it 'returns nil' do - expect(described_class.find_by_full_path('unknown', follow_redirects: true)).to eq(nil) + context "with the follow_redirects option set to true" do + it "returns nil" do + expect(described_class.find_by_full_path("unknown", follow_redirects: true)).to eq(nil) end end end - context 'with a group route matching the given path' do - let!(:group) { create(:group, path: 'group_path') } + context "with a group route matching the given path" do + let!(:group) { create(:group, path: "group_path") } - context 'when the group namespace has an owner_id (legacy data)' do + context "when the group namespace has an owner_id (legacy data)" do before do group.update!(owner_id: user.id) end - it 'returns nil' do - expect(described_class.find_by_full_path('group_path')).to eq(nil) + it "returns nil" do + expect(described_class.find_by_full_path("group_path")).to eq(nil) end end - context 'when the group namespace does not have an owner_id' do - it 'returns nil' do - expect(described_class.find_by_full_path('group_path')).to eq(nil) + context "when the group namespace does not have an owner_id" do + it "returns nil" do + expect(described_class.find_by_full_path("group_path")).to eq(nil) end end end end - describe 'all_ssh_keys' do + describe "all_ssh_keys" do it { is_expected.to have_many(:keys).dependent(:destroy) } it "has all ssh keys" do @@ -1508,41 +1508,41 @@ describe User do end end - describe '#avatar_type' do + describe "#avatar_type" do let(:user) { create(:user) } - it 'is true if avatar is image' do - user.update_attribute(:avatar, 'uploads/avatar.png') + it "is true if avatar is image" do + user.update_attribute(:avatar, "uploads/avatar.png") expect(user.avatar_type).to be_truthy end - it 'is false if avatar is html page' do - user.update_attribute(:avatar, 'uploads/avatar.html') + it "is false if avatar is html page" do + user.update_attribute(:avatar, "uploads/avatar.html") - expect(user.avatar_type).to eq(['file format is not supported. Please try one of the following supported formats: png, jpg, jpeg, gif, bmp, tiff, ico']) + expect(user.avatar_type).to eq(["file format is not supported. Please try one of the following supported formats: png, jpg, jpeg, gif, bmp, tiff, ico"]) end end - describe '#avatar_url' do + describe "#avatar_url" do let(:user) { create(:user, :with_avatar) } - context 'when avatar file is uploaded' do - it 'shows correct avatar url' do + context "when avatar file is uploaded" do + it "shows correct avatar url" do expect(user.avatar_url).to eq(user.avatar.url) expect(user.avatar_url(only_path: false)).to eq([Gitlab.config.gitlab.url, user.avatar.url].join) end end end - describe '#accept_pending_invitations!' do - let(:user) { create(:user, email: 'user@email.com') } + describe "#accept_pending_invitations!" do + let(:user) { create(:user, email: "user@email.com") } let!(:project_member_invite) { create(:project_member, :invited, invite_email: user.email) } let!(:group_member_invite) { create(:group_member, :invited, invite_email: user.email) } - let!(:external_project_member_invite) { create(:project_member, :invited, invite_email: 'external@email.com') } - let!(:external_group_member_invite) { create(:group_member, :invited, invite_email: 'external@email.com') } + let!(:external_project_member_invite) { create(:project_member, :invited, invite_email: "external@email.com") } + let!(:external_group_member_invite) { create(:group_member, :invited, invite_email: "external@email.com") } - it 'accepts all the user members pending invitations and returns the accepted_members' do + it "accepts all the user members pending invitations and returns the accepted_members" do accepted_members = user.accept_pending_invitations! expect(accepted_members).to match_array([project_member_invite, group_member_invite]) @@ -1553,10 +1553,10 @@ describe User do end end - describe '#all_emails' do + describe "#all_emails" do let(:user) { create(:user) } - it 'returns all emails' do + it "returns all emails" do email_confirmed = create :email, user: user, confirmed_at: Time.now email_unconfirmed = create :email, user: user user.reload @@ -1570,10 +1570,10 @@ describe User do end end - describe '#verified_emails' do + describe "#verified_emails" do let(:user) { create(:user) } - it 'returns only confirmed emails' do + it "returns only confirmed emails" do email_confirmed = create :email, user: user, confirmed_at: Time.now create :email, user: user @@ -1585,10 +1585,10 @@ describe User do end end - describe '#verified_email?' do + describe "#verified_email?" do let(:user) { create(:user) } - it 'returns true when the email is verified/confirmed' do + it "returns true when the email is verified/confirmed" do email_confirmed = create :email, user: user, confirmed_at: Time.now create :email, user: user user.reload @@ -1597,19 +1597,19 @@ describe User do expect(user.verified_email?(email_confirmed.email.titlecase)).to be_truthy end - it 'returns true when user is found through private commit email' do + it "returns true when user is found through private commit email" do expect(user.verified_email?(user.private_commit_email)).to be_truthy end - it 'returns true for an outdated private commit email' do + it "returns true for an outdated private commit email" do old_email = user.private_commit_email - user.update!(username: 'changed-username') + user.update!(username: "changed-username") expect(user.verified_email?(old_email)).to be_truthy end - it 'returns false when the email is not verified/confirmed' do + it "returns false when the email is not verified/confirmed" do email_unconfirmed = create :email, user: user user.reload @@ -1617,10 +1617,10 @@ describe User do end end - describe '#requires_ldap_check?' do + describe "#requires_ldap_check?" do let(:user) { described_class.new } - it 'is false when LDAP is disabled' do + it "is false when LDAP is disabled" do # Create a condition which would otherwise cause 'true' to be returned allow(user).to receive(:ldap_user?).and_return(true) user.last_credential_check_at = nil @@ -1628,29 +1628,29 @@ describe User do expect(user.requires_ldap_check?).to be_falsey end - context 'when LDAP is enabled' do + context "when LDAP is enabled" do before do allow(Gitlab.config.ldap).to receive(:enabled).and_return(true) end - it 'is false for non-LDAP users' do + it "is false for non-LDAP users" do allow(user).to receive(:ldap_user?).and_return(false) expect(user.requires_ldap_check?).to be_falsey end - context 'and when the user is an LDAP user' do + context "and when the user is an LDAP user" do before do allow(user).to receive(:ldap_user?).and_return(true) end - it 'is true when the user has never had an LDAP check before' do + it "is true when the user has never had an LDAP check before" do user.last_credential_check_at = nil expect(user.requires_ldap_check?).to be_truthy end - it 'is true when the last LDAP check happened over 1 hour ago' do + it "is true when the last LDAP check happened over 1 hour ago" do user.last_credential_check_at = 2.hours.ago expect(user.requires_ldap_check?).to be_truthy @@ -1659,39 +1659,39 @@ describe User do end end - context 'ldap synchronized user' do - describe '#ldap_user?' do - it 'is true if provider name starts with ldap' do - user = create(:omniauth_user, provider: 'ldapmain') + context "ldap synchronized user" do + describe "#ldap_user?" do + it "is true if provider name starts with ldap" do + user = create(:omniauth_user, provider: "ldapmain") expect(user.ldap_user?).to be_truthy end - it 'is false for other providers' do - user = create(:omniauth_user, provider: 'other-provider') + it "is false for other providers" do + user = create(:omniauth_user, provider: "other-provider") expect(user.ldap_user?).to be_falsey end - it 'is false if no extern_uid is provided' do + it "is false if no extern_uid is provided" do user = create(:omniauth_user, extern_uid: nil) expect(user.ldap_user?).to be_falsey end end - describe '#ldap_identity' do - it 'returns ldap identity' do + describe "#ldap_identity" do + it "returns ldap identity" do user = create :omniauth_user expect(user.ldap_identity.provider).not_to be_empty end end - describe '#ldap_block' do - let(:user) { create(:omniauth_user, provider: 'ldapmain', name: 'John Smith') } + describe "#ldap_block" do + let(:user) { create(:omniauth_user, provider: "ldapmain", name: "John Smith") } - it 'blocks user flaging the action caming from ldap' do + it "blocks user flaging the action caming from ldap" do user.ldap_block expect(user.blocked?).to be_truthy @@ -1700,64 +1700,64 @@ describe User do end end - describe '#full_website_url' do + describe "#full_website_url" do let(:user) { create(:user) } - it 'begins with http if website url omits it' do - user.website_url = 'test.com' + it "begins with http if website url omits it" do + user.website_url = "test.com" - expect(user.full_website_url).to eq 'http://test.com' + expect(user.full_website_url).to eq "http://test.com" end - it 'begins with http if website url begins with http' do - user.website_url = 'http://test.com' + it "begins with http if website url begins with http" do + user.website_url = "http://test.com" - expect(user.full_website_url).to eq 'http://test.com' + expect(user.full_website_url).to eq "http://test.com" end - it 'begins with https if website url begins with https' do - user.website_url = 'https://test.com' + it "begins with https if website url begins with https" do + user.website_url = "https://test.com" - expect(user.full_website_url).to eq 'https://test.com' + expect(user.full_website_url).to eq "https://test.com" end end - describe '#short_website_url' do + describe "#short_website_url" do let(:user) { create(:user) } - it 'does not begin with http if website url omits it' do - user.website_url = 'test.com' + it "does not begin with http if website url omits it" do + user.website_url = "test.com" - expect(user.short_website_url).to eq 'test.com' + expect(user.short_website_url).to eq "test.com" end - it 'does not begin with http if website url begins with http' do - user.website_url = 'http://test.com' + it "does not begin with http if website url begins with http" do + user.website_url = "http://test.com" - expect(user.short_website_url).to eq 'test.com' + expect(user.short_website_url).to eq "test.com" end - it 'does not begin with https if website url begins with https' do - user.website_url = 'https://test.com' + it "does not begin with https if website url begins with https" do + user.website_url = "https://test.com" - expect(user.short_website_url).to eq 'test.com' + expect(user.short_website_url).to eq "test.com" end end - describe '#sanitize_attrs' do - let(:user) { build(:user, name: 'test & user', skype: 'test&user') } + describe "#sanitize_attrs" do + let(:user) { build(:user, name: "test & user", skype: "test&user") } - it 'encodes HTML entities in the Skype attribute' do - expect { user.sanitize_attrs }.to change { user.skype }.to('test&user') + it "encodes HTML entities in the Skype attribute" do + expect { user.sanitize_attrs }.to change { user.skype }.to("test&user") end - it 'does not encode HTML entities in the name attribute' do + it "does not encode HTML entities in the name attribute" do expect { user.sanitize_attrs }.not_to change { user.name } end end - describe '#starred?' do - it 'determines if user starred a project' do + describe "#starred?" do + it "determines if user starred a project" do user = create :user project1 = create(:project, :public) project2 = create(:project, :public) @@ -1787,8 +1787,8 @@ describe User do end end - describe '#toggle_star' do - it 'toggles stars' do + describe "#toggle_star" do + it "toggles stars" do user = create :user project = create(:project, :public) @@ -1804,67 +1804,67 @@ describe User do end end - describe '.find_by_private_commit_email' do - context 'with email' do + describe ".find_by_private_commit_email" do + context "with email" do set(:user) { create(:user) } - it 'returns user through private commit email' do + it "returns user through private commit email" do expect(described_class.find_by_private_commit_email(user.private_commit_email)).to eq(user) end - it 'returns nil when email other than private_commit_email is used' do + it "returns nil when email other than private_commit_email is used" do expect(described_class.find_by_private_commit_email(user.email)).to be_nil end end - it 'returns nil when email is nil' do + it "returns nil when email is nil" do expect(described_class.find_by_private_commit_email(nil)).to be_nil end end - describe '#sort_by_attribute' do + describe "#sort_by_attribute" do before do described_class.delete_all - @user = create :user, created_at: Date.today, current_sign_in_at: Date.today, name: 'Alpha' - @user1 = create :user, created_at: Date.today - 1, current_sign_in_at: Date.today - 1, name: 'Omega' - @user2 = create :user, created_at: Date.today - 2, name: 'Beta' + @user = create :user, created_at: Date.today, current_sign_in_at: Date.today, name: "Alpha" + @user1 = create :user, created_at: Date.today - 1, current_sign_in_at: Date.today - 1, name: "Omega" + @user2 = create :user, created_at: Date.today - 2, name: "Beta" end - context 'when sort by recent_sign_in' do - let(:users) { described_class.sort_by_attribute('recent_sign_in') } + context "when sort by recent_sign_in" do + let(:users) { described_class.sort_by_attribute("recent_sign_in") } - it 'sorts users by recent sign-in time' do + it "sorts users by recent sign-in time" do expect(users.first).to eq(@user) expect(users.second).to eq(@user1) end - it 'pushes users who never signed in to the end' do + it "pushes users who never signed in to the end" do expect(users.third).to eq(@user2) end end - context 'when sort by oldest_sign_in' do - let(:users) { described_class.sort_by_attribute('oldest_sign_in') } + context "when sort by oldest_sign_in" do + let(:users) { described_class.sort_by_attribute("oldest_sign_in") } - it 'sorts users by the oldest sign-in time' do + it "sorts users by the oldest sign-in time" do expect(users.first).to eq(@user1) expect(users.second).to eq(@user) end - it 'pushes users who never signed in to the end' do + it "pushes users who never signed in to the end" do expect(users.third).to eq(@user2) end end - it 'sorts users in descending order by their creation time' do - expect(described_class.sort_by_attribute('created_desc').first).to eq(@user) + it "sorts users in descending order by their creation time" do + expect(described_class.sort_by_attribute("created_desc").first).to eq(@user) end - it 'sorts users in ascending order by their creation time' do - expect(described_class.sort_by_attribute('created_asc').first).to eq(@user2) + it "sorts users in ascending order by their creation time" do + expect(described_class.sort_by_attribute("created_asc").first).to eq(@user2) end - it 'sorts users by id in descending order when nil is passed' do + it "sorts users by id in descending order when nil is passed" do expect(described_class.sort_by_attribute(nil).first).to eq(@user2) end end @@ -1896,7 +1896,7 @@ describe User do end end - describe '#fork_of' do + describe "#fork_of" do let(:user) { create(:user) } it "returns a user's fork of a project" do @@ -1906,21 +1906,21 @@ describe User do expect(user.fork_of(project)).to eq(user_fork) end - it 'returns nil if the project does not have a fork network' do + 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 + describe "#can_be_removed?" do subject { create(:user) } - context 'no owned groups' do + context "no owned groups" do it { expect(subject.can_be_removed?).to be_truthy } end - context 'has owned groups' do + context "has owned groups" do before do group = create(:group) group.add_owner(subject) @@ -1935,7 +1935,7 @@ describe User do let(:project) { build(:project) } let(:event) { build(:push_event) } - it 'returns the last push event for the user' do + it "returns the last push event for the user" do expect_any_instance_of(Users::LastPushEventService) .to receive(:last_event_for_user) .and_return(event) @@ -1943,7 +1943,7 @@ describe User do expect(user.recent_push).to eq(event) end - it 'returns the last push event for a project when one is given' do + it "returns the last push event for a project when one is given" do expect_any_instance_of(Users::LastPushEventService) .to receive(:last_event_for_project) .and_return(event) @@ -1952,7 +1952,7 @@ describe User do end end - describe '#authorized_groups' do + describe "#authorized_groups" do let!(:user) { create(:user) } let!(:private_group) { create(:group) } let!(:child_group) { create(:group, parent: private_group) } @@ -1970,7 +1970,7 @@ describe User do it { is_expected.to contain_exactly private_group, project_group } end - describe '#membership_groups' do + describe "#membership_groups" do let!(:user) { create(:user) } let!(:parent_group) { create(:group) } let!(:child_group) { create(:group, parent: parent_group) } @@ -1988,11 +1988,11 @@ describe User do end end - describe '#authorizations_for_projects' do + describe "#authorizations_for_projects" do let!(:user) { create(:user) } subject { Project.where("EXISTS (?)", user.authorizations_for_projects) } - it 'includes projects that belong to a user, but no other projects' do + it "includes projects that belong to a user, but no other projects" do owned = create(:project, :private, namespace: user.namespace) member = create(:project, :private).tap { |p| p.add_maintainer(user) } other = create(:project) @@ -2002,18 +2002,18 @@ describe User do expect(subject).not_to include(other) end - it 'includes projects a user has access to, but no other projects' do + it "includes projects a user has access to, but no other projects" do other_user = create(:user) - accessible = create(:project, :private, namespace: other_user.namespace) do |project| + accessible = create(:project, :private, namespace: other_user.namespace) { |project| project.add_developer(user) - end + } other = create(:project) expect(subject).to include(accessible) expect(subject).not_to include(other) end - context 'with min_access_level' do + context "with min_access_level" do let!(:user) { create(:user) } let!(:project) { create(:project, :private, namespace: user.namespace) } @@ -2023,27 +2023,27 @@ describe User do subject { Project.where("EXISTS (?)", user.authorizations_for_projects(min_access_level: min_access_level)) } - context 'when developer access' do + context "when developer access" do let(:min_access_level) { Gitlab::Access::DEVELOPER } - it 'includes projects a user has access to' do + it "includes projects a user has access to" do expect(subject).to include(project) end end - context 'when owner access' do + context "when owner access" do let(:min_access_level) { Gitlab::Access::OWNER } - it 'does not include projects with higher access level' do + it "does not include projects with higher access level" do expect(subject).not_to include(project) end end end end - describe '#authorized_projects', :delete do - context 'with a minimum access level' do - it 'includes projects for which the user is an owner' do + describe "#authorized_projects", :delete do + context "with a minimum access level" do + it "includes projects for which the user is an owner" do user = create(:user) project = create(:project, :private, namespace: user.namespace) @@ -2051,7 +2051,7 @@ describe User do .to contain_exactly(project) end - it 'includes projects for which the user is a maintainer' do + it "includes projects for which the user is a maintainer" do user = create(:user) project = create(:project, :private) @@ -2143,10 +2143,10 @@ describe User do end end - describe '#projects_where_can_admin_issues' do + describe "#projects_where_can_admin_issues" do let(:user) { create(:user) } - it 'includes projects for which the user access level is above or equal to reporter' do + it "includes projects for which the user access level is above or equal to reporter" do reporter_project = create(:project) { |p| p.add_reporter(user) } developer_project = create(:project) { |p| p.add_developer(user) } maintainer_project = create(:project) { |p| p.add_maintainer(user) } @@ -2157,7 +2157,7 @@ describe User do expect(user.can?(:admin_issue, reporter_project)).to eq(true) end - it 'does not include for which the user access level is below reporter' do + it "does not include for which the user access level is below reporter" do project = create(:project) guest_project = create(:project) { |p| p.add_guest(user) } @@ -2166,14 +2166,14 @@ describe User do expect(user.can?(:admin_issue, project)).to eq(false) end - it 'does not include archived projects' do + it "does not include archived projects" do project = create(:project, :archived) expect(user.projects_where_can_admin_issues.to_a).to be_empty expect(user.can?(:admin_issue, project)).to eq(false) end - it 'does not include projects for which issues are disabled' do + it "does not include projects for which issues are disabled" do project = create(:project, :issues_disabled) expect(user.projects_where_can_admin_issues.to_a).to be_empty @@ -2181,27 +2181,27 @@ describe User do end end - describe '#ci_owned_runners' do + describe "#ci_owned_runners" do let(:user) { create(:user) } let!(:project) { create(:project) } let(:runner) { create(:ci_runner, :project, projects: [project]) } - context 'without any projects nor groups' do - it 'does not load' do + context "without any projects nor groups" do + it "does not load" do expect(user.ci_owned_runners).to be_empty end end - context 'with personal projects runners' do + context "with personal projects runners" do let(:namespace) { create(:namespace, owner: user) } let!(:project) { create(:project, namespace: namespace) } - it 'loads' do + it "loads" do expect(user.ci_owned_runners).to contain_exactly(runner) end end - context 'with personal group runner' do + context "with personal group runner" do let!(:project) { create(:project) } let(:group_runner) { create(:ci_runner, :group, groups: [group]) } let!(:group) do @@ -2210,12 +2210,12 @@ describe User do end end - it 'loads' do + it "loads" do expect(user.ci_owned_runners).to contain_exactly(group_runner) end end - context 'with personal project and group runner' do + context "with personal project and group runner" do let(:namespace) { create(:namespace, owner: user) } let!(:project) { create(:project, namespace: namespace) } let!(:group_runner) { create(:ci_runner, :group, groups: [group]) } @@ -2226,34 +2226,34 @@ describe User do end end - it 'loads' do + it "loads" do expect(user.ci_owned_runners).to contain_exactly(runner, group_runner) end end shared_examples :member do - context 'when the user is a maintainer' do + context "when the user is a maintainer" do before do add_user(:maintainer) end - it 'loads' do + it "loads" do expect(user.ci_owned_runners).to contain_exactly(runner) end end - context 'when the user is a developer' do + context "when the user is a developer" do before do add_user(:developer) end - it 'does not load' do + it "does not load" do expect(user.ci_owned_runners).to be_empty end end end - context 'with groups projects runners' do + context "with groups projects runners" do let(:group) { create(:group) } let!(:project) { create(:project, group: group) } @@ -2264,7 +2264,7 @@ describe User do it_behaves_like :member end - context 'with groups runners' do + context "with groups runners" do let!(:runner) { create(:ci_runner, :group, groups: [group]) } let!(:group) { create(:group) } @@ -2275,7 +2275,7 @@ describe User do it_behaves_like :member end - context 'with other projects runners' do + context "with other projects runners" do let!(:project) { create(:project) } def add_user(access) @@ -2285,7 +2285,7 @@ describe User do it_behaves_like :member end - context 'with subgroup with different owner for project runner', :nested_groups do + context "with subgroup with different owner for project runner", :nested_groups do let(:group) { create(:group) } let(:another_user) { create(:user) } let(:subgroup) { create(:group, parent: group) } @@ -2301,7 +2301,7 @@ describe User do end end - describe '#projects_with_reporter_access_limited_to' do + describe "#projects_with_reporter_access_limited_to" do let(:project1) { create(:project) } let(:project2) { create(:project) } let(:user) { create(:user) } @@ -2311,33 +2311,33 @@ describe User do project2.add_guest(user) end - it 'returns the projects when using a single project ID' do + it "returns the projects when using a single project ID" do projects = user.projects_with_reporter_access_limited_to(project1.id) expect(projects).to eq([project1]) end - it 'returns the projects when using an Array of project IDs' do + it "returns the projects when using an Array of project IDs" do projects = user.projects_with_reporter_access_limited_to([project1.id]) expect(projects).to eq([project1]) end - it 'returns the projects when using an ActiveRecord relation' do + it "returns the projects when using an ActiveRecord relation" do projects = user .projects_with_reporter_access_limited_to(Project.select(:id)) expect(projects).to eq([project1]) end - it 'does not return projects you do not have reporter access to' do + it "does not return projects you do not have reporter access to" do projects = user.projects_with_reporter_access_limited_to(project2.id) expect(projects).to be_empty end end - describe '#all_expanded_groups' do + describe "#all_expanded_groups" do # foo/bar would also match foo/barbaz instead of just foo/bar and foo/bar/baz let!(:user) { create(:user) } @@ -2353,20 +2353,20 @@ describe User do # (baz) (baz) # let!(:group) { create :group } - let!(:nested_group_1) { create :group, parent: group, name: 'bar' } - let!(:nested_group_1_1) { create :group, parent: nested_group_1, name: 'baz' } - let!(:nested_group_2) { create :group, parent: group, name: 'barbaz' } - let!(:nested_group_2_1) { create :group, parent: nested_group_2, name: 'baz' } + let!(:nested_group_1) { create :group, parent: group, name: "bar" } + let!(:nested_group_1_1) { create :group, parent: nested_group_1, name: "baz" } + let!(:nested_group_2) { create :group, parent: group, name: "barbaz" } + let!(:nested_group_2_1) { create :group, parent: nested_group_2, name: "baz" } subject { user.all_expanded_groups } - context 'user is not a member of any group' do - it 'returns an empty array' do + context "user is not a member of any group" do + it "returns an empty array" do is_expected.to eq([]) end end - context 'user is member of all groups' do + context "user is member of all groups" do before do group.add_reporter(user) nested_group_1.add_developer(user) @@ -2375,76 +2375,76 @@ describe User do nested_group_2_1.add_maintainer(user) end - it 'returns all groups' do + it "returns all groups" do is_expected.to match_array [ group, nested_group_1, nested_group_1_1, - nested_group_2, nested_group_2_1 + nested_group_2, nested_group_2_1, ] end end - context 'user is member of the top group' do + context "user is member of the top group" do before do group.add_owner(user) end if Group.supports_nested_objects? - it 'returns all groups' do + it "returns all groups" do is_expected.to match_array [ group, nested_group_1, nested_group_1_1, - nested_group_2, nested_group_2_1 + nested_group_2, nested_group_2_1, ] end else - it 'returns the top-level groups' do + it "returns the top-level groups" do is_expected.to match_array [group] end end end - context 'user is member of the first child (internal node), branch 1', :nested_groups do + context "user is member of the first child (internal node), branch 1", :nested_groups do before do nested_group_1.add_owner(user) end - it 'returns the groups in the hierarchy' do + it "returns the groups in the hierarchy" do is_expected.to match_array [ group, - nested_group_1, nested_group_1_1 + nested_group_1, nested_group_1_1, ] end end - context 'user is member of the first child (internal node), branch 2', :nested_groups do + context "user is member of the first child (internal node), branch 2", :nested_groups do before do nested_group_2.add_owner(user) end - it 'returns the groups in the hierarchy' do + it "returns the groups in the hierarchy" do is_expected.to match_array [ group, - nested_group_2, nested_group_2_1 + nested_group_2, nested_group_2_1, ] end end - context 'user is member of the last child (leaf node)', :nested_groups do + context "user is member of the last child (leaf node)", :nested_groups do before do nested_group_1_1.add_owner(user) end - it 'returns the groups in the hierarchy' do + it "returns the groups in the hierarchy" do is_expected.to match_array [ group, - nested_group_1, nested_group_1_1 + nested_group_1, nested_group_1_1, ] end end end - describe '#refresh_authorized_projects', :clean_gitlab_redis_shared_state do + describe "#refresh_authorized_projects", :clean_gitlab_redis_shared_state do let(:project1) { create(:project) } let(:project2) { create(:project) } let(:user) { create(:user) } @@ -2457,20 +2457,20 @@ describe User do user.refresh_authorized_projects end - it 'refreshes the list of authorized projects' do + it "refreshes the list of authorized projects" do expect(user.project_authorizations.count).to eq(2) end - it 'stores the correct access levels' do + it "stores the correct access levels" do expect(user.project_authorizations.where(access_level: Gitlab::Access::GUEST).exists?).to eq(true) expect(user.project_authorizations.where(access_level: Gitlab::Access::REPORTER).exists?).to eq(true) end end - describe '#access_level=' do + describe "#access_level=" do let(:user) { build(:user) } - it 'does nothing for an invalid access level' do + it "does nothing for an invalid access level" do user.access_level = :invalid_access_level expect(user.access_level).to eq(:regular) @@ -2493,28 +2493,28 @@ describe User do end it "accepts string values in addition to symbols" do - user.access_level = 'admin' + user.access_level = "admin" expect(user.access_level).to eq(:admin) expect(user.admin).to be true end end - describe '#full_private_access?' do - it 'returns false for regular user' do + describe "#full_private_access?" do + it "returns false for regular user" do user = build(:user) expect(user.full_private_access?).to be_falsy end - it 'returns true for admin user' do + it "returns true for admin user" do user = build(:user, :admin) expect(user.full_private_access?).to be_truthy end end - describe '.ghost' do + describe ".ghost" do it "creates a ghost user if one isn't already present" do ghost = described_class.ghost @@ -2525,48 +2525,48 @@ describe User do end it "does not create a second ghost user if one is already present" do - expect do + expect { described_class.ghost described_class.ghost - end.to change { described_class.count }.by(1) + }.to change { described_class.count }.by(1) expect(described_class.ghost).to eq(described_class.ghost) end context "when a regular user exists with the username 'ghost'" do it "creates a ghost user with a non-conflicting username" do - create(:user, username: 'ghost') + create(:user, username: "ghost") ghost = described_class.ghost expect(ghost).to be_persisted - expect(ghost.username).to eq('ghost1') + expect(ghost.username).to eq("ghost1") end end context "when a regular user exists with the email 'ghost@example.com'" do it "creates a ghost user with a non-conflicting email" do - create(:user, email: 'ghost@example.com') + create(:user, email: "ghost@example.com") ghost = described_class.ghost expect(ghost).to be_persisted - expect(ghost.email).to eq('ghost1@example.com') + expect(ghost.email).to eq("ghost1@example.com") end end - context 'when a domain whitelist is in place' do + context "when a domain whitelist is in place" do before do - stub_application_setting(domain_whitelist: ['gitlab.com']) + stub_application_setting(domain_whitelist: ["gitlab.com"]) end - it 'creates a ghost user' do + it "creates a ghost user" do expect(described_class.ghost).to be_persisted end end end - describe '#update_two_factor_requirement' do + describe "#update_two_factor_requirement" do let(:user) { create :user } - context 'with 2FA requirement on groups' do + context "with 2FA requirement on groups" do let(:group1) { create :group, require_two_factor_authentication: true, two_factor_grace_period: 23 } let(:group2) { create :group, require_two_factor_authentication: true, two_factor_grace_period: 32 } @@ -2577,16 +2577,16 @@ describe User do user.update_two_factor_requirement end - it 'requires 2FA' do + it "requires 2FA" do expect(user.require_two_factor_authentication_from_group).to be true end - it 'uses the shortest grace period' do + it "uses the shortest grace period" do expect(user.two_factor_grace_period).to be 23 end end - context 'with 2FA requirement on nested parent group', :nested_groups do + context "with 2FA requirement on nested parent group", :nested_groups do let!(:group1) { create :group, require_two_factor_authentication: true } let!(:group1a) { create :group, require_two_factor_authentication: false, parent: group1 } @@ -2596,12 +2596,12 @@ describe User do user.update_two_factor_requirement end - it 'requires 2FA' do + it "requires 2FA" do expect(user.require_two_factor_authentication_from_group).to be true end end - context 'with 2FA requirement on nested child group', :nested_groups do + context "with 2FA requirement on nested child group", :nested_groups do let!(:group1) { create :group, require_two_factor_authentication: false } let!(:group1a) { create :group, require_two_factor_authentication: true, parent: group1 } @@ -2611,12 +2611,12 @@ describe User do user.update_two_factor_requirement end - it 'requires 2FA' do + it "requires 2FA" do expect(user.require_two_factor_authentication_from_group).to be true end end - context 'without 2FA requirement on groups' do + context "without 2FA requirement on groups" do let(:group) { create :group } before do @@ -2625,43 +2625,43 @@ describe User do user.update_two_factor_requirement end - it 'does not require 2FA' do + it "does not require 2FA" do expect(user.require_two_factor_authentication_from_group).to be false end - it 'falls back to the default grace period' do + it "falls back to the default grace period" do expect(user.two_factor_grace_period).to be 48 end end end - context '.active' do + context ".active" do before do described_class.ghost - create(:user, name: 'user', state: 'active') - create(:user, name: 'user', state: 'blocked') + create(:user, name: "user", state: "active") + create(:user, name: "user", state: "blocked") end - it 'only counts active and non internal users' do + it "only counts active and non internal users" do expect(described_class.active.count).to eq(1) end end - describe 'preferred language' do - it 'is English by default' do + describe "preferred language" do + it "is English by default" do user = create(:user) - expect(user.preferred_language).to eq('en') + expect(user.preferred_language).to eq("en") end end - context '#invalidate_issue_cache_counts' do + context "#invalidate_issue_cache_counts" do let(:user) { build_stubbed(:user) } - it 'invalidates cache for issue counter' do + it "invalidates cache for issue counter" do cache_mock = double - expect(cache_mock).to receive(:delete).with(['users', user.id, 'assigned_open_issues_count']) + expect(cache_mock).to receive(:delete).with(["users", user.id, "assigned_open_issues_count"]) allow(Rails).to receive(:cache).and_return(cache_mock) @@ -2669,13 +2669,13 @@ describe User do end end - context '#invalidate_merge_request_cache_counts' do + context "#invalidate_merge_request_cache_counts" do let(:user) { build_stubbed(:user) } - it 'invalidates cache for Merge Request counter' do + it "invalidates cache for Merge Request counter" do cache_mock = double - expect(cache_mock).to receive(:delete).with(['users', user.id, 'assigned_open_merge_requests_count']) + expect(cache_mock).to receive(:delete).with(["users", user.id, "assigned_open_merge_requests_count"]) allow(Rails).to receive(:cache).and_return(cache_mock) @@ -2683,13 +2683,13 @@ describe User do end end - context '#invalidate_personal_projects_count' do + context "#invalidate_personal_projects_count" do let(:user) { build_stubbed(:user) } - it 'invalidates cache for personal projects counter' do + it "invalidates cache for personal projects counter" do cache_mock = double - expect(cache_mock).to receive(:delete).with(['users', user.id, 'personal_projects_count']) + expect(cache_mock).to receive(:delete).with(["users", user.id, "personal_projects_count"]) allow(Rails).to receive(:cache).and_return(cache_mock) @@ -2697,52 +2697,52 @@ describe User do end end - describe '#allow_password_authentication_for_web?' do - context 'regular user' do + describe "#allow_password_authentication_for_web?" do + context "regular user" do let(:user) { build(:user) } - it 'returns true when password authentication is enabled for the web interface' do + it "returns true when password authentication is enabled for the web interface" do expect(user.allow_password_authentication_for_web?).to be_truthy end - it 'returns false when password authentication is disabled for the web interface' do + it "returns false when password authentication is disabled for the web interface" do stub_application_setting(password_authentication_enabled_for_web: false) expect(user.allow_password_authentication_for_web?).to be_falsey end end - it 'returns false for ldap user' do - user = create(:omniauth_user, provider: 'ldapmain') + it "returns false for ldap user" do + user = create(:omniauth_user, provider: "ldapmain") expect(user.allow_password_authentication_for_web?).to be_falsey end end - describe '#allow_password_authentication_for_git?' do - context 'regular user' do + describe "#allow_password_authentication_for_git?" do + context "regular user" do let(:user) { build(:user) } - it 'returns true when password authentication is enabled for Git' do + it "returns true when password authentication is enabled for Git" do expect(user.allow_password_authentication_for_git?).to be_truthy end - it 'returns false when password authentication is disabled Git' do + it "returns false when password authentication is disabled Git" do stub_application_setting(password_authentication_enabled_for_git: false) expect(user.allow_password_authentication_for_git?).to be_falsey end end - it 'returns false for ldap user' do - user = create(:omniauth_user, provider: 'ldapmain') + it "returns false for ldap user" do + user = create(:omniauth_user, provider: "ldapmain") expect(user.allow_password_authentication_for_git?).to be_falsey end end - describe '#assigned_open_merge_requests_count' do - it 'returns number of open merge requests from non-archived projects' do + describe "#assigned_open_merge_requests_count" do + it "returns number of open merge requests from non-archived projects" do user = create(:user) project = create(:project, :public) archived_project = create(:project, :public, :archived) @@ -2755,8 +2755,8 @@ describe User do end end - describe '#assigned_open_issues_count' do - it 'returns number of open issues from non-archived projects' do + describe "#assigned_open_issues_count" do + it "returns number of open issues from non-archived projects" do user = create(:user) project = create(:project, :public) archived_project = create(:project, :public, :archived) @@ -2769,8 +2769,8 @@ describe User do end end - describe '#personal_projects_count' do - it 'returns the number of personal projects using a single query' do + describe "#personal_projects_count" do + it "returns the number of personal projects using a single query" do user = build(:user) projects = double(:projects, count: 1) @@ -2780,8 +2780,8 @@ describe User do end end - describe '#projects_limit_left' do - it 'returns the number of projects that can be created by the user' do + describe "#projects_limit_left" do + it "returns the number of projects that can be created by the user" do user = build(:user) allow(user).to receive(:projects_limit).and_return(10) @@ -2791,11 +2791,11 @@ describe User do end end - describe '#ensure_namespace_correct' do - context 'for a new user' do + describe "#ensure_namespace_correct" do + context "for a new user" do let(:user) { build(:user) } - it 'creates the namespace' do + it "creates the namespace" do expect(user.namespace).to be_nil user.save! @@ -2804,79 +2804,79 @@ describe User do end end - context 'for an existing user' do - let(:username) { 'foo' } + context "for an existing user" do + let(:username) { "foo" } let(:user) { create(:user, username: username) } - context 'when the user is updated' do - context 'when the username is changed' do - let(:new_username) { 'bar' } + context "when the user is updated" do + context "when the username is changed" do + let(:new_username) { "bar" } - it 'changes the namespace (just to compare to when username is not changed)' do - expect do + it "changes the namespace (just to compare to when username is not changed)" do + expect { Timecop.freeze(1.second.from_now) do user.update!(username: new_username) end - end.to change { user.namespace.updated_at } + }.to change { user.namespace.updated_at } end - it 'updates the namespace name' do + it "updates the namespace name" do user.update!(username: new_username) expect(user.namespace.name).to eq(new_username) end - it 'updates the namespace path' do + it "updates the namespace path" do user.update!(username: new_username) expect(user.namespace.path).to eq(new_username) end - context 'when there is a validation error (namespace name taken) while updating namespace' do + context "when there is a validation error (namespace name taken) while updating namespace" do let!(:conflicting_namespace) { create(:group, path: new_username) } - it 'causes the user save to fail' do + it "causes the user save to fail" do expect(user.update(username: new_username)).to be_falsey - expect(user.namespace.errors.messages[:path].first).to eq('has already been taken') + expect(user.namespace.errors.messages[:path].first).to eq("has already been taken") end - it 'adds the namespace errors to the user' do + it "adds the namespace errors to the user" do user.update(username: new_username) - expect(user.errors.full_messages.first).to eq('Username has already been taken') + expect(user.errors.full_messages.first).to eq("Username has already been taken") end end end - context 'when the username is not changed' do - it 'does not change the namespace' do - expect do - user.update!(email: 'asdf@asdf.com') - end.not_to change { user.namespace.updated_at } + context "when the username is not changed" do + it "does not change the namespace" do + expect { + user.update!(email: "asdf@asdf.com") + }.not_to change { user.namespace.updated_at } end end end end end - describe '#username_changed_hook' do - context 'for a new user' do + describe "#username_changed_hook" do + context "for a new user" do let(:user) { build(:user) } - it 'does not trigger system hook' do + it "does not trigger system hook" do expect(user).not_to receive(:system_hook_service) user.save! end end - context 'for an existing user' do - let(:user) { create(:user, username: 'old-username') } + context "for an existing user" do + let(:user) { create(:user, username: "old-username") } - context 'when the username is changed' do - let(:new_username) { 'very-new-name' } + context "when the username is changed" do + let(:new_username) { "very-new-name" } - it 'triggers the rename system hook' do + it "triggers the rename system hook" do system_hook_service = SystemHooksService.new expect(system_hook_service).to receive(:execute_hooks_for).with(user, :rename) expect(user).to receive(:system_hook_service).and_return(system_hook_service) @@ -2885,57 +2885,57 @@ describe User do end end - context 'when the username is not changed' do - it 'does not trigger system hook' do + context "when the username is not changed" do + it "does not trigger system hook" do expect(user).not_to receive(:system_hook_service) - user.update!(email: 'asdf@asdf.com') + user.update!(email: "asdf@asdf.com") end end end end - describe '#sync_attribute?' do + describe "#sync_attribute?" do let(:user) { described_class.new } - context 'oauth user' do - it 'returns true if name can be synced' do - stub_omniauth_setting(sync_profile_attributes: %w(name location)) + context "oauth user" do + it "returns true if name can be synced" do + stub_omniauth_setting(sync_profile_attributes: %w[name location]) expect(user.sync_attribute?(:name)).to be_truthy end - it 'returns true if email can be synced' do - stub_omniauth_setting(sync_profile_attributes: %w(name email)) + it "returns true if email can be synced" do + stub_omniauth_setting(sync_profile_attributes: %w[name email]) expect(user.sync_attribute?(:email)).to be_truthy end - it 'returns true if location can be synced' do - stub_omniauth_setting(sync_profile_attributes: %w(location email)) + it "returns true if location can be synced" do + stub_omniauth_setting(sync_profile_attributes: %w[location email]) expect(user.sync_attribute?(:email)).to be_truthy end - it 'returns false if name can not be synced' do - stub_omniauth_setting(sync_profile_attributes: %w(location email)) + it "returns false if name can not be synced" do + stub_omniauth_setting(sync_profile_attributes: %w[location email]) expect(user.sync_attribute?(:name)).to be_falsey end - it 'returns false if email can not be synced' do - stub_omniauth_setting(sync_profile_attributes: %w(location email)) + it "returns false if email can not be synced" do + stub_omniauth_setting(sync_profile_attributes: %w[location email]) expect(user.sync_attribute?(:name)).to be_falsey end - it 'returns false if location can not be synced' do - stub_omniauth_setting(sync_profile_attributes: %w(location email)) + it "returns false if location can not be synced" do + stub_omniauth_setting(sync_profile_attributes: %w[location email]) expect(user.sync_attribute?(:name)).to be_falsey end - it 'returns true for all syncable attributes if all syncable attributes can be synced' do + it "returns true for all syncable attributes if all syncable attributes can be synced" do stub_omniauth_setting(sync_profile_attributes: true) expect(user.sync_attribute?(:name)).to be_truthy @@ -2943,15 +2943,15 @@ describe User do expect(user.sync_attribute?(:location)).to be_truthy end - it 'returns false for all syncable attributes but email if no syncable attributes are declared' do + it "returns false for all syncable attributes but email if no syncable attributes are declared" do expect(user.sync_attribute?(:name)).to be_falsey expect(user.sync_attribute?(:email)).to be_truthy expect(user.sync_attribute?(:location)).to be_falsey end end - context 'ldap user' do - it 'returns true for email if ldap user' do + context "ldap user" do + it "returns true for email if ldap user" do allow(user).to receive(:ldap_user?).and_return(true) expect(user.sync_attribute?(:name)).to be_falsey @@ -2959,9 +2959,9 @@ describe User do expect(user.sync_attribute?(:location)).to be_falsey end - it 'returns true for email and location if ldap user and location declared as syncable' do + it "returns true for email and location if ldap user and location declared as syncable" do allow(user).to receive(:ldap_user?).and_return(true) - stub_omniauth_setting(sync_profile_attributes: %w(location)) + stub_omniauth_setting(sync_profile_attributes: %w[location]) expect(user.sync_attribute?(:name)).to be_falsey expect(user.sync_attribute?(:email)).to be_truthy @@ -2970,7 +2970,7 @@ describe User do end end - describe '#confirm_deletion_with_password?' do + describe "#confirm_deletion_with_password?" do where( password_automatically_set: [true, false], ldap_user: [true, false], @@ -2989,25 +2989,25 @@ describe User do stub_application_setting(password_authentication_enabled_for_git: !password_authentication_disabled) end - it 'returns false unless all inputs are true' do + 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 + 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 + 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 }) + 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 + 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) @@ -3016,8 +3016,8 @@ describe User do end end - describe '#max_member_access_for_project_ids' do - shared_examples 'max member access for projects' do + describe "#max_member_access_for_project_ids" do + shared_examples "max member access for projects" do let(:user) { create(:user) } let(:group) { create(:group) } let(:owner_project) { create(:project, group: group) } @@ -3038,7 +3038,7 @@ describe User do reporter_project.id => Gitlab::Access::REPORTER, developer_project.id => Gitlab::Access::DEVELOPER, guest_project.id => Gitlab::Access::GUEST, - no_access_project.id => Gitlab::Access::NO_ACCESS + no_access_project.id => Gitlab::Access::NO_ACCESS, } end @@ -3050,19 +3050,19 @@ describe User do guest_project.add_guest(user) end - it 'returns correct roles for different projects' do + it "returns correct roles for different projects" do expect(user.max_member_access_for_project_ids(projects)).to eq(expected) end end - context 'with RequestStore enabled', :request_store do - include_examples 'max member access for projects' + context "with RequestStore enabled", :request_store do + include_examples "max member access for projects" def access_levels(projects) user.max_member_access_for_project_ids(projects) end - it 'does not perform extra queries when asked for projects who have already been found' do + it "does not perform extra queries when asked for projects who have already been found" do access_levels(projects) expect { access_levels(projects) }.not_to exceed_query_limit(0) @@ -3070,7 +3070,7 @@ describe User do expect(access_levels(projects)).to eq(expected) end - it 'only requests the extra projects when uncached projects are passed' do + it "only requests the extra projects when uncached projects are passed" do second_maintainer_project = create(:project) second_developer_project = create(:project) second_maintainer_project.add_maintainer(user) @@ -3091,13 +3091,13 @@ describe User do end end - context 'with RequestStore disabled' do - include_examples 'max member access for projects' + context "with RequestStore disabled" do + include_examples "max member access for projects" end end - describe '#max_member_access_for_group_ids' do - shared_examples 'max member access for groups' do + describe "#max_member_access_for_group_ids" do + shared_examples "max member access for groups" do let(:user) { create(:user) } let(:owner_group) { create(:group) } let(:maintainer_group) { create(:group) } @@ -3117,7 +3117,7 @@ describe User do reporter_group.id => Gitlab::Access::REPORTER, developer_group.id => Gitlab::Access::DEVELOPER, guest_group.id => Gitlab::Access::GUEST, - no_access_group.id => Gitlab::Access::NO_ACCESS + no_access_group.id => Gitlab::Access::NO_ACCESS, } end @@ -3129,19 +3129,19 @@ describe User do guest_group.add_guest(user) end - it 'returns correct roles for different groups' do + it "returns correct roles for different groups" do expect(user.max_member_access_for_group_ids(groups)).to eq(expected) end end - context 'with RequestStore enabled', :request_store do - include_examples 'max member access for groups' + context "with RequestStore enabled", :request_store do + include_examples "max member access for groups" def access_levels(groups) user.max_member_access_for_group_ids(groups) end - it 'does not perform extra queries when asked for groups who have already been found' do + it "does not perform extra queries when asked for groups who have already been found" do access_levels(groups) expect { access_levels(groups) }.not_to exceed_query_limit(0) @@ -3149,7 +3149,7 @@ describe User do expect(access_levels(groups)).to eq(expected) end - it 'only requests the extra groups when uncached groups are passed' do + it "only requests the extra groups when uncached groups are passed" do second_maintainer_group = create(:group) second_developer_group = create(:group) second_maintainer_group.add_maintainer(user) @@ -3170,28 +3170,28 @@ describe User do end end - context 'with RequestStore disabled' do - include_examples 'max member access for groups' + context "with RequestStore disabled" do + include_examples "max member access for groups" end end - context 'changing a username' do - let(:user) { create(:user, username: 'foo') } + context "changing a username" do + let(:user) { create(:user, username: "foo") } - it 'creates a redirect route' do - expect { user.update!(username: 'bar') } - .to change { RedirectRoute.where(path: 'foo').count }.by(1) + it "creates a redirect route" do + expect { user.update!(username: "bar") } + .to change { RedirectRoute.where(path: "foo").count }.by(1) end - it 'deletes the redirect when a user with the old username was created' do - user.update!(username: 'bar') + it "deletes the redirect when a user with the old username was created" do + user.update!(username: "bar") - expect { create(:user, username: 'foo') } - .to change { RedirectRoute.where(path: 'foo').count }.by(-1) + expect { create(:user, username: "foo") } + .to change { RedirectRoute.where(path: "foo").count }.by(-1) end end - describe '#required_terms_not_accepted?' do + describe "#required_terms_not_accepted?" do let(:user) { build(:user) } subject { user.required_terms_not_accepted? } @@ -3217,81 +3217,81 @@ describe User do end end - describe '#increment_failed_attempts!' do + describe "#increment_failed_attempts!" do subject(:user) { create(:user, failed_attempts: 0) } - it 'logs failed sign-in attempts' do + it "logs failed sign-in attempts" do expect { user.increment_failed_attempts! }.to change(user, :failed_attempts).from(0).to(1) end - it 'does not log failed sign-in attempts when in a GitLab read-only instance' do + it "does not log failed sign-in attempts when in a GitLab read-only instance" do allow(Gitlab::Database).to receive(:read_only?) { true } expect { user.increment_failed_attempts! }.not_to change(user, :failed_attempts) end end - describe '#requires_usage_stats_consent?' do + describe "#requires_usage_stats_consent?" do let(:user) { create(:user, created_at: 8.days.ago) } before do allow(user).to receive(:has_current_license?).and_return false end - context 'in single-user environment' do - it 'requires user consent after one week' do + context "in single-user environment" do + it "requires user consent after one week" do create(:user, ghost: true) expect(user.requires_usage_stats_consent?).to be true end - it 'requires user consent after one week if there is another ghost user' do + it "requires user consent after one week if there is another ghost user" do expect(user.requires_usage_stats_consent?).to be true end - it 'does not require consent in the first week' do + it "does not require consent in the first week" do user.created_at = 6.days.ago expect(user.requires_usage_stats_consent?).to be false end - it 'does not require consent if usage stats were set by this user' do + it "does not require consent if usage stats were set by this user" do allow(Gitlab::CurrentSettings).to receive(:usage_stats_set_by_user_id).and_return(user.id) expect(user.requires_usage_stats_consent?).to be false end end - context 'in multi-user environment' do + context "in multi-user environment" do before do create(:user) end - it 'does not require consent' do + it "does not require consent" do expect(user.requires_usage_stats_consent?).to be false end end end - context 'with uploads' do - it_behaves_like 'model with uploads', false do + context "with uploads" do + it_behaves_like "model with uploads", false do let(:model_object) { create(:user, :with_avatar) } let(:upload_attribute) { :avatar } let(:uploader_class) { AttachmentUploader } end end - describe '.union_with_user' do - context 'when no user ID is provided' do - it 'returns the input relation' do + describe ".union_with_user" do + context "when no user ID is provided" do + it "returns the input relation" do user = create(:user) expect(described_class.union_with_user).to eq([user]) end end - context 'when a user ID is provided' do - it 'includes the user object in the returned relation' do + context "when a user ID is provided" do + it "includes the user object in the returned relation" do user1 = create(:user) user2 = create(:user) users = described_class.where(id: user1.id).union_with_user(user2.id) @@ -3300,7 +3300,7 @@ describe User do expect(users).to include(user2) end - it 'does not re-apply any WHERE conditions on the outer query' do + it "does not re-apply any WHERE conditions on the outer query" do relation = described_class.where(id: 1).union_with_user(2) expect(relation.arel.where_sql).to be_nil @@ -3308,25 +3308,25 @@ describe User do end end - describe '.optionally_search' do - context 'using nil as the argument' do - it 'returns the current relation' do + describe ".optionally_search" do + context "using nil as the argument" do + it "returns the current relation" do user = create(:user) expect(described_class.optionally_search).to eq([user]) end end - context 'using an empty String as the argument' do - it 'returns the current relation' do + context "using an empty String as the argument" do + it "returns the current relation" do user = create(:user) - expect(described_class.optionally_search('')).to eq([user]) + expect(described_class.optionally_search("")).to eq([user]) end end - context 'using a non-empty String' do - it 'returns users matching the search query' do + context "using a non-empty String" do + it "returns users matching the search query" do user1 = create(:user) create(:user) @@ -3335,17 +3335,17 @@ describe User do end end - describe '.where_not_in' do - context 'without an argument' do - it 'returns the current relation' do + describe ".where_not_in" do + context "without an argument" do + it "returns the current relation" do user = create(:user) expect(described_class.where_not_in).to eq([user]) end end - context 'using a list of user IDs' do - it 'excludes the users from the returned relation' do + context "using a list of user IDs" do + it "excludes the users from the returned relation" do user1 = create(:user) user2 = create(:user) @@ -3354,10 +3354,10 @@ describe User do end end - describe '.reorder_by_name' do - it 'reorders the input relation' do - user1 = create(:user, name: 'A') - user2 = create(:user, name: 'B') + describe ".reorder_by_name" do + it "reorders the input relation" do + user1 = create(:user, name: "A") + user2 = create(:user, name: "B") expect(described_class.reorder_by_name).to eq([user1, user2]) end |