diff options
author | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-10-03 17:06:09 +0200 |
---|---|---|
committer | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-10-07 11:46:23 +0200 |
commit | f90b27da7777b0c72782d2a930f770e2f27757e2 (patch) | |
tree | 50f1d5b84e40c45c29a1be2b8150029da7db2d87 /spec | |
parent | 8160550439d2027c12d5556c8ce1f8afd250628a (diff) | |
download | gitlab-ce-f90b27da7777b0c72782d2a930f770e2f27757e2.tar.gz |
Find forks within users/namespaces using fork memberships
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories/fork_networks.rb | 5 | ||||
-rw-r--r-- | spec/models/fork_network_spec.rb | 12 | ||||
-rw-r--r-- | spec/models/namespace_spec.rb | 23 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 17 |
4 files changed, 57 insertions, 0 deletions
diff --git a/spec/factories/fork_networks.rb b/spec/factories/fork_networks.rb new file mode 100644 index 00000000000..f42d36f3d19 --- /dev/null +++ b/spec/factories/fork_networks.rb @@ -0,0 +1,5 @@ +FactoryGirl.define do + factory :fork_network do + association :root_project, factory: :project + end +end diff --git a/spec/models/fork_network_spec.rb b/spec/models/fork_network_spec.rb index 4781a959846..605ccd6db06 100644 --- a/spec/models/fork_network_spec.rb +++ b/spec/models/fork_network_spec.rb @@ -12,6 +12,18 @@ describe ForkNetwork do end end + describe '#find_fork_in' do + it 'finds all fork of the current network in al collection' do + network = create(:fork_network) + root_project = network.root_project + another_project = fork_project(root_project) + create(:project) + + expect(network.find_forks_in(Project.all)) + .to contain_exactly(another_project, root_project) + end + end + context 'for a deleted project' do it 'keeps the fork network' do project = create(:project, :public) diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index 3ea614776ca..2ebf6acd42a 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Namespace do + include ProjectForksHelper + let!(:namespace) { create(:namespace) } describe 'associations' do @@ -520,4 +522,25 @@ describe Namespace do end end end + + describe '#has_forks_of?' do + let(:project) { create(:project, :public) } + let!(:forked_project) { fork_project(project, namespace.owner, namespace: namespace) } + + before do + # Reset the fork network relation + project.reload + end + + it 'knows if there is a direct fork in the namespace' do + expect(namespace.find_fork_of(project)).to eq(forked_project) + end + + it 'knows when there is as fork-of-fork in the namespace' do + other_namespace = create(:namespace) + other_fork = fork_project(forked_project, other_namespace.owner, namespace: other_namespace) + + expect(other_namespace.find_fork_of(project)).to eq(other_fork) + end + end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 52ca068f9a4..ece6968dde6 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1456,6 +1456,23 @@ describe User do end end + describe '#fork_of' do + let(:user) { create(:user) } + + it "returns a user's fork of a project" do + project = create(:project, :public) + user_fork = fork_project(project, user, namespace: user.namespace) + + expect(user.fork_of(project)).to eq(user_fork) + end + + it 'returns nil if the project does not have a fork network' do + project = create(:project) + + expect(user.fork_of(project)).to be_nil + end + end + describe '#can_be_removed?' do subject { create(:user) } |