Delete the fork network when removing the last membership
This commit is contained in:
parent
4aa18590b3
commit
8b426b63d6
3 changed files with 36 additions and 0 deletions
|
@ -4,4 +4,14 @@ class ForkNetworkMember < ActiveRecord::Base
|
|||
belongs_to :forked_from_project, class_name: 'Project'
|
||||
|
||||
validates :fork_network, :project, presence: true
|
||||
|
||||
after_destroy :cleanup_fork_network
|
||||
|
||||
private
|
||||
|
||||
def cleanup_fork_network
|
||||
# Explicitly using `#count` makes sure we have the correct number if the
|
||||
# relation was loaded in the fork_network.
|
||||
fork_network.destroy if fork_network.fork_network_members.count == 0
|
||||
end
|
||||
end
|
||||
|
|
8
spec/factories/fork_network_members.rb
Normal file
8
spec/factories/fork_network_members.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
FactoryGirl.define do
|
||||
factory :fork_network_member do
|
||||
association :project
|
||||
association :fork_network
|
||||
|
||||
forked_from_project { fork_network.root_project }
|
||||
end
|
||||
end
|
|
@ -5,4 +5,22 @@ describe ForkNetworkMember do
|
|||
it { is_expected.to validate_presence_of(:project) }
|
||||
it { is_expected.to validate_presence_of(:fork_network) }
|
||||
end
|
||||
|
||||
describe 'destroying a ForkNetworkMember' do
|
||||
let(:fork_network_member) { create(:fork_network_member) }
|
||||
let(:fork_network) { fork_network_member.fork_network }
|
||||
|
||||
it 'removes the fork network if it was the last member' do
|
||||
fork_network.fork_network_members.destroy_all
|
||||
|
||||
expect(ForkNetwork.count).to eq(0)
|
||||
end
|
||||
|
||||
it 'does not destroy the fork network if there are members left' do
|
||||
fork_network_member.destroy!
|
||||
|
||||
# The root of the fork network is left
|
||||
expect(ForkNetwork.count).to eq(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue