|
1 | 1 | import Vue from 'vue';
|
2 |
| -import autoMergeFailedComponent from '~/vue_merge_request_widget/components/states/mr_widget_auto_merge_failed'; |
3 |
| - |
4 |
| -const mergeError = 'This is the merge error'; |
| 2 | +import autoMergeFailedComponent from '~/vue_merge_request_widget/components/states/mr_widget_auto_merge_failed.vue'; |
| 3 | +import eventHub from '~/vue_merge_request_widget/event_hub'; |
| 4 | +import mountComponent from '../../../helpers/vue_mount_component_helper'; |
5 | 5 |
|
6 | 6 | describe('MRWidgetAutoMergeFailed', () => {
|
7 |
| - describe('props', () => { |
8 |
| - it('should have props', () => { |
9 |
| - const mrProp = autoMergeFailedComponent.props.mr; |
| 7 | + let vm; |
| 8 | + const mergeError = 'This is the merge error'; |
10 | 9 |
|
11 |
| - expect(mrProp.type instanceof Object).toBeTruthy(); |
12 |
| - expect(mrProp.required).toBeTruthy(); |
| 10 | + beforeEach(() => { |
| 11 | + const Component = Vue.extend(autoMergeFailedComponent); |
| 12 | + vm = mountComponent(Component, { |
| 13 | + mr: { mergeError }, |
13 | 14 | });
|
14 | 15 | });
|
15 | 16 |
|
16 |
| - describe('template', () => { |
17 |
| - const Component = Vue.extend(autoMergeFailedComponent); |
18 |
| - const vm = new Component({ |
19 |
| - el: document.createElement('div'), |
20 |
| - propsData: { |
21 |
| - mr: { mergeError }, |
22 |
| - }, |
23 |
| - }); |
| 17 | + afterEach(() => { |
| 18 | + vm.$destroy(); |
| 19 | + }); |
| 20 | + |
| 21 | + it('renders failed message', () => { |
| 22 | + expect(vm.$el.textContent).toContain('This merge request failed to be merged automatically'); |
| 23 | + }); |
| 24 | + |
| 25 | + it('renders merge error provided', () => { |
| 26 | + expect(vm.$el.innerText).toContain(mergeError); |
| 27 | + }); |
| 28 | + |
| 29 | + it('render refresh button', () => { |
| 30 | + expect(vm.$el.querySelector('button').textContent.trim()).toEqual('Refresh'); |
| 31 | + }); |
| 32 | + |
| 33 | + it('emits event and shows loading icon when button is clicked', (done) => { |
| 34 | + spyOn(eventHub, '$emit'); |
| 35 | + vm.$el.querySelector('button').click(); |
| 36 | + |
| 37 | + expect(eventHub.$emit.calls.argsFor(0)[0]).toEqual('MRWidgetUpdateRequested'); |
24 | 38 |
|
25 |
| - it('should have correct elements', () => { |
26 |
| - expect(vm.$el.classList.contains('mr-widget-body')).toBeTruthy(); |
27 |
| - expect(vm.$el.querySelector('button').getAttribute('disabled')).toBeFalsy(); |
28 |
| - expect(vm.$el.innerText).toContain('This merge request failed to be merged automatically'); |
29 |
| - expect(vm.$el.innerText).toContain(mergeError); |
| 39 | + Vue.nextTick(() => { |
| 40 | + expect(vm.$el.querySelector('button').getAttribute('disabled')).toEqual('disabled'); |
| 41 | + expect( |
| 42 | + vm.$el.querySelector('button i').classList, |
| 43 | + ).toContain('fa-spinner'); |
| 44 | + done(); |
30 | 45 | });
|
31 | 46 | });
|
32 | 47 | });
|
0 commit comments