diff options
Diffstat (limited to 'spec/frontend/boards/components/issue_time_estimate_spec.js')
-rw-r--r-- | spec/frontend/boards/components/issue_time_estimate_spec.js | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/spec/frontend/boards/components/issue_time_estimate_spec.js b/spec/frontend/boards/components/issue_time_estimate_spec.js index 162a6df828b..9ac8fae3fcc 100644 --- a/spec/frontend/boards/components/issue_time_estimate_spec.js +++ b/spec/frontend/boards/components/issue_time_estimate_spec.js @@ -1,75 +1,65 @@ +import { config as vueConfig } from 'vue'; import { shallowMount } from '@vue/test-utils'; import IssueTimeEstimate from '~/boards/components/issue_time_estimate.vue'; -import boardsStore from '~/boards/stores/boards_store'; describe('Issue Time Estimate component', () => { let wrapper; - beforeEach(() => { - boardsStore.create(); - }); - afterEach(() => { wrapper.destroy(); }); describe('when limitToHours is false', () => { beforeEach(() => { - boardsStore.timeTracking.limitToHours = false; wrapper = shallowMount(IssueTimeEstimate, { propsData: { estimate: 374460, }, + provide: { + timeTrackingLimitToHours: false, + }, }); }); it('renders the correct time estimate', () => { - expect( - wrapper - .find('time') - .text() - .trim(), - ).toEqual('2w 3d 1m'); + expect(wrapper.find('time').text().trim()).toEqual('2w 3d 1m'); }); it('renders expanded time estimate in tooltip', () => { expect(wrapper.find('.js-issue-time-estimate').text()).toContain('2 weeks 3 days 1 minute'); }); - it('prevents tooltip xss', done => { + it('prevents tooltip xss', async () => { const alertSpy = jest.spyOn(window, 'alert'); - wrapper.setProps({ estimate: 'Foo <script>alert("XSS")</script>' }); - wrapper.vm.$nextTick(() => { - expect(alertSpy).not.toHaveBeenCalled(); - expect( - wrapper - .find('time') - .text() - .trim(), - ).toEqual('0m'); - expect(wrapper.find('.js-issue-time-estimate').text()).toContain('0m'); - done(); - }); + + try { + // This will raise props validating warning by Vue, silencing it + vueConfig.silent = true; + await wrapper.setProps({ estimate: 'Foo <script>alert("XSS")</script>' }); + } finally { + vueConfig.silent = false; + } + + expect(alertSpy).not.toHaveBeenCalled(); + expect(wrapper.find('time').text().trim()).toEqual('0m'); + expect(wrapper.find('.js-issue-time-estimate').text()).toContain('0m'); }); }); describe('when limitToHours is true', () => { beforeEach(() => { - boardsStore.timeTracking.limitToHours = true; wrapper = shallowMount(IssueTimeEstimate, { propsData: { estimate: 374460, }, + provide: { + timeTrackingLimitToHours: true, + }, }); }); it('renders the correct time estimate', () => { - expect( - wrapper - .find('time') - .text() - .trim(), - ).toEqual('104h 1m'); + expect(wrapper.find('time').text().trim()).toEqual('104h 1m'); }); it('renders expanded time estimate in tooltip', () => { |