Commit 55d77769 authored by Paul Slaughter's avatar Paul Slaughter

Show Web IDE button even if MRs are not available

**Note:**
- Adds feature specs and updates unit tests for this
  so that we can test this at the use case level +
  when the vue file list is fully enabled.
parent 1fc8efd1
...@@ -84,17 +84,16 @@ ...@@ -84,17 +84,16 @@
= render 'projects/find_file_link' = render 'projects/find_file_link'
- if can_create_mr_from_fork - if can_collaborate || current_user&.already_forked?(@project)
- if can_collaborate || current_user&.already_forked?(@project) - if vue_file_list_enabled?
- if vue_file_list_enabled? #js-tree-web-ide-link.d-inline-block
#js-tree-web-ide-link.d-inline-block
- else
= link_to ide_edit_path(@project, @ref, @path), class: 'btn btn-default qa-web-ide-button' do
= _('Web IDE')
- else - else
= link_to '#modal-confirm-fork', class: 'btn btn-default qa-web-ide-button', data: { target: '#modal-confirm-fork', toggle: 'modal'} do = link_to ide_edit_path(@project, @ref, @path), class: 'btn btn-default qa-web-ide-button' do
= _('Web IDE') = _('Web IDE')
= render 'shared/confirm_fork_modal', fork_path: ide_fork_and_edit_path(@project, @ref, @path) - elsif can_create_mr_from_fork
= link_to '#modal-confirm-fork', class: 'btn btn-default qa-web-ide-button', data: { target: '#modal-confirm-fork', toggle: 'modal'} do
= _('Web IDE')
= render 'shared/confirm_fork_modal', fork_path: ide_fork_and_edit_path(@project, @ref, @path)
- if show_xcode_link?(@project) - if show_xcode_link?(@project)
.project-action-button.project-xcode.inline< .project-action-button.project-xcode.inline<
......
...@@ -3,66 +3,96 @@ ...@@ -3,66 +3,96 @@
require 'spec_helper' require 'spec_helper'
describe 'Projects > Show > Collaboration links', :js do describe 'Projects > Show > Collaboration links', :js do
let(:project) { create(:project, :repository) } using RSpec::Parameterized::TableSyntax
let(:project) { create(:project, :repository, :public) }
let(:user) { create(:user) } let(:user) { create(:user) }
before do before do
project.add_developer(user)
sign_in(user) sign_in(user)
end end
it 'shows all the expected links' do context 'with developer user' do
visit project_path(project) before do
project.add_developer(user)
end
# The navigation bar it 'shows all the expected links' do
page.within('.header-new') do visit project_path(project)
find('.qa-new-menu-toggle').click
aggregate_failures 'dropdown links in the navigation bar' do # The navigation bar
expect(page).to have_link('New issue') page.within('.header-new') do
expect(page).to have_link('New merge request') find('.qa-new-menu-toggle').click
expect(page).to have_link('New snippet', href: new_project_snippet_path(project))
end
find('.qa-new-menu-toggle').click aggregate_failures 'dropdown links in the navigation bar' do
end expect(page).to have_link('New issue')
expect(page).to have_link('New merge request')
expect(page).to have_link('New snippet', href: new_project_snippet_path(project))
end
# The dropdown above the tree find('.qa-new-menu-toggle').click
page.within('.repo-breadcrumb') do end
find('.qa-add-to-tree').click
aggregate_failures 'dropdown links above the repo tree' do # The dropdown above the tree
expect(page).to have_link('New file') page.within('.repo-breadcrumb') do
expect(page).to have_link('Upload file') find('.qa-add-to-tree').click
expect(page).to have_link('New directory')
expect(page).to have_link('New branch') aggregate_failures 'dropdown links above the repo tree' do
expect(page).to have_link('New tag') expect(page).to have_link('New file')
expect(page).to have_link('Upload file')
expect(page).to have_link('New directory')
expect(page).to have_link('New branch')
expect(page).to have_link('New tag')
end
end end
# The Web IDE
expect(page).to have_link('Web IDE')
end end
# The Web IDE it 'hides the links when the project is archived' do
expect(page).to have_link('Web IDE') project.update!(archived: true)
end
it 'hides the links when the project is archived' do visit project_path(project)
project.update!(archived: true)
visit project_path(project) page.within('.header-new') do
find('.qa-new-menu-toggle').click
page.within('.header-new') do aggregate_failures 'dropdown links' do
find('.qa-new-menu-toggle').click expect(page).not_to have_link('New issue')
expect(page).not_to have_link('New merge request')
expect(page).not_to have_link('New snippet', href: new_project_snippet_path(project))
end
aggregate_failures 'dropdown links' do find('.qa-new-menu-toggle').click
expect(page).not_to have_link('New issue')
expect(page).not_to have_link('New merge request')
expect(page).not_to have_link('New snippet', href: new_project_snippet_path(project))
end end
find('.qa-new-menu-toggle').click expect(page).not_to have_selector('.qa-add-to-tree')
expect(page).not_to have_link('Web IDE')
end end
end
expect(page).not_to have_selector('.qa-add-to-tree') context "Web IDE link" do
where(:merge_requests_access_level, :user_level, :expect_ide_link) do
::ProjectFeature::DISABLED | :guest | false
::ProjectFeature::DISABLED | :developer | true
::ProjectFeature::PRIVATE | :guest | false
::ProjectFeature::PRIVATE | :developer | true
::ProjectFeature::ENABLED | :guest | true
::ProjectFeature::ENABLED | :developer | true
end
expect(page).not_to have_link('Web IDE') with_them do
before do
project.project_feature.update!({ merge_requests_access_level: merge_requests_access_level })
project.add_user(user, user_level)
visit project_path(project)
end
it "updates Web IDE link" do
expect(page.has_link?('Web IDE')).to be(expect_ide_link)
end
end
end end
end end
...@@ -19,12 +19,12 @@ describe 'projects/tree/_tree_header' do ...@@ -19,12 +19,12 @@ describe 'projects/tree/_tree_header' do
allow(view).to receive(:can_collaborate_with_project?) { true } allow(view).to receive(:can_collaborate_with_project?) { true }
end end
it 'does not render the WebIDE button when user cannot create fork or cannot open MR' do it 'renders the WebIDE button when user can collaborate but not create fork or MR' do
allow(view).to receive(:can?) { false } allow(view).to receive(:can?) { false }
render render
expect(rendered).not_to have_link('Web IDE') expect(rendered).to have_link('Web IDE')
end end
it 'renders the WebIDE button when user can create fork and can open MR in project' do it 'renders the WebIDE button when user can create fork and can open MR in project' do
...@@ -43,4 +43,13 @@ describe 'projects/tree/_tree_header' do ...@@ -43,4 +43,13 @@ describe 'projects/tree/_tree_header' do
expect(rendered).to have_link('Web IDE', href: '#modal-confirm-fork') expect(rendered).to have_link('Web IDE', href: '#modal-confirm-fork')
end end
it 'does not render the WebIDE button when user cannot collaborate or create mr' do
allow(view).to receive(:can?) { false }
allow(view).to receive(:can_collaborate_with_project?) { false }
render
expect(rendered).not_to have_link('Web IDE')
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