diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-14 03:10:05 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-14 03:10:05 +0300 |
commit | d2608eb839100e794930c246ee357c62d0482714 (patch) | |
tree | a04c214e54132062650f625e3374a6e3c102d44c /spec | |
parent | 79ecd9a7489305e8357ca1df74ac7d7cc775b0d3 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
6 files changed, 146 insertions, 45 deletions
diff --git a/spec/frontend/vue_mr_widget/components/mr_widget_header_spec.js b/spec/frontend/vue_mr_widget/components/mr_widget_header_spec.js index f44f0b98207..a09269e869c 100644 --- a/spec/frontend/vue_mr_widget/components/mr_widget_header_spec.js +++ b/spec/frontend/vue_mr_widget/components/mr_widget_header_spec.js @@ -1,6 +1,7 @@ import { shallowMount, mount } from '@vue/test-utils'; import { nextTick } from 'vue'; import Header from '~/vue_merge_request_widget/components/mr_widget_header.vue'; +import WebIdeLink from '~/vue_shared/components/web_ide_link.vue'; describe('MRWidgetHeader', () => { let wrapper; @@ -35,6 +36,8 @@ describe('MRWidgetHeader', () => { statusPath: 'abc', }; + const findWebIdeButton = () => wrapper.findComponent(WebIdeLink); + describe('computed', () => { describe('shouldShowCommitsBehindText', () => { it('return true when there are divergedCommitsCount', () => { @@ -147,73 +150,81 @@ describe('MRWidgetHeader', () => { statusPath: 'abc', sourceProjectFullPath: 'root/gitlab-ce', targetProjectFullPath: 'gitlab-org/gitlab-ce', + gitpodEnabled: true, + showGitpodButton: true, + gitpodUrl: 'http://gitpod.localhost', }; - beforeEach(() => { + it('renders checkout branch button with modal trigger', () => { createComponent({ mr: { ...mrDefaultOptions }, }); - }); - it('renders checkout branch button with modal trigger', () => { const button = wrapper.find('.js-check-out-branch'); expect(button.text().trim()).toBe('Check out branch'); }); - it('renders web ide button', async () => { - const button = wrapper.find('.js-web-ide'); - - await nextTick(); - - expect(button.text().trim()).toBe('Open in Web IDE'); - expect(button.classes('disabled')).toBe(false); - expect(button.attributes('href')).toBe( - '/-/ide/project/root/gitlab-ce/merge_requests/1?target_project=gitlab-org%2Fgitlab-ce', - ); - }); - - it('renders web ide button in disabled state with no href', async () => { - const mr = { ...mrDefaultOptions, canPushToSourceBranch: false }; - createComponent({ mr }); - - await nextTick(); - - const link = wrapper.find('.js-web-ide'); - - expect(link.attributes('disabled')).toBe('true'); - expect(link.attributes('href')).toBeUndefined(); - }); - - it('renders web ide button with blank query string if target & source project branch', async () => { - createComponent({ mr: { ...mrDefaultOptions, targetProjectFullPath: 'root/gitlab-ce' } }); + it.each([ + [ + 'renders web ide button', + { + mrProps: {}, + relativeUrl: '', + webIdeUrl: + '/-/ide/project/root/gitlab-ce/merge_requests/1?target_project=gitlab-org%2Fgitlab-ce', + }, + ], + [ + 'renders web ide button with blank target_project, when mr has same target project', + { + mrProps: { targetProjectFullPath: 'root/gitlab-ce' }, + relativeUrl: '', + webIdeUrl: '/-/ide/project/root/gitlab-ce/merge_requests/1?target_project=', + }, + ], + [ + 'renders web ide button with relative url', + { + mrProps: { iid: 2 }, + relativeUrl: '/gitlab', + webIdeUrl: + '/gitlab/-/ide/project/root/gitlab-ce/merge_requests/2?target_project=gitlab-org%2Fgitlab-ce', + }, + ], + ])('%s', async (_, { mrProps, relativeUrl, webIdeUrl }) => { + gon.relative_url_root = relativeUrl; + createComponent({ + mr: { ...mrDefaultOptions, ...mrProps }, + }); await nextTick(); - const button = wrapper.find('.js-web-ide'); - - expect(button.text().trim()).toBe('Open in Web IDE'); - expect(button.attributes('href')).toBe( - '/-/ide/project/root/gitlab-ce/merge_requests/1?target_project=', - ); + expect(findWebIdeButton().props()).toMatchObject({ + showEditButton: false, + showWebIdeButton: true, + webIdeText: 'Open in Web IDE', + gitpodText: 'Open in Gitpod', + gitpodEnabled: true, + showGitpodButton: true, + gitpodUrl: 'http://gitpod.localhost', + webIdeUrl, + }); }); - it('renders web ide button with relative URL', async () => { - gon.relative_url_root = '/gitlab'; - - createComponent({ mr: { ...mrDefaultOptions, iid: 2 } }); + it('does not render web ide button if source branch is removed', async () => { + createComponent({ mr: { ...mrDefaultOptions, sourceBranchRemoved: true } }); await nextTick(); - const button = wrapper.find('.js-web-ide'); - - expect(button.text().trim()).toBe('Open in Web IDE'); - expect(button.attributes('href')).toBe( - '/gitlab/-/ide/project/root/gitlab-ce/merge_requests/2?target_project=gitlab-org%2Fgitlab-ce', - ); + expect(findWebIdeButton().exists()).toBe(false); }); it('renders download dropdown with links', () => { + createComponent({ + mr: { ...mrDefaultOptions }, + }); + expectDownloadDropdownItems(); }); }); diff --git a/spec/frontend/vue_mr_widget/mock_data.js b/spec/frontend/vue_mr_widget/mock_data.js index 15dcbb99623..f356f6fb5bf 100644 --- a/spec/frontend/vue_mr_widget/mock_data.js +++ b/spec/frontend/vue_mr_widget/mock_data.js @@ -281,6 +281,9 @@ export default { security_reports_docs_path: 'security-reports-docs-path', sast_comparison_path: '/sast_comparison_path', secret_scanning_comparison_path: '/secret_scanning_comparison_path', + gitpod_enabled: true, + show_gitpod_button: true, + gitpod_url: 'http://gitpod.localhost', }; export const mockStore = { diff --git a/spec/frontend/vue_mr_widget/stores/mr_widget_store_spec.js b/spec/frontend/vue_mr_widget/stores/mr_widget_store_spec.js index cfc846075ea..bf0179aa425 100644 --- a/spec/frontend/vue_mr_widget/stores/mr_widget_store_spec.js +++ b/spec/frontend/vue_mr_widget/stores/mr_widget_store_spec.js @@ -10,6 +10,14 @@ describe('MergeRequestStore', () => { store = new MergeRequestStore(mockData); }); + it('should initialize gitpod attributes', () => { + expect(store).toMatchObject({ + gitpodEnabled: mockData.gitpod_enabled, + showGitpodButton: mockData.show_gitpod_button, + gitpodUrl: mockData.gitpod_url, + }); + }); + describe('setData', () => { it('should set isSHAMismatch when the diff SHA changes', () => { store.setData({ ...mockData, diff_head_sha: 'a-different-string' }); diff --git a/spec/frontend/vue_shared/components/web_ide_link_spec.js b/spec/frontend/vue_shared/components/web_ide_link_spec.js index 0fd4d0dab87..5fe4eeb6061 100644 --- a/spec/frontend/vue_shared/components/web_ide_link_spec.js +++ b/spec/frontend/vue_shared/components/web_ide_link_spec.js @@ -85,6 +85,10 @@ describe('Web IDE link component', () => { expectedActions: [ACTION_WEB_IDE, ACTION_EDIT], }, { + props: { webIdeText: 'Test Web IDE' }, + expectedActions: [{ ...ACTION_WEB_IDE_EDIT_FORK, text: 'Test Web IDE' }, ACTION_EDIT], + }, + { props: { isFork: true }, expectedActions: [ACTION_WEB_IDE_EDIT_FORK, ACTION_EDIT], }, @@ -105,6 +109,10 @@ describe('Web IDE link component', () => { expectedActions: [ACTION_WEB_IDE, ACTION_EDIT, ACTION_GITPOD_ENABLE], }, { + props: { showEditButton: false, showGitpodButton: true, gitpodText: 'Test Gitpod' }, + expectedActions: [ACTION_WEB_IDE, { ...ACTION_GITPOD_ENABLE, text: 'Test Gitpod' }], + }, + { props: { showEditButton: false }, expectedActions: [ACTION_WEB_IDE], }, diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb index 926b33e8e1f..fb1d157b360 100644 --- a/spec/serializers/merge_request_widget_entity_spec.rb +++ b/spec/serializers/merge_request_widget_entity_spec.rb @@ -354,4 +354,45 @@ RSpec.describe MergeRequestWidgetEntity do end end end + + describe 'when gitpod is disabled' do + before do + allow(Gitlab::CurrentSettings).to receive(:gitpod_enabled).and_return(false) + end + + it 'exposes gitpod attributes' do + expect(subject).to include( + show_gitpod_button: false, + gitpod_url: nil, + gitpod_enabled: false + ) + end + end + + describe 'when gitpod is enabled' do + before do + allow(Gitlab::CurrentSettings).to receive(:gitpod_enabled).and_return(true) + allow(Gitlab::CurrentSettings).to receive(:gitpod_url).and_return("https://gitpod.example.com") + end + + it 'exposes gitpod attributes' do + mr_url = Gitlab::Routing.url_helpers.project_merge_request_url(resource.project, resource) + + expect(subject).to include( + show_gitpod_button: true, + gitpod_url: "https://gitpod.example.com##{mr_url}", + gitpod_enabled: false + ) + end + + describe 'when gitpod is enabled for user' do + before do + allow(user).to receive(:gitpod_enabled).and_return(true) + end + + it 'exposes gitpod_enabled as true' do + expect(subject[:gitpod_enabled]).to be(true) + end + end + end end diff --git a/spec/views/projects/merge_requests/show.html.haml_spec.rb b/spec/views/projects/merge_requests/show.html.haml_spec.rb index 40d11342ec4..6b6bc1f0b14 100644 --- a/spec/views/projects/merge_requests/show.html.haml_spec.rb +++ b/spec/views/projects/merge_requests/show.html.haml_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'projects/merge_requests/show.html.haml', :aggregate_failures do + using RSpec::Parameterized::TableSyntax + include_context 'merge request show action' before do @@ -43,4 +45,32 @@ RSpec.describe 'projects/merge_requests/show.html.haml', :aggregate_failures do end end end + + describe 'gitpod modal' do + let(:gitpod_modal_selector) { '#modal-enable-gitpod' } + let(:user) { create(:user) } + let(:user_gitpod_enabled) { create(:user).tap { |x| x.update!(gitpod_enabled: true) } } + + where(:site_enabled, :current_user, :should_show) do + false | ref(:user) | false + true | ref(:user) | true + true | nil | true + true | ref(:user_gitpod_enabled) | false + end + + with_them do + it 'handles rendering gitpod user enable modal' do + allow(Gitlab::CurrentSettings).to receive(:gitpod_enabled).and_return(site_enabled) + allow(view).to receive(:current_user).and_return(current_user) + + render + + if should_show + expect(rendered).to have_css(gitpod_modal_selector) + else + expect(rendered).to have_no_css(gitpod_modal_selector) + end + end + end + end end |