diff options
Diffstat (limited to 'spec/frontend/releases/stores/modules/detail/mutations_spec.js')
-rw-r--r-- | spec/frontend/releases/stores/modules/detail/mutations_spec.js | 80 |
1 files changed, 72 insertions, 8 deletions
diff --git a/spec/frontend/releases/stores/modules/detail/mutations_spec.js b/spec/frontend/releases/stores/modules/detail/mutations_spec.js index d49c8854ca2..cb5a1880b0c 100644 --- a/spec/frontend/releases/stores/modules/detail/mutations_spec.js +++ b/spec/frontend/releases/stores/modules/detail/mutations_spec.js @@ -8,11 +8,12 @@ import createState from '~/releases/stores/modules/detail/state'; import mutations from '~/releases/stores/modules/detail/mutations'; import * as types from '~/releases/stores/modules/detail/mutation_types'; -import { release } from '../../../mock_data'; +import { release as originalRelease } from '../../../mock_data'; +import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; describe('Release detail mutations', () => { let state; - let releaseClone; + let release; beforeEach(() => { state = createState({ @@ -23,7 +24,7 @@ describe('Release detail mutations', () => { markdownPreviewPath: 'path/to/markdown/preview', updateReleaseApiDocsPath: 'path/to/api/docs', }); - releaseClone = JSON.parse(JSON.stringify(release)); + release = convertObjectPropsToCamelCase(originalRelease); }); describe(types.REQUEST_RELEASE, () => { @@ -36,13 +37,15 @@ describe('Release detail mutations', () => { describe(types.RECEIVE_RELEASE_SUCCESS, () => { it('handles a successful response from the server', () => { - mutations[types.RECEIVE_RELEASE_SUCCESS](state, releaseClone); + mutations[types.RECEIVE_RELEASE_SUCCESS](state, release); expect(state.fetchError).toEqual(undefined); expect(state.isFetchingRelease).toEqual(false); - expect(state.release).toEqual(releaseClone); + expect(state.release).toEqual(release); + + expect(state.originalRelease).toEqual(release); }); }); @@ -61,7 +64,7 @@ describe('Release detail mutations', () => { describe(types.UPDATE_RELEASE_TITLE, () => { it("updates the release's title", () => { - state.release = releaseClone; + state.release = release; const newTitle = 'The new release title'; mutations[types.UPDATE_RELEASE_TITLE](state, newTitle); @@ -71,7 +74,7 @@ describe('Release detail mutations', () => { describe(types.UPDATE_RELEASE_NOTES, () => { it("updates the release's notes", () => { - state.release = releaseClone; + state.release = release; const newNotes = 'The new release notes'; mutations[types.UPDATE_RELEASE_NOTES](state, newNotes); @@ -89,7 +92,7 @@ describe('Release detail mutations', () => { describe(types.RECEIVE_UPDATE_RELEASE_SUCCESS, () => { it('handles a successful response from the server', () => { - mutations[types.RECEIVE_UPDATE_RELEASE_SUCCESS](state, releaseClone); + mutations[types.RECEIVE_UPDATE_RELEASE_SUCCESS](state, release); expect(state.updateError).toEqual(undefined); @@ -107,4 +110,65 @@ describe('Release detail mutations', () => { expect(state.updateError).toEqual(error); }); }); + + describe(types.ADD_EMPTY_ASSET_LINK, () => { + it('adds a new, empty link object to the release', () => { + state.release = release; + + const linksBefore = [...state.release.assets.links]; + + mutations[types.ADD_EMPTY_ASSET_LINK](state); + + expect(state.release.assets.links).toEqual([ + ...linksBefore, + { + id: expect.stringMatching(/^new-link-/), + url: '', + name: '', + }, + ]); + }); + }); + + describe(types.UPDATE_ASSET_LINK_URL, () => { + it('updates an asset link with a new URL', () => { + state.release = release; + + const newUrl = 'https://example.com/updated/url'; + + mutations[types.UPDATE_ASSET_LINK_URL](state, { + linkIdToUpdate: state.release.assets.links[0].id, + newUrl, + }); + + expect(state.release.assets.links[0].url).toEqual(newUrl); + }); + }); + + describe(types.UPDATE_ASSET_LINK_NAME, () => { + it('updates an asset link with a new name', () => { + state.release = release; + + const newName = 'Updated Link'; + + mutations[types.UPDATE_ASSET_LINK_NAME](state, { + linkIdToUpdate: state.release.assets.links[0].id, + newName, + }); + + expect(state.release.assets.links[0].name).toEqual(newName); + }); + }); + + describe(types.REMOVE_ASSET_LINK, () => { + it('removes an asset link from the release', () => { + state.release = release; + + const linkToRemove = state.release.assets.links[0]; + + mutations[types.REMOVE_ASSET_LINK](state, linkToRemove.id); + + expect(state.release.assets.links).not.toContainEqual(linkToRemove); + }); + }); }); |