diff options
Diffstat (limited to 'spec/frontend/repository/components/blob_content_viewer_spec.js')
-rw-r--r-- | spec/frontend/repository/components/blob_content_viewer_spec.js | 81 |
1 files changed, 19 insertions, 62 deletions
diff --git a/spec/frontend/repository/components/blob_content_viewer_spec.js b/spec/frontend/repository/components/blob_content_viewer_spec.js index 5ac2627dc5d..cc077e20e0b 100644 --- a/spec/frontend/repository/components/blob_content_viewer_spec.js +++ b/spec/frontend/repository/components/blob_content_viewer_spec.js @@ -8,11 +8,11 @@ import MockAdapter from 'axios-mock-adapter'; import VueApollo from 'vue-apollo'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; +import { createAlert } from '~/alert'; import BlobContent from '~/blob/components/blob_content.vue'; import BlobHeader from '~/blob/components/blob_header.vue'; import BlobButtonGroup from '~/repository/components/blob_button_group.vue'; import BlobContentViewer from '~/repository/components/blob_content_viewer.vue'; -import WebIdeLink from 'ee_else_ce/vue_shared/components/web_ide_link.vue'; import ForkSuggestion from '~/repository/components/fork_suggestion.vue'; import { loadViewer } from '~/repository/components/blob_viewers'; import DownloadViewer from '~/repository/components/blob_viewers/download_viewer.vue'; @@ -20,8 +20,6 @@ import EmptyViewer from '~/repository/components/blob_viewers/empty_viewer.vue'; import SourceViewer from '~/vue_shared/components/source_viewer/source_viewer.vue'; import blobInfoQuery from 'shared_queries/repository/blob_info.query.graphql'; import projectInfoQuery from '~/repository/queries/project_info.query.graphql'; -import userInfoQuery from '~/repository/queries/user_info.query.graphql'; -import applicationInfoQuery from '~/repository/queries/application_info.query.graphql'; import CodeIntelligence from '~/code_navigation/components/app.vue'; import * as urlUtility from '~/lib/utils/url_utility'; import { isLoggedIn, handleLocationHash } from '~/lib/utils/common_utils'; @@ -34,8 +32,6 @@ import { simpleViewerMock, richViewerMock, projectMock, - userInfoMock, - applicationInfoMock, userPermissionsMock, propsMock, refMock, @@ -46,12 +42,11 @@ jest.mock('~/repository/components/blob_viewers'); jest.mock('~/lib/utils/url_utility'); jest.mock('~/lib/utils/common_utils'); jest.mock('~/blob/line_highlighter'); +jest.mock('~/alert'); let wrapper; let blobInfoMockResolver; -let userInfoMockResolver; let projectInfoMockResolver; -let applicationInfoMockResolver; Vue.use(Vuex); @@ -95,7 +90,7 @@ const createComponent = async (mockData = {}, mountFn = shallowMount, mockRoute const projectInfo = { __typename: 'Project', - id: '123', + id: projectMock.id, userPermissions: { pushCode, forkProject, @@ -121,19 +116,9 @@ const createComponent = async (mockData = {}, mountFn = shallowMount, mockRoute data: { isBinary, project: blobInfo }, }); - userInfoMockResolver = jest.fn().mockResolvedValue({ - data: { ...userInfoMock }, - }); - - applicationInfoMockResolver = jest.fn().mockResolvedValue({ - data: { ...applicationInfoMock }, - }); - const fakeApollo = createMockApollo([ [blobInfoQuery, blobInfoMockResolver], - [userInfoQuery, userInfoMockResolver], [projectInfoQuery, projectInfoMockResolver], - [applicationInfoQuery, applicationInfoMockResolver], ]); wrapper = extendedWrapper( @@ -167,7 +152,6 @@ const execImmediately = (callback) => { describe('Blob content viewer component', () => { const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon); const findBlobHeader = () => wrapper.findComponent(BlobHeader); - const findWebIdeLink = () => wrapper.findComponent(WebIdeLink); const findBlobContent = () => wrapper.findComponent(BlobContent); const findBlobButtonGroup = () => wrapper.findComponent(BlobButtonGroup); const findForkSuggestion = () => wrapper.findComponent(ForkSuggestion); @@ -197,9 +181,22 @@ describe('Blob content viewer component', () => { expect(findBlobHeader().props('hasRenderError')).toEqual(false); expect(findBlobHeader().props('hideViewerSwitcher')).toEqual(true); expect(findBlobHeader().props('blob')).toEqual(simpleViewerMock); + expect(findBlobHeader().props('showForkSuggestion')).toEqual(false); + expect(findBlobHeader().props('projectPath')).toEqual(propsMock.projectPath); + expect(findBlobHeader().props('projectId')).toEqual(projectMock.id); expect(mockRouterPush).not.toHaveBeenCalled(); }); + it('creates an alert when the BlobHeader component emits an error', async () => { + await createComponent(); + + findBlobHeader().vm.$emit('error'); + + expect(createAlert).toHaveBeenCalledWith({ + message: 'An error occurred while loading the file. Please try again.', + }); + }); + it('copies blob text to clipboard', async () => { jest.spyOn(navigator.clipboard, 'writeText'); await createComponent(); @@ -401,45 +398,6 @@ describe('Blob content viewer component', () => { }); describe('BlobHeader action slot', () => { - const { ideEditPath, editBlobPath } = simpleViewerMock; - - it('renders WebIdeLink button in simple viewer', async () => { - await createComponent({ inject: { BlobContent: true, BlobReplace: true } }, mount); - - expect(findWebIdeLink().props()).toMatchObject({ - editUrl: editBlobPath, - webIdeUrl: ideEditPath, - showEditButton: true, - showGitpodButton: applicationInfoMock.gitpodEnabled, - gitpodEnabled: userInfoMock.currentUser.gitpodEnabled, - showPipelineEditorButton: true, - gitpodUrl: simpleViewerMock.gitpodBlobUrl, - pipelineEditorUrl: simpleViewerMock.pipelineEditorPath, - userPreferencesGitpodPath: userInfoMock.currentUser.preferencesGitpodPath, - userProfileEnableGitpodPath: userInfoMock.currentUser.profileEnableGitpodPath, - }); - }); - - it('renders WebIdeLink button in rich viewer', async () => { - await createComponent({ blob: richViewerMock }, mount); - - expect(findWebIdeLink().props()).toMatchObject({ - editUrl: editBlobPath, - webIdeUrl: ideEditPath, - showEditButton: true, - }); - }); - - it('renders WebIdeLink button for binary files', async () => { - mockAxios.onGet(legacyViewerUrl).replyOnce(HTTP_STATUS_OK, axiosMockResponse); - await createComponent({}, mount); - expect(findWebIdeLink().props()).toMatchObject({ - editUrl: editBlobPath, - webIdeUrl: ideEditPath, - showEditButton: false, - }); - }); - describe('blob header binary file', () => { it('passes the correct isBinary value when viewing a binary file', async () => { mockAxios.onGet(legacyViewerUrl).replyOnce(HTTP_STATUS_OK, axiosMockResponse); @@ -465,7 +423,6 @@ describe('Blob content viewer component', () => { expect(findBlobHeader().props('hideViewerSwitcher')).toBe(true); expect(findBlobHeader().props('isBinary')).toBe(true); - expect(findWebIdeLink().props('showEditButton')).toBe(false); }); }); @@ -538,12 +495,12 @@ describe('Blob content viewer component', () => { beforeEach(() => createComponent({}, mount)); it('simple edit redirects to the simple editor', () => { - findWebIdeLink().vm.$emit('edit', 'simple'); + findBlobHeader().vm.$emit('edit', 'simple'); expect(urlUtility.redirectTo).toHaveBeenCalledWith(simpleViewerMock.editBlobPath); // eslint-disable-line import/no-deprecated }); it('IDE edit redirects to the IDE editor', () => { - findWebIdeLink().vm.$emit('edit', 'ide'); + findBlobHeader().vm.$emit('edit', 'ide'); expect(urlUtility.redirectTo).toHaveBeenCalledWith(simpleViewerMock.ideEditPath); // eslint-disable-line import/no-deprecated }); @@ -572,7 +529,7 @@ describe('Blob content viewer component', () => { mount, ); - findWebIdeLink().vm.$emit('edit', 'simple'); + findBlobHeader().vm.$emit('edit', 'simple'); await nextTick(); expect(findForkSuggestion().exists()).toBe(showForkSuggestion); |