diff options
Diffstat (limited to 'spec/services/todos/destroy/group_private_service_spec.rb')
-rw-r--r-- | spec/services/todos/destroy/group_private_service_spec.rb | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/spec/services/todos/destroy/group_private_service_spec.rb b/spec/services/todos/destroy/group_private_service_spec.rb index be470688084..b3185bc72ff 100644 --- a/spec/services/todos/destroy/group_private_service_spec.rb +++ b/spec/services/todos/destroy/group_private_service_spec.rb @@ -14,7 +14,7 @@ RSpec.describe Todos::Destroy::GroupPrivateService, feature_category: :team_plan let!(:todo_group_member) { create(:todo, user: group_member, group: group) } let!(:todo_project_member) { create(:todo, user: project_member, group: group) } - describe '#execute' do + describe '#execute', :aggregate_failures do before do group.add_developer(group_member) project.add_developer(project_member) @@ -57,7 +57,37 @@ RSpec.describe Todos::Destroy::GroupPrivateService, feature_category: :team_plan end it 'removes todos only for users who are not group users' do - expect { subject }.to change { Todo.count }.from(7).to(5) + expect { subject }.to change { Todo.count }.from(7).to(4) + + expect(parent_member.todos).to contain_exactly(todo_parent_member) + expect(subgroup_member.todos).to be_empty + expect(subgproject_member.todos).to contain_exactly(todo_subproject_member) + end + end + + context 'with member via group share' do + let(:invited_group) { create(:group) } + let(:invited_group_member) { create(:user).tap { |u| invited_group.add_guest(u) } } + + let!(:todo_invited_group_member) { create(:todo, user: invited_group_member, group: group) } + + it 'does not remove todos for users invited to the group' do + create(:group_group_link, shared_group: group, shared_with_group: invited_group) + + expect { subject }.to change { Todo.count }.from(5).to(3) + + expect(invited_group_member.todos).to contain_exactly(todo_invited_group_member) + end + + it 'does not remove todos for users invited to an ancestor group' do + parent_group = create(:group) + group.update!(parent: parent_group) + + create(:group_group_link, shared_group: parent_group, shared_with_group: invited_group) + + expect { subject }.to change { Todo.count }.from(5).to(3) + + expect(invited_group_member.todos).to contain_exactly(todo_invited_group_member) end end end |