From 1c4104332b7c519d1781d576d3a4e8826c717360 Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Fri, 3 Mar 2023 07:27:32 +0100 Subject: [PATCH 1/2] Remove Vue.extend usage --- .../components/markdown/suggestions.vue | 8 ++++- .../components/markdown/suggestions_spec.js | 33 ++++++++++--------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/app/assets/javascripts/vue_shared/components/markdown/suggestions.vue b/app/assets/javascripts/vue_shared/components/markdown/suggestions.vue index 49eb11f8081ad9..6d1cadf15be2e7 100644 --- a/app/assets/javascripts/vue_shared/components/markdown/suggestions.vue +++ b/app/assets/javascripts/vue_shared/components/markdown/suggestions.vue @@ -176,6 +176,12 @@ export default { diff --git a/spec/frontend/vue_shared/components/markdown/suggestions_spec.js b/spec/frontend/vue_shared/components/markdown/suggestions_spec.js index 8f4235cfe416b2..8d663b9d6bcd51 100644 --- a/spec/frontend/vue_shared/components/markdown/suggestions_spec.js +++ b/spec/frontend/vue_shared/components/markdown/suggestions_spec.js @@ -1,4 +1,5 @@ -import Vue, { nextTick } from 'vue'; +import { nextTick } from 'vue'; +import { mountExtended } from 'helpers/vue_test_utils_helper'; import SuggestionsComponent from '~/vue_shared/components/markdown/suggestions.vue'; const MOCK_DATA = { @@ -48,36 +49,38 @@ const MOCK_DATA = { }; describe('Suggestion component', () => { - let vm; + let wrapper; let diffTable; - beforeEach(async () => { - const Component = Vue.extend(SuggestionsComponent); + const createComponent = (props = {}) => + mountExtended(SuggestionsComponent, { + propsData: { + ...MOCK_DATA, + ...props, + }, + }); - vm = new Component({ - propsData: MOCK_DATA, - }).$mount(); + const findSuggestionsContainer = () => wrapper.findByTestId('suggestions-container'); - diffTable = vm.generateDiff(0).$mount().$el; + beforeEach(async () => { + wrapper = createComponent(); + diffTable = wrapper.vm.generateDiff(0).$mount().$el; - jest.spyOn(vm, 'renderSuggestions').mockImplementation(() => {}); - vm.renderSuggestions(); await nextTick(); }); describe('mounted', () => { it('renders a flash container', () => { - expect(vm.$el.querySelector('.js-suggestions-flash')).not.toBeNull(); + expect(wrapper.find('.js-suggestions-flash').exists()).toBe(true); }); it('renders a container for suggestions', () => { - expect(vm.$refs.container).not.toBeNull(); + expect(findSuggestionsContainer().exists()).toBe(true); }); it('renders suggestions', () => { - expect(vm.renderSuggestions).toHaveBeenCalled(); - expect(vm.$el.innerHTML.includes('oldtest')).toBe(true); - expect(vm.$el.innerHTML.includes('newtest')).toBe(true); + expect(findSuggestionsContainer().text()).toContain('oldtest'); + expect(findSuggestionsContainer().text()).toContain('newtest'); }); }); -- GitLab From 9d0bbae92d59de5947b913b9767b9777cd5e7198 Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Wed, 19 Apr 2023 11:54:58 +0200 Subject: [PATCH 2/2] Address reviewer feedback --- .../components/markdown/suggestions_spec.js | 29 +++---------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/spec/frontend/vue_shared/components/markdown/suggestions_spec.js b/spec/frontend/vue_shared/components/markdown/suggestions_spec.js index 8d663b9d6bcd51..2fdab40b4bd16f 100644 --- a/spec/frontend/vue_shared/components/markdown/suggestions_spec.js +++ b/spec/frontend/vue_shared/components/markdown/suggestions_spec.js @@ -50,21 +50,20 @@ const MOCK_DATA = { describe('Suggestion component', () => { let wrapper; - let diffTable; - const createComponent = (props = {}) => - mountExtended(SuggestionsComponent, { + const createComponent = (props = {}) => { + wrapper = mountExtended(SuggestionsComponent, { propsData: { ...MOCK_DATA, ...props, }, }); + }; const findSuggestionsContainer = () => wrapper.findByTestId('suggestions-container'); beforeEach(async () => { - wrapper = createComponent(); - diffTable = wrapper.vm.generateDiff(0).$mount().$el; + createComponent(); await nextTick(); }); @@ -83,24 +82,4 @@ describe('Suggestion component', () => { expect(findSuggestionsContainer().text()).toContain('newtest'); }); }); - - describe('generateDiff', () => { - it('generates a diff table', () => { - expect(diffTable.querySelector('.md-suggestion-diff')).not.toBeNull(); - }); - - it('generates a diff table that contains contents the suggested lines', () => { - MOCK_DATA.suggestions[0].diff_lines.forEach((line) => { - const text = line.text.substring(1); - - expect(diffTable.innerHTML.includes(text)).toBe(true); - }); - }); - - it('generates a diff table with the correct line number for each suggested line', () => { - const lines = diffTable.querySelectorAll('.old_line'); - - expect(parseInt([...lines][0].innerHTML, 10)).toBe(5); - }); - }); }); -- GitLab