diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-20 16:37:47 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-20 16:37:47 +0300 |
commit | aee0a117a889461ce8ced6fcf73207fe017f1d99 (patch) | |
tree | 891d9ef189227a8445d83f35c1b0fc99573f4380 /spec/frontend/ide/stores | |
parent | 8d46af3258650d305f53b819eabf7ab18d22f59e (diff) |
Add latest changes from gitlab-org/gitlab@14-6-stable-eev14.6.0-rc42
Diffstat (limited to 'spec/frontend/ide/stores')
-rw-r--r-- | spec/frontend/ide/stores/actions/project_spec.js | 93 | ||||
-rw-r--r-- | spec/frontend/ide/stores/mutations/project_spec.js | 37 |
2 files changed, 125 insertions, 5 deletions
diff --git a/spec/frontend/ide/stores/actions/project_spec.js b/spec/frontend/ide/stores/actions/project_spec.js index ca6f7169059..e07dcf22860 100644 --- a/spec/frontend/ide/stores/actions/project_spec.js +++ b/spec/frontend/ide/stores/actions/project_spec.js @@ -2,9 +2,12 @@ import MockAdapter from 'axios-mock-adapter'; import { useMockLocationHelper } from 'helpers/mock_window_location_helper'; import testAction from 'helpers/vuex_action_helper'; import api from '~/api'; +import createFlash from '~/flash'; import service from '~/ide/services'; import { createStore } from '~/ide/stores'; import { + setProject, + fetchProjectPermissions, refreshLastCommitData, showBranchNotFoundError, createNewBranchFromDefault, @@ -13,8 +16,12 @@ import { loadFile, loadBranch, } from '~/ide/stores/actions'; +import { logError } from '~/lib/logger'; import axios from '~/lib/utils/axios_utils'; +jest.mock('~/flash'); +jest.mock('~/lib/logger'); + const TEST_PROJECT_ID = 'abc/def'; describe('IDE store project actions', () => { @@ -34,6 +41,92 @@ describe('IDE store project actions', () => { mock.restore(); }); + describe('setProject', () => { + const project = { id: 'foo', path_with_namespace: TEST_PROJECT_ID }; + const baseMutations = [ + { + type: 'SET_PROJECT', + payload: { + projectPath: TEST_PROJECT_ID, + project, + }, + }, + { + type: 'SET_CURRENT_PROJECT', + payload: TEST_PROJECT_ID, + }, + ]; + + it.each` + desc | payload | expectedMutations + ${'does not commit any action if project is not passed'} | ${undefined} | ${[]} + ${'commits correct actions in the correct order by default'} | ${{ project }} | ${[...baseMutations]} + `('$desc', async ({ payload, expectedMutations } = {}) => { + await testAction({ + action: setProject, + payload, + state: store.state, + expectedMutations, + expectedActions: [], + }); + }); + }); + + describe('fetchProjectPermissions', () => { + const permissionsData = { + userPermissions: { + bogus: true, + }, + }; + const permissionsMutations = [ + { + type: 'UPDATE_PROJECT', + payload: { + projectPath: TEST_PROJECT_ID, + props: { + ...permissionsData, + }, + }, + }, + ]; + + let spy; + + beforeEach(() => { + spy = jest.spyOn(service, 'getProjectPermissionsData'); + }); + + afterEach(() => { + createFlash.mockRestore(); + }); + + it.each` + desc | projectPath | responseSuccess | expectedMutations + ${'does not fetch permissions if project does not exist'} | ${undefined} | ${true} | ${[]} + ${'fetches permission when project is specified'} | ${TEST_PROJECT_ID} | ${true} | ${[...permissionsMutations]} + ${'flashes an error if the request fails'} | ${TEST_PROJECT_ID} | ${false} | ${[]} + `('$desc', async ({ projectPath, expectedMutations, responseSuccess } = {}) => { + store.state.currentProjectId = projectPath; + if (responseSuccess) { + spy.mockResolvedValue(permissionsData); + } else { + spy.mockRejectedValue(); + } + + await testAction({ + action: fetchProjectPermissions, + state: store.state, + expectedMutations, + expectedActions: [], + }); + + if (!responseSuccess) { + expect(logError).toHaveBeenCalled(); + expect(createFlash).toHaveBeenCalled(); + } + }); + }); + describe('refreshLastCommitData', () => { beforeEach(() => { store.state.currentProjectId = 'abc/def'; diff --git a/spec/frontend/ide/stores/mutations/project_spec.js b/spec/frontend/ide/stores/mutations/project_spec.js index b3ce39c33d2..0fdd7798f00 100644 --- a/spec/frontend/ide/stores/mutations/project_spec.js +++ b/spec/frontend/ide/stores/mutations/project_spec.js @@ -3,21 +3,48 @@ import state from '~/ide/stores/state'; describe('Multi-file store branch mutations', () => { let localState; + const nonExistentProj = 'nonexistent'; + const existingProj = 'abcproject'; beforeEach(() => { localState = state(); - localState.projects = { abcproject: { empty_repo: true } }; + localState.projects = { [existingProj]: { empty_repo: true } }; }); describe('TOGGLE_EMPTY_STATE', () => { it('sets empty_repo for project to passed value', () => { - mutations.TOGGLE_EMPTY_STATE(localState, { projectPath: 'abcproject', value: false }); + mutations.TOGGLE_EMPTY_STATE(localState, { projectPath: existingProj, value: false }); - expect(localState.projects.abcproject.empty_repo).toBe(false); + expect(localState.projects[existingProj].empty_repo).toBe(false); - mutations.TOGGLE_EMPTY_STATE(localState, { projectPath: 'abcproject', value: true }); + mutations.TOGGLE_EMPTY_STATE(localState, { projectPath: existingProj, value: true }); - expect(localState.projects.abcproject.empty_repo).toBe(true); + expect(localState.projects[existingProj].empty_repo).toBe(true); + }); + }); + + describe('UPDATE_PROJECT', () => { + it.each` + desc | projectPath | props | expectedProps + ${'extends existing project with the passed props'} | ${existingProj} | ${{ foo1: 'bar' }} | ${{ foo1: 'bar' }} + ${'overrides existing props on the exsiting project'} | ${existingProj} | ${{ empty_repo: false }} | ${{ empty_repo: false }} + ${'does nothing if the project does not exist'} | ${nonExistentProj} | ${{ foo2: 'bar' }} | ${undefined} + ${'does nothing if project is not passed'} | ${undefined} | ${{ foo3: 'bar' }} | ${undefined} + ${'does nothing if the props are not passed'} | ${existingProj} | ${undefined} | ${{}} + ${'does nothing if the props are empty'} | ${existingProj} | ${{}} | ${{}} + `('$desc', ({ projectPath, props, expectedProps } = {}) => { + const origProject = localState.projects[projectPath]; + + mutations.UPDATE_PROJECT(localState, { projectPath, props }); + + if (!expectedProps) { + expect(localState.projects[projectPath]).toBeUndefined(); + } else { + expect(localState.projects[projectPath]).toEqual({ + ...origProject, + ...expectedProps, + }); + } }); }); }); |