summaryrefslogtreecommitdiff
path: root/spec/services/todo_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/todo_service_spec.rb')
-rw-r--r--spec/services/todo_service_spec.rb129
1 files changed, 61 insertions, 68 deletions
diff --git a/spec/services/todo_service_spec.rb b/spec/services/todo_service_spec.rb
index c4ed34a693e..596ca9495ff 100644
--- a/spec/services/todo_service_spec.rb
+++ b/spec/services/todo_service_spec.rb
@@ -1259,92 +1259,85 @@ RSpec.describe TodoService do
end
end
- describe '#create_member_access_request' do
- context 'snowplow event tracking' do
- it 'does not track snowplow event when todos are for access request for project', :snowplow do
- user = create(:user)
- project = create(:project)
- requester = create(:project_member, project: project, user: assignee)
- project.add_owner(user)
-
- expect_no_snowplow_event
+ describe '#create_member_access_request_todos' do
+ let_it_be(:group) { create(:group, :public) }
+ let_it_be(:project) { create(:project, :public, group: group) }
+
+ shared_examples 'member access request is raised' do
+ context 'when the source has more than 10 owners' do
+ it 'creates todos for 10 recently active source owners' do
+ users = create_list(:user, 12, :with_sign_ins)
+ users.each do |user|
+ source.add_owner(user)
+ end
+ ten_most_recently_active_source_owners = users.sort_by(&:last_sign_in_at).last(10)
+ excluded_source_owners = users - ten_most_recently_active_source_owners
- service.create_member_access_request(requester)
- end
- end
+ service.create_member_access_request_todos(requester1)
- context 'when the group has more than 10 owners' do
- it 'creates todos for 10 recently active group owners' do
- group = create(:group, :public)
+ ten_most_recently_active_source_owners.each do |owner|
+ expect(Todo.where(user: owner, target: source, action: Todo::MEMBER_ACCESS_REQUESTED, author: requester1.user).count).to eq 1
+ end
- users = create_list(:user, 12, :with_sign_ins)
- users.each do |user|
- group.add_owner(user)
+ excluded_source_owners.each do |owner|
+ expect(Todo.where(user: owner, target: source, action: Todo::MEMBER_ACCESS_REQUESTED, author: requester1.user).count).to eq 0
+ end
end
- ten_most_recently_active_group_owners = users.sort_by(&:last_sign_in_at).last(10)
- excluded_group_owners = users - ten_most_recently_active_group_owners
-
- requester = create(:group_member, group: group, user: assignee)
+ end
- service.create_member_access_request(requester)
+ context 'when total owners are less than 10' do
+ it 'creates todos for all source owners' do
+ users = create_list(:user, 4, :with_sign_ins)
+ users.map do |user|
+ source.add_owner(user)
+ end
- ten_most_recently_active_group_owners.each do |owner|
- expect(Todo.where(user: owner, target: group, action: Todo::MEMBER_ACCESS_REQUESTED, author: assignee).count).to eq 1
- end
+ service.create_member_access_request_todos(requester1)
- excluded_group_owners.each do |owner|
- expect(Todo.where(user: owner, target: group, action: Todo::MEMBER_ACCESS_REQUESTED, author: assignee).count).to eq 0
+ users.each do |owner|
+ expect(Todo.where(user: owner, target: source, action: Todo::MEMBER_ACCESS_REQUESTED, author: requester1.user).count).to eq 1
+ end
end
end
- end
-
- context 'when total owners are less than 10' do
- it 'creates todos for all group owners' do
- group = create(:group, :public)
- users = create_list(:user, 4, :with_sign_ins)
- users.map do |user|
- group.add_owner(user)
- end
+ context 'when multiple access requests are raised' do
+ it 'creates todos for 10 recently active source owners for multiple requests' do
+ users = create_list(:user, 12, :with_sign_ins)
+ users.each do |user|
+ source.add_owner(user)
+ end
+ ten_most_recently_active_source_owners = users.sort_by(&:last_sign_in_at).last(10)
+ excluded_source_owners = users - ten_most_recently_active_source_owners
- requester = create(:group_member, user: assignee, group: group)
- requester.requested_at = Time.now.utc
- requester.save!
+ service.create_member_access_request_todos(requester1)
+ service.create_member_access_request_todos(requester2)
- service.create_member_access_request(requester)
+ ten_most_recently_active_source_owners.each do |owner|
+ expect(Todo.where(user: owner, target: source, action: Todo::MEMBER_ACCESS_REQUESTED, author: requester1.user).count).to eq 1
+ expect(Todo.where(user: owner, target: source, action: Todo::MEMBER_ACCESS_REQUESTED, author: requester2.user).count).to eq 1
+ end
- users.each do |owner|
- expect(Todo.where(user: owner, target: group, action: Todo::MEMBER_ACCESS_REQUESTED, author: assignee).count).to eq 1
+ excluded_source_owners.each do |owner|
+ expect(Todo.where(user: owner, target: source, action: Todo::MEMBER_ACCESS_REQUESTED, author: requester1.user).count).to eq 0
+ expect(Todo.where(user: owner, target: source, action: Todo::MEMBER_ACCESS_REQUESTED, author: requester2.user).count).to eq 0
+ end
end
end
end
- context 'when multiple access requests are raised' do
- it 'creates todos for 10 recently active group owners for multiple requests' do
- group = create(:group, :public)
-
- users = create_list(:user, 12, :with_sign_ins)
- users.each do |user|
- group.add_owner(user)
- end
- ten_most_recently_active_group_owners = users.sort_by(&:last_sign_in_at).last(10)
- excluded_group_owners = users - ten_most_recently_active_group_owners
-
- requester1 = create(:group_member, group: group, user: assignee)
- requester2 = create(:group_member, group: group, user: non_member)
-
- service.create_member_access_request(requester1)
- service.create_member_access_request(requester2)
-
- ten_most_recently_active_group_owners.each do |owner|
- expect(Todo.where(user: owner, target: group, action: Todo::MEMBER_ACCESS_REQUESTED, author: assignee).count).to eq 1
- expect(Todo.where(user: owner, target: group, action: Todo::MEMBER_ACCESS_REQUESTED, author: non_member).count).to eq 1
- end
+ context 'when request is raised for group' do
+ it_behaves_like 'member access request is raised' do
+ let_it_be(:source) { create(:group, :public) }
+ let_it_be(:requester1) { create(:group_member, :access_request, group: source, user: assignee) }
+ let_it_be(:requester2) { create(:group_member, :access_request, group: source, user: non_member) }
+ end
+ end
- excluded_group_owners.each do |owner|
- expect(Todo.where(user: owner, target: group, action: Todo::MEMBER_ACCESS_REQUESTED, author: assignee).count).to eq 0
- expect(Todo.where(user: owner, target: group, action: Todo::MEMBER_ACCESS_REQUESTED, author: non_member).count).to eq 0
- end
+ context 'when request is raised for project' do
+ it_behaves_like 'member access request is raised' do
+ let_it_be(:source) { create(:project, :public) }
+ let_it_be(:requester1) { create(:project_member, :access_request, project: source, user: assignee) }
+ let_it_be(:requester2) { create(:project_member, :access_request, project: source, user: non_member) }
end
end
end