diff --git a/spec/features/projects/fork_spec.rb b/spec/features/projects/fork_spec.rb index 7d734d5d2dfeb19569eb0bce1dc1f64e9a671e35..5caa2f497b8e8833f80407d128db72f25e1d5ab8 100644 --- a/spec/features/projects/fork_spec.rb +++ b/spec/features/projects/fork_spec.rb @@ -14,22 +14,79 @@ end shared_examples 'fork button on project page' do - it 'allows user to fork project from the project page' do - visit project_path(project) + context 'when the user has access to only one namespace and has already forked the project' do + before do + fork_project(project, user, repository: true, namespace: user.namespace) + end - expect(page).not_to have_css('a.disabled', text: 'Fork') - end + it 'allows user to go to their fork' do + visit project_path(project) - context 'user has exceeded personal project limit' do - before do - user.update!(projects_limit: 0) + path = namespace_project_path(user, user.fork_of(project)) + + fork_button = find_link 'Fork' + expect(fork_button['href']).to eq(path) + expect(fork_button['class']).not_to include('disabled') end + end - it 'disables fork button on project page' do + shared_examples 'fork button creates new fork' do + it 'allows user to fork the project from the project page' do visit project_path(project) - expect(page).to have_css('a.disabled', text: 'Fork') + path = new_project_fork_path(project) + + fork_button = find_link 'Fork' + expect(fork_button['href']).to eq(path) + expect(fork_button['class']).not_to include('disabled') + end + + context 'when the user cannot fork the project' do + let(:project) do + # Disabling the repository makes sure that the user cannot fork the project + create(:project, :public, :repository, :repository_disabled, description: 'some description') + end + + it 'disables fork button on project page' do + visit project_path(project) + + path = new_project_fork_path(project) + + fork_button = find_link 'Fork' + expect(fork_button['href']).to eq(path) + expect(fork_button['class']).to include('disabled') + end + end + + context 'user has exceeded personal project limit' do + before do + user.update!(projects_limit: 0) + end + + it 'disables fork button on project page' do + visit project_path(project) + + path = new_project_fork_path(project) + + fork_button = find_link 'Fork' + expect(fork_button['href']).to eq(path) + expect(fork_button['class']).to include('disabled') + end + end + end + + context 'when the user has not already forked the project' do + it_behaves_like 'fork button creates new fork' + end + + context 'when the user has access to more than one namespace' do + let(:group) { create(:group) } + + before do + group.add_developer(user) end + + it_behaves_like 'fork button creates new fork' end end @@ -195,7 +252,9 @@ def submit_form(group_obj = group) def create_fork(group_obj = group) visit project_path(project) - find('.fork-btn').click + + click_link 'Fork' + submit_form(group_obj) wait_for_requests end