diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-08 15:11:30 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-08 15:11:30 +0300 |
commit | 012f9a4b9ec4a78d9593d882b38f95e376c2cfe2 (patch) | |
tree | 07f1df76cb12d94744e8069eec540d36092bbaba /spec/frontend | |
parent | 3c050fb24b757425987a7df4cb3497e1d792be8e (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
8 files changed, 427 insertions, 92 deletions
diff --git a/spec/frontend/blob/components/blob_header_viewer_switcher_spec.js b/spec/frontend/blob/components/blob_header_viewer_switcher_spec.js index 1eac0733646..2ef87f6664b 100644 --- a/spec/frontend/blob/components/blob_header_viewer_switcher_spec.js +++ b/spec/frontend/blob/components/blob_header_viewer_switcher_spec.js @@ -18,14 +18,14 @@ describe('Blob Header Viewer Switcher', () => { }); } - afterEach(() => { - wrapper.destroy(); - }); + const findSimpleViewerButton = () => wrapper.findComponent('[data-viewer="simple"]'); + const findRichViewerButton = () => wrapper.findComponent('[data-viewer="rich"]'); describe('intiialization', () => { it('is initialized with simple viewer as active', () => { createComponent(); - expect(wrapper.vm.value).toBe(SIMPLE_BLOB_VIEWER); + expect(findSimpleViewerButton().props('selected')).toBe(true); + expect(findRichViewerButton().props('selected')).toBe(false); }); }); @@ -52,45 +52,34 @@ describe('Blob Header Viewer Switcher', () => { }); describe('viewer changes', () => { - let buttons; - let simpleBtn; - let richBtn; + it('does not switch the viewer if the selected one is already active', async () => { + createComponent(); + expect(findSimpleViewerButton().props('selected')).toBe(true); - function factory(propsData = {}) { - createComponent(propsData); - buttons = wrapper.findAllComponents(GlButton); - simpleBtn = buttons.at(0); - richBtn = buttons.at(1); - - jest.spyOn(wrapper.vm, '$emit'); - } - - it('does not switch the viewer if the selected one is already active', () => { - factory(); - expect(wrapper.vm.value).toBe(SIMPLE_BLOB_VIEWER); - simpleBtn.vm.$emit('click'); - expect(wrapper.vm.value).toBe(SIMPLE_BLOB_VIEWER); - expect(wrapper.vm.$emit).not.toHaveBeenCalled(); + findSimpleViewerButton().vm.$emit('click'); + await nextTick(); + + expect(findSimpleViewerButton().props('selected')).toBe(true); + expect(wrapper.emitted('input')).toBe(undefined); }); it('emits an event when a Rich Viewer button is clicked', async () => { - factory(); - expect(wrapper.vm.value).toBe(SIMPLE_BLOB_VIEWER); - - richBtn.vm.$emit('click'); + createComponent(); + expect(findSimpleViewerButton().props('selected')).toBe(true); + findRichViewerButton().vm.$emit('click'); await nextTick(); - expect(wrapper.vm.$emit).toHaveBeenCalledWith('input', RICH_BLOB_VIEWER); + + expect(wrapper.emitted('input')).toEqual([[RICH_BLOB_VIEWER]]); }); it('emits an event when a Simple Viewer button is clicked', async () => { - factory({ - value: RICH_BLOB_VIEWER, - }); - simpleBtn.vm.$emit('click'); + createComponent({ value: RICH_BLOB_VIEWER }); + findSimpleViewerButton().vm.$emit('click'); await nextTick(); - expect(wrapper.vm.$emit).toHaveBeenCalledWith('input', SIMPLE_BLOB_VIEWER); + + expect(wrapper.emitted('input')).toEqual([[SIMPLE_BLOB_VIEWER]]); }); }); }); diff --git a/spec/frontend/ci/runner/admin_register_runner/admin_register_runner_app_spec.js b/spec/frontend/ci/runner/admin_register_runner/admin_register_runner_app_spec.js index 42ca28eebc7..1ba3d9c317f 100644 --- a/spec/frontend/ci/runner/admin_register_runner/admin_register_runner_app_spec.js +++ b/spec/frontend/ci/runner/admin_register_runner/admin_register_runner_app_spec.js @@ -1,4 +1,4 @@ -import Vue from 'vue'; +import Vue, { nextTick } from 'vue'; import VueApollo from 'vue-apollo'; import { GlButton } from '@gitlab/ui'; @@ -7,12 +7,15 @@ import createMockApollo from 'helpers/mock_apollo_helper'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import waitForPromises from 'helpers/wait_for_promises'; import setWindowLocation from 'helpers/set_window_location_helper'; +import { TEST_HOST } from 'helpers/test_constants'; import { s__ } from '~/locale'; +import { updateHistory } from '~/lib/utils/url_utility'; import runnerForRegistrationQuery from '~/ci/runner/graphql/register/runner_for_registration.query.graphql'; import { PARAM_KEY_PLATFORM, DEFAULT_PLATFORM, WINDOWS_PLATFORM } from '~/ci/runner/constants'; import AdminRegisterRunnerApp from '~/ci/runner/admin_register_runner/admin_register_runner_app.vue'; import RegistrationInstructions from '~/ci/runner/components/registration/registration_instructions.vue'; +import PlatformsDrawer from '~/ci/runner/components/registration/platforms_drawer.vue'; import { runnerForRegistration } from '../mock_data'; const mockRunner = runnerForRegistration.data.runner; @@ -22,11 +25,17 @@ const MOCK_TOKEN = 'MOCK_TOKEN'; Vue.use(VueApollo); +jest.mock('~/lib/utils/url_utility', () => ({ + ...jest.requireActual('~/lib/utils/url_utility'), + updateHistory: jest.fn(), +})); + describe('AdminRegisterRunnerApp', () => { let wrapper; let mockRunnerQuery; const findRegistrationInstructions = () => wrapper.findComponent(RegistrationInstructions); + const findPlatformsDrawer = () => wrapper.findComponent(PlatformsDrawer); const findBtn = () => wrapper.findComponent(GlButton); const createComponent = () => { @@ -69,6 +78,13 @@ describe('AdminRegisterRunnerApp', () => { }); }); + it('configures platform drawer', () => { + expect(findPlatformsDrawer().props()).toEqual({ + open: false, + platform: DEFAULT_PLATFORM, + }); + }); + it('shows runner list button', () => { expect(findBtn().attributes('href')).toEqual(mockRunnersPath); expect(findBtn().props('variant')).toEqual('confirm'); @@ -88,6 +104,52 @@ describe('AdminRegisterRunnerApp', () => { }); }); + describe('When opening install instructions', () => { + beforeEach(async () => { + createComponent(); + await waitForPromises(); + + findRegistrationInstructions().vm.$emit('toggleDrawer'); + await nextTick(); + }); + + it('opens platform drawer', () => { + expect(findPlatformsDrawer().props('open')).toEqual(true); + }); + + it('closes platform drawer', async () => { + findRegistrationInstructions().vm.$emit('toggleDrawer'); + await nextTick(); + + expect(findPlatformsDrawer().props('open')).toEqual(false); + }); + + it('closes platform drawer from drawer', async () => { + findPlatformsDrawer().vm.$emit('close'); + await nextTick(); + + expect(findPlatformsDrawer().props('open')).toEqual(false); + }); + + describe('when selecting a platform', () => { + beforeEach(async () => { + findPlatformsDrawer().vm.$emit('selectPlatform', WINDOWS_PLATFORM); + await nextTick(); + }); + + it('updates the url', () => { + expect(updateHistory).toHaveBeenCalledTimes(1); + expect(updateHistory).toHaveBeenCalledWith({ + url: `${TEST_HOST}/?${PARAM_KEY_PLATFORM}=${WINDOWS_PLATFORM}`, + }); + }); + + it('updates the registration instructions', () => { + expect(findRegistrationInstructions().props('platform')).toBe(WINDOWS_PLATFORM); + }); + }); + }); + describe('When runner is loading', () => { beforeEach(async () => { createComponent(); diff --git a/spec/frontend/ci/runner/components/registration/__snapshots__/utils_spec.js.snap b/spec/frontend/ci/runner/components/registration/__snapshots__/utils_spec.js.snap index c1cc6aa07a2..94b87d31ed0 100644 --- a/spec/frontend/ci/runner/components/registration/__snapshots__/utils_spec.js.snap +++ b/spec/frontend/ci/runner/components/registration/__snapshots__/utils_spec.js.snap @@ -1,10 +1,77 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`registration utils for "linux" platform commandPrompt matches snapshot 1`] = `"$"`; +exports[`registration utils for "linux" platform commandPrompt is correct 1`] = `"$"`; -exports[`registration utils for "linux" platform commandPrompt matches snapshot 2`] = `"$"`; +exports[`registration utils for "linux" platform installScript is correct for "386" architecture 1`] = ` +"# Download the binary for your system +sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386 -exports[`registration utils for "linux" platform registerCommand matches snapshot 1`] = ` +# Give it permission to execute +sudo chmod +x /usr/local/bin/gitlab-runner + +# Create a GitLab Runner user +sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash + +# Install and run as a service +sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner +sudo gitlab-runner start" +`; + +exports[`registration utils for "linux" platform installScript is correct for "amd64" architecture 1`] = ` +"# Download the binary for your system +sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 + +# Give it permission to execute +sudo chmod +x /usr/local/bin/gitlab-runner + +# Create a GitLab Runner user +sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash + +# Install and run as a service +sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner +sudo gitlab-runner start" +`; + +exports[`registration utils for "linux" platform installScript is correct for "arm" architecture 1`] = ` +"# Download the binary for your system +sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm + +# Give it permission to execute +sudo chmod +x /usr/local/bin/gitlab-runner + +# Create a GitLab Runner user +sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash + +# Install and run as a service +sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner +sudo gitlab-runner start" +`; + +exports[`registration utils for "linux" platform installScript is correct for "arm64" architecture 1`] = ` +"# Download the binary for your system +sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64 + +# Give it permission to execute +sudo chmod +x /usr/local/bin/gitlab-runner + +# Create a GitLab Runner user +sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash + +# Install and run as a service +sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner +sudo gitlab-runner start" +`; + +exports[`registration utils for "linux" platform platformArchitectures returns correct list of architectures 1`] = ` +Array [ + "amd64", + "386", + "arm", + "arm64", +] +`; + +exports[`registration utils for "linux" platform registerCommand is correct 1`] = ` Array [ "gitlab-runner register", " --url http://test.host", @@ -12,21 +79,53 @@ Array [ ] `; -exports[`registration utils for "linux" platform registerCommand matches snapshot 2`] = ` +exports[`registration utils for "linux" platform registerCommand is correct 2`] = ` Array [ "gitlab-runner register", " --url http://test.host", - " --registration-token REGISTRATION_TOKEN", ] `; -exports[`registration utils for "linux" platform runCommand matches snapshot 1`] = `"gitlab-runner run"`; +exports[`registration utils for "linux" platform runCommand is correct 1`] = `"gitlab-runner run"`; + +exports[`registration utils for "osx" platform commandPrompt is correct 1`] = `"$"`; + +exports[`registration utils for "osx" platform installScript is correct for "amd64" architecture 1`] = ` +"# Download the binary for your system +sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64 + +# Give it permission to execute +sudo chmod +x /usr/local/bin/gitlab-runner + +# The rest of the commands execute as the user who will run the runner +# Register the runner (steps below), then run +cd ~ +gitlab-runner install +gitlab-runner start" +`; + +exports[`registration utils for "osx" platform installScript is correct for "arm64" architecture 1`] = ` +"# Download the binary for your system +sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64 + +# Give it permission to execute +sudo chmod +x /usr/local/bin/gitlab-runner -exports[`registration utils for "linux" platform runCommand matches snapshot 2`] = `"gitlab-runner run"`; +# The rest of the commands execute as the user who will run the runner +# Register the runner (steps below), then run +cd ~ +gitlab-runner install +gitlab-runner start" +`; -exports[`registration utils for "null" platform commandPrompt matches snapshot 1`] = `"$"`; +exports[`registration utils for "osx" platform platformArchitectures returns correct list of architectures 1`] = ` +Array [ + "amd64", + "arm64", +] +`; -exports[`registration utils for "null" platform registerCommand matches snapshot 1`] = ` +exports[`registration utils for "osx" platform registerCommand is correct 1`] = ` Array [ "gitlab-runner register", " --url http://test.host", @@ -34,23 +133,57 @@ Array [ ] `; -exports[`registration utils for "null" platform runCommand matches snapshot 1`] = `"gitlab-runner run"`; - -exports[`registration utils for "osx" platform commandPrompt matches snapshot 1`] = `"$"`; - -exports[`registration utils for "osx" platform registerCommand matches snapshot 1`] = ` +exports[`registration utils for "osx" platform registerCommand is correct 2`] = ` Array [ "gitlab-runner register", " --url http://test.host", - " --registration-token REGISTRATION_TOKEN", ] `; -exports[`registration utils for "osx" platform runCommand matches snapshot 1`] = `"gitlab-runner run"`; +exports[`registration utils for "osx" platform runCommand is correct 1`] = `"gitlab-runner run"`; + +exports[`registration utils for "windows" platform commandPrompt is correct 1`] = `">"`; + +exports[`registration utils for "windows" platform installScript is correct for "386" architecture 1`] = ` +"# Run PowerShell: https://docs.microsoft.com/en-us/powershell/scripting/windows-powershell/starting-windows-powershell?view=powershell-7#with-administrative-privileges-run-as-administrator +# Create a folder somewhere on your system, for example: C:\\\\GitLab-Runner +New-Item -Path 'C:\\\\GitLab-Runner' -ItemType Directory + +# Change to the folder +cd 'C:\\\\GitLab-Runner' + +# Download binary +Invoke-WebRequest -Uri \\"https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-386.exe\\" -OutFile \\"gitlab-runner.exe\\" + +# Register the runner (steps below), then run +.\\\\gitlab-runner.exe install +.\\\\gitlab-runner.exe start" +`; -exports[`registration utils for "windows" platform commandPrompt matches snapshot 1`] = `">"`; +exports[`registration utils for "windows" platform installScript is correct for "amd64" architecture 1`] = ` +"# Run PowerShell: https://docs.microsoft.com/en-us/powershell/scripting/windows-powershell/starting-windows-powershell?view=powershell-7#with-administrative-privileges-run-as-administrator +# Create a folder somewhere on your system, for example: C:\\\\GitLab-Runner +New-Item -Path 'C:\\\\GitLab-Runner' -ItemType Directory -exports[`registration utils for "windows" platform registerCommand matches snapshot 1`] = ` +# Change to the folder +cd 'C:\\\\GitLab-Runner' + +# Download binary +Invoke-WebRequest -Uri \\"https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe\\" -OutFile \\"gitlab-runner.exe\\" + +# Register the runner (steps below), then run +.\\\\gitlab-runner.exe install +.\\\\gitlab-runner.exe start" +`; + +exports[`registration utils for "windows" platform platformArchitectures returns correct list of architectures 1`] = ` +Array [ + "amd64", + "386", +] +`; + +exports[`registration utils for "windows" platform registerCommand is correct 1`] = ` Array [ ".\\\\gitlab-runner.exe register", " --url http://test.host", @@ -58,4 +191,11 @@ Array [ ] `; -exports[`registration utils for "windows" platform runCommand matches snapshot 1`] = `".\\\\gitlab-runner.exe run"`; +exports[`registration utils for "windows" platform registerCommand is correct 2`] = ` +Array [ + ".\\\\gitlab-runner.exe register", + " --url http://test.host", +] +`; + +exports[`registration utils for "windows" platform runCommand is correct 1`] = `".\\\\gitlab-runner.exe run"`; diff --git a/spec/frontend/ci/runner/components/registration/platforms_drawer_spec.js b/spec/frontend/ci/runner/components/registration/platforms_drawer_spec.js new file mode 100644 index 00000000000..c1879efd45a --- /dev/null +++ b/spec/frontend/ci/runner/components/registration/platforms_drawer_spec.js @@ -0,0 +1,92 @@ +import { nextTick } from 'vue'; +import { GlDrawer } from '@gitlab/ui'; +import { s__ } from '~/locale'; +import { shallowMountExtended, mountExtended } from 'helpers/vue_test_utils_helper'; + +import PlatformsDrawer from '~/ci/runner/components/registration/platforms_drawer.vue'; +import CliCommand from '~/ci/runner/components/registration/cli_command.vue'; +import { LINUX_PLATFORM, MACOS_PLATFORM, WINDOWS_PLATFORM } from '~/ci/runner/constants'; +import { installScript, platformArchitectures } from '~/ci/runner/components/registration/utils'; + +const MOCK_WRAPPER_HEIGHT = '99px'; +const LINUX_ARCHS = platformArchitectures({ platform: LINUX_PLATFORM }); +const MACOS_ARCHS = platformArchitectures({ platform: MACOS_PLATFORM }); + +jest.mock('~/lib/utils/dom_utils', () => ({ + getContentWrapperHeight: () => MOCK_WRAPPER_HEIGHT, +})); + +describe('RegistrationInstructions', () => { + let wrapper; + + const findDrawer = () => wrapper.findComponent(GlDrawer); + const findEnvironmentOptions = () => + wrapper.findByLabelText(s__('Runners|Environment')).findAll('option'); + const findArchitectureOptions = () => + wrapper.findByLabelText(s__('Runners|Architecture')).findAll('option'); + const findCliCommand = () => wrapper.findComponent(CliCommand); + + const createComponent = ({ props = {}, mountFn = shallowMountExtended } = {}) => { + wrapper = mountFn(PlatformsDrawer, { + propsData: { + open: true, + ...props, + }, + }); + }; + + it('shows drawer', () => { + createComponent(); + + expect(findDrawer().props()).toMatchObject({ + open: true, + headerHeight: MOCK_WRAPPER_HEIGHT, + }); + }); + + it('closes drawer', () => { + createComponent(); + findDrawer().vm.$emit('close'); + + expect(wrapper.emitted('close')).toHaveLength(1); + }); + + it('shows selection options', () => { + createComponent({ mountFn: mountExtended }); + + expect(findEnvironmentOptions().wrappers.map((w) => w.attributes('value'))).toEqual([ + LINUX_PLATFORM, + MACOS_PLATFORM, + WINDOWS_PLATFORM, + ]); + + expect(findArchitectureOptions().wrappers.map((w) => w.attributes('value'))).toEqual( + LINUX_ARCHS, + ); + }); + + it('shows script', () => { + createComponent(); + + expect(findCliCommand().props('command')).toBe( + installScript({ platform: LINUX_PLATFORM, architecture: LINUX_ARCHS[0] }), + ); + }); + + it('shows selection options for another platform', async () => { + createComponent({ mountFn: mountExtended }); + + findEnvironmentOptions().at(1).setSelected(); // macos + await nextTick(); + + expect(wrapper.emitted('selectPlatform')).toEqual([[MACOS_PLATFORM]]); + + expect(findArchitectureOptions().wrappers.map((w) => w.attributes('value'))).toEqual( + MACOS_ARCHS, + ); + + expect(findCliCommand().props('command')).toBe( + installScript({ platform: MACOS_PLATFORM, architecture: MACOS_ARCHS[0] }), + ); + }); +}); diff --git a/spec/frontend/ci/runner/components/registration/registration_instructions_spec.js b/spec/frontend/ci/runner/components/registration/registration_instructions_spec.js index 858b0732782..f81f96ceffb 100644 --- a/spec/frontend/ci/runner/components/registration/registration_instructions_spec.js +++ b/spec/frontend/ci/runner/components/registration/registration_instructions_spec.js @@ -1,11 +1,15 @@ -import { GlSprintf, GlLink, GlSkeletonLoader } from '@gitlab/ui'; +import { GlSprintf, GlSkeletonLoader } from '@gitlab/ui'; import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; -import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import { extendedWrapper, shallowMountExtended } from 'helpers/vue_test_utils_helper'; import { TEST_HOST } from 'helpers/test_constants'; import RegistrationInstructions from '~/ci/runner/components/registration/registration_instructions.vue'; import CliCommand from '~/ci/runner/components/registration/cli_command.vue'; -import { DEFAULT_PLATFORM, INSTALL_HELP_URL, EXECUTORS_HELP_URL } from '~/ci/runner/constants'; +import { + DEFAULT_PLATFORM, + EXECUTORS_HELP_URL, + SERVICE_COMMANDS_HELP_URL, +} from '~/ci/runner/constants'; const REGISTRATION_TOKEN = 'REGISTRATION_TOKEN'; const DUMMY_GON = { @@ -16,9 +20,8 @@ describe('RegistrationInstructions', () => { let wrapper; let originalGon; - const findStepAt = (i) => wrapper.findAll('section').at(i); - const findLink = (href, container = wrapper) => - container.findAllComponents(GlLink).filter((w) => w.attributes('href') === href); + const findStepAt = (i) => extendedWrapper(wrapper.findAll('section').at(i)); + const findByText = (text, container = wrapper) => container.findByText(text); const createComponent = (props) => { wrapper = shallowMountExtended(RegistrationInstructions, { @@ -47,7 +50,9 @@ describe('RegistrationInstructions', () => { }); it('renders legacy instructions', () => { - expect(findLink(INSTALL_HELP_URL).exists()).toBe(true); + findByText('How do I install GitLab Runner?').vm.$emit('click'); + + expect(wrapper.emitted('toggleDrawer')).toHaveLength(1); }); it('renders step 1', () => { @@ -80,7 +85,9 @@ describe('RegistrationInstructions', () => { it('renders step 2', () => { const step2 = findStepAt(1); - expect(findLink(EXECUTORS_HELP_URL, step2).exists()).toBe(true); + expect(findByText('Not sure which one to select?', step2).attributes('href')).toBe( + EXECUTORS_HELP_URL, + ); }); it('renders step 3', () => { @@ -90,5 +97,9 @@ describe('RegistrationInstructions', () => { command: 'gitlab-runner run', prompt: '$', }); + + expect(findByText('system or user service', step3).attributes('href')).toBe( + SERVICE_COMMANDS_HELP_URL, + ); }); }); diff --git a/spec/frontend/ci/runner/components/registration/utils_spec.js b/spec/frontend/ci/runner/components/registration/utils_spec.js index aeb489ca7de..6c4bf65eaa6 100644 --- a/spec/frontend/ci/runner/components/registration/utils_spec.js +++ b/spec/frontend/ci/runner/components/registration/utils_spec.js @@ -10,6 +10,8 @@ import { commandPrompt, registerCommand, runCommand, + installScript, + platformArchitectures, } from '~/ci/runner/components/registration/utils'; const REGISTRATION_TOKEN = 'REGISTRATION_TOKEN'; @@ -29,24 +31,69 @@ describe('registration utils', () => { window.gon = originalGon; }); - describe.each([DEFAULT_PLATFORM, LINUX_PLATFORM, MACOS_PLATFORM, WINDOWS_PLATFORM, null])( + describe.each([LINUX_PLATFORM, MACOS_PLATFORM, WINDOWS_PLATFORM])( 'for "%s" platform', (platform) => { - describe('commandPrompt', () => { - it('matches snapshot', () => { - expect(commandPrompt({ platform })).toMatchSnapshot(); - }); + it('commandPrompt is correct', () => { + expect(commandPrompt({ platform })).toMatchSnapshot(); + }); + it('registerCommand is correct', () => { + expect( + registerCommand({ platform, registrationToken: REGISTRATION_TOKEN }), + ).toMatchSnapshot(); + + expect(registerCommand({ platform })).toMatchSnapshot(); + }); + it('runCommand is correct', () => { + expect(runCommand({ platform })).toMatchSnapshot(); + }); + }, + ); + + describe('for missing platform', () => { + it('commandPrompt uses the default', () => { + const expected = commandPrompt({ platform: DEFAULT_PLATFORM }); + + expect(commandPrompt({ platform: null })).toEqual(expected); + expect(commandPrompt({ platform: undefined })).toEqual(expected); + }); + + it('registerCommand uses the default', () => { + const expected = registerCommand({ + platform: DEFAULT_PLATFORM, + registrationToken: REGISTRATION_TOKEN, }); - describe('registerCommand', () => { - it('matches snapshot', () => { - expect( - registerCommand({ platform, registrationToken: REGISTRATION_TOKEN }), - ).toMatchSnapshot(); + + expect(registerCommand({ platform: null, registrationToken: REGISTRATION_TOKEN })).toEqual( + expected, + ); + expect( + registerCommand({ platform: undefined, registrationToken: REGISTRATION_TOKEN }), + ).toEqual(expected); + }); + + it('runCommand uses the default', () => { + const expected = runCommand({ platform: DEFAULT_PLATFORM }); + + expect(runCommand({ platform: null })).toEqual(expected); + expect(runCommand({ platform: undefined })).toEqual(expected); + }); + }); + + describe.each([LINUX_PLATFORM, MACOS_PLATFORM, WINDOWS_PLATFORM])( + 'for "%s" platform', + (platform) => { + describe('platformArchitectures', () => { + it('returns correct list of architectures', () => { + expect(platformArchitectures({ platform })).toMatchSnapshot(); }); }); - describe('runCommand', () => { - it('matches snapshot', () => { - expect(runCommand({ platform })).toMatchSnapshot(); + + describe('installScript', () => { + const architectures = platformArchitectures({ platform }); + + it.each(architectures)('is correct for "%s" architecture', (architecture) => { + expect(installScript({ platform, architecture })).toMatchSnapshot(); }); }); }, diff --git a/spec/frontend/monitoring/components/variables/text_field_spec.js b/spec/frontend/monitoring/components/variables/text_field_spec.js index 3073b3968aa..20e1937c5ac 100644 --- a/spec/frontend/monitoring/components/variables/text_field_spec.js +++ b/spec/frontend/monitoring/components/variables/text_field_spec.js @@ -33,25 +33,23 @@ describe('Text variable component', () => { it('triggers keyup enter', async () => { createShallowWrapper(); - jest.spyOn(wrapper.vm, '$emit'); findInput().element.value = 'prod-pod'; findInput().trigger('input'); findInput().trigger('keyup.enter'); await nextTick(); - expect(wrapper.vm.$emit).toHaveBeenCalledWith('input', 'prod-pod'); + expect(wrapper.emitted('input')).toEqual([['prod-pod']]); }); it('triggers blur enter', async () => { createShallowWrapper(); - jest.spyOn(wrapper.vm, '$emit'); findInput().element.value = 'canary-pod'; findInput().trigger('input'); findInput().trigger('blur'); await nextTick(); - expect(wrapper.vm.$emit).toHaveBeenCalledWith('input', 'canary-pod'); + expect(wrapper.emitted('input')).toEqual([['canary-pod']]); }); }); diff --git a/spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js b/spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js index 619d0cb5dd3..39316dfa249 100644 --- a/spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js +++ b/spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js @@ -29,28 +29,28 @@ const createComponent = (propsData = issuableTitleProps) => describe('IssuableTitle', () => { let wrapper; + const findStickyHeader = () => wrapper.findComponent('[data-testid="header"]'); + beforeEach(() => { wrapper = createComponent(); }); - afterEach(() => { - wrapper.destroy(); - }); - describe('methods', () => { describe('handleTitleAppear', () => { - it('sets value of `stickyTitleVisible` prop to false', () => { + it('sets value of `stickyTitleVisible` prop to false', async () => { wrapper.findComponent(GlIntersectionObserver).vm.$emit('appear'); + await nextTick(); - expect(wrapper.vm.stickyTitleVisible).toBe(false); + expect(findStickyHeader().exists()).toBe(false); }); }); describe('handleTitleDisappear', () => { - it('sets value of `stickyTitleVisible` prop to true', () => { + it('sets value of `stickyTitleVisible` prop to true', async () => { wrapper.findComponent(GlIntersectionObserver).vm.$emit('disappear'); + await nextTick(); - expect(wrapper.vm.stickyTitleVisible).toBe(true); + expect(findStickyHeader().exists()).toBe(true); }); }); }); @@ -87,14 +87,10 @@ describe('IssuableTitle', () => { }); it('renders sticky header when `stickyTitleVisible` prop is true', async () => { - // setData usage is discouraged. See https://gitlab.com/groups/gitlab-org/-/epics/7330 for details - // eslint-disable-next-line no-restricted-syntax - wrapper.setData({ - stickyTitleVisible: true, - }); - + wrapper.findComponent(GlIntersectionObserver).vm.$emit('disappear'); await nextTick(); - const stickyHeaderEl = wrapper.find('[data-testid="header"]'); + + const stickyHeaderEl = findStickyHeader(); expect(stickyHeaderEl.exists()).toBe(true); expect(stickyHeaderEl.findComponent(GlBadge).props('variant')).toBe('success'); |