summaryrefslogtreecommitdiff
path: root/spec/models/member_spec.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-04-20 10:00:54 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-04-20 10:00:54 +0000
commit3cccd102ba543e02725d247893729e5c73b38295 (patch)
treef36a04ec38517f5deaaacb5acc7d949688d1e187 /spec/models/member_spec.rb
parent205943281328046ef7b4528031b90fbda70c75ac (diff)
downloadgitlab-ce-3cccd102ba543e02725d247893729e5c73b38295.tar.gz
Add latest changes from gitlab-org/gitlab@14-10-stable-eev14.10.0-rc42
Diffstat (limited to 'spec/models/member_spec.rb')
-rw-r--r--spec/models/member_spec.rb102
1 files changed, 97 insertions, 5 deletions
diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb
index 79491edba94..4ab17ee1e6d 100644
--- a/spec/models/member_spec.rb
+++ b/spec/models/member_spec.rb
@@ -682,14 +682,46 @@ RSpec.describe Member do
member.accept_invite!(user)
end
- it "refreshes user's authorized projects", :delete do
- project = member.source
+ context 'authorized projects' do
+ let(:project) { member.source }
- expect(user.authorized_projects).not_to include(project)
+ before do
+ expect(user.authorized_projects).not_to include(project)
+ end
- member.accept_invite!(user)
+ it 'successfully completes a blocking refresh', :delete do
+ expect(member).to receive(:refresh_member_authorized_projects).with(blocking: true).and_call_original
+
+ member.accept_invite!(user)
+
+ expect(user.authorized_projects.reload).to include(project)
+ end
+
+ it 'successfully completes a non-blocking refresh', :delete, :sidekiq_inline do
+ member.blocking_refresh = false
+
+ expect(member).to receive(:refresh_member_authorized_projects).with(blocking: false).and_call_original
+
+ member.accept_invite!(user)
+
+ expect(user.authorized_projects.reload).to include(project)
+ end
- expect(user.authorized_projects.reload).to include(project)
+ context 'when the feature flag is disabled' do
+ before do
+ stub_feature_flags(allow_non_blocking_member_refresh: false)
+ end
+
+ it 'successfully completes a blocking refresh', :delete, :sidekiq_inline do
+ member.blocking_refresh = false
+
+ expect(member).to receive(:refresh_member_authorized_projects).with(blocking: true).and_call_original
+
+ member.accept_invite!(user)
+
+ expect(user.authorized_projects.reload).to include(project)
+ end
+ end
end
it 'does not accept the invite if saving a new user fails' do
@@ -926,4 +958,64 @@ RSpec.describe Member do
end
end
end
+
+ describe '.sort_by_attribute' do
+ let_it_be(:user1) { create(:user, created_at: Date.today, last_sign_in_at: Date.today, last_activity_on: Date.today, name: 'Alpha') }
+ let_it_be(:user2) { create(:user, created_at: Date.today - 1, last_sign_in_at: Date.today - 1, last_activity_on: Date.today - 1, name: 'Omega') }
+ let_it_be(:user3) { create(:user, created_at: Date.today - 2, name: 'Beta') }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:member1) { create(:group_member, :reporter, group: group, user: user1) }
+ let_it_be(:member2) { create(:group_member, :developer, group: group, user: user2) }
+ let_it_be(:member3) { create(:group_member, :maintainer, group: group, user: user3) }
+
+ it 'sort users in ascending order by access-level' do
+ expect(described_class.sort_by_attribute('access_level_asc')).to eq([member1, member2, member3])
+ end
+
+ it 'sort users in descending order by access-level' do
+ expect(described_class.sort_by_attribute('access_level_desc')).to eq([member3, member2, member1])
+ end
+
+ context 'when sort by recent_sign_in' do
+ subject { described_class.sort_by_attribute('recent_sign_in') }
+
+ it 'sorts users by recent sign-in time' do
+ expect(subject.first).to eq(member1)
+ expect(subject.second).to eq(member2)
+ end
+
+ it 'pushes users who never signed in to the end' do
+ expect(subject.third).to eq(member3)
+ end
+ end
+
+ context 'when sort by oldest_sign_in' do
+ subject { described_class.sort_by_attribute('oldest_sign_in') }
+
+ it 'sorts users by the oldest sign-in time' do
+ expect(subject.first).to eq(member2)
+ expect(subject.second).to eq(member1)
+ end
+
+ it 'pushes users who never signed in to the end' do
+ expect(subject.third).to eq(member3)
+ end
+ end
+
+ it 'sorts users in descending order by their creation time' do
+ expect(described_class.sort_by_attribute('recent_created_user')).to eq([member1, member2, member3])
+ end
+
+ it 'sorts users in ascending order by their creation time' do
+ expect(described_class.sort_by_attribute('oldest_created_user')).to eq([member3, member2, member1])
+ end
+
+ it 'sort users by recent last activity' do
+ expect(described_class.sort_by_attribute('recent_last_activity')).to eq([member1, member2, member3])
+ end
+
+ it 'sort users by oldest last activity' do
+ expect(described_class.sort_by_attribute('oldest_last_activity')).to eq([member3, member2, member1])
+ end
+ end
end