diff options
Diffstat (limited to 'spec/frontend/environments/confirm_rollback_modal_spec.js')
-rw-r--r-- | spec/frontend/environments/confirm_rollback_modal_spec.js | 138 |
1 files changed, 86 insertions, 52 deletions
diff --git a/spec/frontend/environments/confirm_rollback_modal_spec.js b/spec/frontend/environments/confirm_rollback_modal_spec.js index 8fb53579f96..d62aaec4f69 100644 --- a/spec/frontend/environments/confirm_rollback_modal_spec.js +++ b/spec/frontend/environments/confirm_rollback_modal_spec.js @@ -1,70 +1,104 @@ -import { GlModal } from '@gitlab/ui'; +import { GlModal, GlSprintf } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; import ConfirmRollbackModal from '~/environments/components/confirm_rollback_modal.vue'; import eventHub from '~/environments/event_hub'; describe('Confirm Rollback Modal Component', () => { let environment; + let component; - beforeEach(() => { - environment = { - name: 'test', - last_deployment: { - commit: { - short_id: 'abc0123', - }, + const envWithLastDeployment = { + name: 'test', + last_deployment: { + commit: { + short_id: 'abc0123', }, - modalId: 'test', - }; - }); + }, + modalId: 'test', + }; - it('should show "Rollback" when isLastDeployment is false', () => { - const component = shallowMount(ConfirmRollbackModal, { - propsData: { - environment: { - ...environment, - isLastDeployment: false, - }, - }, - }); - const modal = component.find(GlModal); + const envWithoutLastDeployment = { + name: 'test', + modalId: 'test', + commitShortSha: 'abc0123', + commitUrl: 'test/-/commit/abc0123', + }; - expect(modal.attributes('title')).toContain('Rollback'); - expect(modal.attributes('title')).toContain('test'); - expect(modal.attributes('ok-title')).toBe('Rollback'); - expect(modal.text()).toContain('commit abc0123'); - expect(modal.text()).toContain('Are you sure you want to continue?'); - }); + const retryPath = 'test/-/jobs/123/retry'; - it('should show "Re-deploy" when isLastDeployment is true', () => { - const component = shallowMount(ConfirmRollbackModal, { + const createComponent = (props = {}) => { + component = shallowMount(ConfirmRollbackModal, { propsData: { - environment: { - ...environment, - isLastDeployment: true, - }, + ...props, + }, + stubs: { + GlSprintf, }, }); - const modal = component.find(GlModal); + }; - expect(modal.attributes('title')).toContain('Re-deploy'); - expect(modal.attributes('title')).toContain('test'); - expect(modal.attributes('ok-title')).toBe('Re-deploy'); - expect(modal.text()).toContain('commit abc0123'); - expect(modal.text()).toContain('Are you sure you want to continue?'); - }); + describe.each` + hasMultipleCommits | environmentData | retryUrl | primaryPropsAttrs + ${true} | ${envWithLastDeployment} | ${null} | ${[{ variant: 'danger' }]} + ${false} | ${envWithoutLastDeployment} | ${retryPath} | ${[{ variant: 'danger' }, { 'data-method': 'post' }, { href: retryPath }]} + `( + 'when hasMultipleCommits=$hasMultipleCommits', + ({ hasMultipleCommits, environmentData, retryUrl, primaryPropsAttrs }) => { + beforeEach(() => { + environment = environmentData; + }); - it('should emit the "rollback" event when "ok" is clicked', () => { - environment = { ...environment, isLastDeployment: true }; - const component = shallowMount(ConfirmRollbackModal, { - propsData: { - environment, - }, - }); - const eventHubSpy = jest.spyOn(eventHub, '$emit'); - const modal = component.find(GlModal); - modal.vm.$emit('ok'); + it('should show "Rollback" when isLastDeployment is false', () => { + createComponent({ + environment: { + ...environment, + isLastDeployment: false, + }, + hasMultipleCommits, + retryUrl, + }); + const modal = component.find(GlModal); + + expect(modal.attributes('title')).toContain('Rollback'); + expect(modal.attributes('title')).toContain('test'); + expect(modal.props('actionPrimary').text).toBe('Rollback'); + expect(modal.props('actionPrimary').attributes).toEqual(primaryPropsAttrs); + expect(modal.text()).toContain('commit abc0123'); + expect(modal.text()).toContain('Are you sure you want to continue?'); + }); + + it('should show "Re-deploy" when isLastDeployment is true', () => { + createComponent({ + environment: { + ...environment, + isLastDeployment: true, + }, + hasMultipleCommits, + }); + + const modal = component.find(GlModal); + + expect(modal.attributes('title')).toContain('Re-deploy'); + expect(modal.attributes('title')).toContain('test'); + expect(modal.props('actionPrimary').text).toBe('Re-deploy'); + expect(modal.text()).toContain('commit abc0123'); + expect(modal.text()).toContain('Are you sure you want to continue?'); + }); + + it('should emit the "rollback" event when "ok" is clicked', () => { + const env = { ...environmentData, isLastDeployment: true }; + + createComponent({ + environment: env, + hasMultipleCommits, + }); + + const eventHubSpy = jest.spyOn(eventHub, '$emit'); + const modal = component.find(GlModal); + modal.vm.$emit('ok'); - expect(eventHubSpy).toHaveBeenCalledWith('rollbackEnvironment', environment); - }); + expect(eventHubSpy).toHaveBeenCalledWith('rollbackEnvironment', env); + }); + }, + ); }); |