Skip to content
Snippets Groups Projects
Commit d2cd9d96 authored by Sean McGivern's avatar Sean McGivern
Browse files

Ensure last group owner isn't removed on expiry

parent 396f85e4
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -7,6 +7,8 @@ module Members
end
 
def execute
return false if member.is_a?(GroupMember) && member.source.last_owner?(member.user)
member.destroy
 
if member.request? && member.user != user
Loading
Loading
require 'spec_helper'
 
describe RemoveExpiredMembersWorker do
let!(:worker) { RemoveExpiredMembersWorker.new }
let!(:expired_member) { create(:project_member, expires_at: 1.hour.ago) }
let!(:member_expiring_in_future) { create(:project_member, expires_at: 10.days.from_now) }
let!(:non_expiring_member) { create(:project_member, expires_at: nil) }
let(:worker) { RemoveExpiredMembersWorker.new }
 
describe '#perform' do
it 'removes expired members' do
expect { worker.perform }.to change { Member.count }.by(-1)
expect(Member.find_by(id: expired_member.id)).to be_nil
context 'project members' do
let!(:expired_project_member) { create(:project_member, expires_at: 1.hour.ago, access_level: GroupMember::DEVELOPER) }
let!(:project_member_expiring_in_future) { create(:project_member, expires_at: 10.days.from_now, access_level: GroupMember::DEVELOPER) }
let!(:non_expiring_project_member) { create(:project_member, expires_at: nil, access_level: GroupMember::DEVELOPER) }
it 'removes expired members' do
expect { worker.perform }.to change { Member.count }.by(-1)
expect(Member.find_by(id: expired_project_member.id)).to be_nil
end
it 'leaves members who expire in the future' do
worker.perform
expect(project_member_expiring_in_future.reload).to be_present
end
it 'leaves members who do not expire at all' do
worker.perform
expect(non_expiring_project_member.reload).to be_present
end
end
 
it 'leaves members who expire in the future' do
worker.perform
expect(member_expiring_in_future.reload).to be_present
context 'group members' do
let!(:expired_group_member) { create(:group_member, expires_at: 1.hour.ago, access_level: GroupMember::DEVELOPER) }
let!(:group_member_expiring_in_future) { create(:group_member, expires_at: 10.days.from_now, access_level: GroupMember::DEVELOPER) }
let!(:non_expiring_group_member) { create(:group_member, expires_at: nil, access_level: GroupMember::DEVELOPER) }
it 'removes expired members' do
expect { worker.perform }.to change { Member.count }.by(-1)
expect(Member.find_by(id: expired_group_member.id)).to be_nil
end
it 'leaves members who expire in the future' do
worker.perform
expect(group_member_expiring_in_future.reload).to be_present
end
it 'leaves members who do not expire at all' do
worker.perform
expect(non_expiring_group_member.reload).to be_present
end
end
 
it 'leaves members who do not expire at all' do
worker.perform
expect(non_expiring_member.reload).to be_present
context 'when the last group owner expires' do
let!(:expired_group_owner) { create(:group_member, expires_at: 1.hour.ago, access_level: GroupMember::OWNER) }
it 'does not delete the owner' do
worker.perform
expect(expired_group_owner.reload).to be_present
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment