summaryrefslogtreecommitdiff
path: root/spec/models/user_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/user_spec.rb')
-rw-r--r--spec/models/user_spec.rb1460
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&amp;user')
+ it "encodes HTML entities in the Skype attribute" do
+ expect { user.sanitize_attrs }.to change { user.skype }.to("test&amp;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