Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/member_spec.rb')
-rw-r--r--spec/models/member_spec.rb83
1 files changed, 53 insertions, 30 deletions
diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb
index 3f7f69ff34e..afe78adc547 100644
--- a/spec/models/member_spec.rb
+++ b/spec/models/member_spec.rb
@@ -7,11 +7,11 @@ RSpec.describe Member do
using RSpec::Parameterized::TableSyntax
- describe "Associations" do
+ describe 'Associations' do
it { is_expected.to belong_to(:user) }
end
- describe "Validation" do
+ describe 'Validation' do
subject { described_class.new(access_level: Member::GUEST) }
it { is_expected.to validate_presence_of(:user) }
@@ -28,7 +28,7 @@ RSpec.describe Member do
subject { build(:project_member) }
end
- context "when an invite email is provided" do
+ context 'when an invite email is provided' do
let_it_be(:project) { create(:project) }
let(:member) { build(:project_member, source: project, invite_email: "user@example.com", user: nil) }
@@ -37,34 +37,36 @@ RSpec.describe Member do
expect(member).to be_valid
end
- it "requires a valid invite email" do
+ it 'requires a valid invite email' do
member.invite_email = "nope"
expect(member).not_to be_valid
end
- it "requires a unique invite email scoped to this source" do
+ it 'requires a unique invite email scoped to this source' do
create(:project_member, source: member.source, invite_email: member.invite_email)
expect(member).not_to be_valid
end
end
- context "when an invite email is not provided" do
+ context 'when an invite email is not provided' do
let(:member) { build(:project_member) }
- it "requires a user" do
+ it 'requires a user' do
member.user = nil
expect(member).not_to be_valid
end
- it "is valid otherwise" do
+ it 'is valid otherwise' do
expect(member).to be_valid
end
end
context 'with admin signup restrictions' do
+ let(:expected_message) { _('is not allowed for this group. Check with your administrator.') }
+
context 'when allowed domains for signup is enabled' do
before do
stub_application_setting(domain_allowlist: ['example.com'])
@@ -74,7 +76,7 @@ RSpec.describe Member do
member = build(:group_member, :invited, invite_email: 'info@gitlab.com')
expect(member).not_to be_valid
- expect(member.errors.messages[:user].first).to eq(_('domain is not authorized for sign-up.'))
+ expect(member.errors.messages[:user].first).to eq(expected_message)
end
end
@@ -88,7 +90,7 @@ RSpec.describe Member do
member = build(:group_member, :invited, invite_email: 'denylist@example.org')
expect(member).not_to be_valid
- expect(member.errors.messages[:user].first).to eq(_('is not from an allowed domain.'))
+ expect(member.errors.messages[:user].first).to eq(expected_message)
end
end
@@ -102,18 +104,18 @@ RSpec.describe Member do
member = build(:group_member, :invited, invite_email: 'info@gitlab.com')
expect(member).not_to be_valid
- expect(member.errors.messages[:user].first).to eq(_('is not allowed. Try again with a different email address, or contact your GitLab admin.'))
+ expect(member.errors.messages[:user].first).to eq(expected_message)
end
end
end
- context "when a child member inherits its access level" do
+ context 'when a child member inherits its access level' do
let(:user) { create(:user) }
let(:member) { create(:group_member, :developer, user: user) }
let(:child_group) { create(:group, parent: member.group) }
let(:child_member) { build(:group_member, group: child_group, user: user) }
- it "requires a higher level" do
+ it 'requires a higher level' do
child_member.access_level = GroupMember::REPORTER
child_member.validate
@@ -123,7 +125,7 @@ RSpec.describe Member do
# Membership in a subgroup confers certain access rights, such as being
# able to merge or push code to protected branches.
- it "is valid with an equal level" do
+ it 'is valid with an equal level' do
child_member.access_level = GroupMember::DEVELOPER
child_member.validate
@@ -131,7 +133,7 @@ RSpec.describe Member do
expect(child_member).to be_valid
end
- it "is valid with a higher level" do
+ it 'is valid with a higher level' do
child_member.access_level = GroupMember::MAINTAINER
child_member.validate
@@ -167,6 +169,8 @@ RSpec.describe Member do
describe 'Scopes & finders' do
let_it_be(:project) { create(:project, :public) }
let_it_be(:group) { create(:group) }
+ let_it_be(:blocked_pending_approval_user) { create(:user, :blocked_pending_approval ) }
+ let_it_be(:blocked_pending_approval_project_member) { create(:project_member, :invited, :developer, project: project, invite_email: blocked_pending_approval_user.email) }
before_all do
@owner_user = create(:user).tap { |u| group.add_owner(u) }
@@ -536,9 +540,28 @@ RSpec.describe Member do
it { is_expected.to eq [example_member] }
end
end
+
+ describe '.with_invited_user_state' do
+ subject(:with_invited_user_state) { described_class.with_invited_user_state }
+
+ it { is_expected.to include @owner }
+ it { is_expected.to include @maintainer }
+ it { is_expected.to include @invited_member }
+ it { is_expected.to include @accepted_invite_member }
+ it { is_expected.to include @requested_member }
+ it { is_expected.to include @accepted_request_member }
+
+ context 'with invited pending members' do
+ it 'includes invited user state' do
+ invited_pending_members = with_invited_user_state.select { |m| m.invited_user_state.present? }
+ expect(invited_pending_members.count).to eq 1
+ expect(invited_pending_members).to include blocked_pending_approval_project_member
+ end
+ end
+ end
end
- describe "Delegate methods" do
+ describe 'Delegate methods' do
it { is_expected.to respond_to(:user_name) }
it { is_expected.to respond_to(:user_email) }
end
@@ -608,29 +631,29 @@ RSpec.describe Member do
end
end
- describe "#accept_invite!" do
+ describe '#accept_invite!' do
let!(:member) { create(:project_member, invite_email: "user@example.com", user: nil) }
let(:user) { create(:user) }
- it "resets the invite token" do
+ it 'resets the invite token' do
member.accept_invite!(user)
expect(member.invite_token).to be_nil
end
- it "sets the invite accepted timestamp" do
+ it 'sets the invite accepted timestamp' do
member.accept_invite!(user)
expect(member.invite_accepted_at).not_to be_nil
end
- it "sets the user" do
+ it 'sets the user' do
member.accept_invite!(user)
expect(member.user).to eq(user)
end
- it "calls #after_accept_invite" do
+ it 'calls #after_accept_invite' do
expect(member).to receive(:after_accept_invite)
member.accept_invite!(user)
@@ -657,26 +680,26 @@ RSpec.describe Member do
end
end
- describe "#decline_invite!" do
+ describe '#decline_invite!' do
let!(:member) { create(:project_member, invite_email: "user@example.com", user: nil) }
- it "destroys the member" do
+ it 'destroys the member' do
member.decline_invite!
expect(member).to be_destroyed
end
- it "calls #after_decline_invite" do
+ it 'calls #after_decline_invite' do
expect(member).to receive(:after_decline_invite)
member.decline_invite!
end
end
- describe "#generate_invite_token" do
+ describe '#generate_invite_token' do
let!(:member) { create(:project_member, invite_email: "user@example.com", user: nil) }
- it "sets the invite token" do
+ it 'sets the invite token' do
expect { member.generate_invite_token }.to change { member.invite_token }
end
end
@@ -684,12 +707,12 @@ RSpec.describe Member do
describe 'generate invite token on create' do
let!(:member) { build(:project_member, invite_email: "user@example.com") }
- it "sets the invite token" do
+ it 'sets the invite token' do
expect { member.save! }.to change { member.invite_token }.to(kind_of(String))
end
context 'when invite was already accepted' do
- it "does not set invite token" do
+ it 'does not set invite token' do
member.invite_accepted_at = 1.day.ago
expect { member.save! }.not_to change { member.invite_token }.from(nil)
@@ -744,7 +767,7 @@ RSpec.describe Member do
end
end
- describe "#invite_to_unknown_user?" do
+ describe '#invite_to_unknown_user?' do
subject { member.invite_to_unknown_user? }
let(:member) { create(:project_member, invite_email: "user@example.com", invite_token: '1234', user: user) }
@@ -762,7 +785,7 @@ RSpec.describe Member do
end
end
- describe "destroying a record", :delete do
+ describe 'destroying a record', :delete, :sidekiq_inline do
it "refreshes user's authorized projects" do
project = create(:project, :private)
user = create(:user)