Commit 8b426b63 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Delete the fork network when removing the last membership

parent 4aa18590
......@@ -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
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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment