diff options
author | Phil Hughes <me@iamphill.com> | 2019-05-29 17:01:35 +0100 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2019-05-29 17:01:35 +0100 |
commit | 2cf3fbcfb4a19169713382e3e27e43b9dfce6baa (patch) | |
tree | 514679ed819a53ffcaf992bc375381f18a1aacbc /spec/frontend/repository/components/table | |
parent | ee277ce0b69680531f57dd3572b14877aaa79045 (diff) | |
download | gitlab-ce-2cf3fbcfb4a19169713382e3e27e43b9dfce6baa.tar.gz |
Fixes bug with parent row component triggering multiple Vue router pushes
Diffstat (limited to 'spec/frontend/repository/components/table')
-rw-r--r-- | spec/frontend/repository/components/table/parent_row_spec.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/spec/frontend/repository/components/table/parent_row_spec.js b/spec/frontend/repository/components/table/parent_row_spec.js new file mode 100644 index 00000000000..7020055271f --- /dev/null +++ b/spec/frontend/repository/components/table/parent_row_spec.js @@ -0,0 +1,64 @@ +import { shallowMount, RouterLinkStub } from '@vue/test-utils'; +import ParentRow from '~/repository/components/table/parent_row.vue'; + +let vm; +let $router; + +function factory(path) { + $router = { + push: jest.fn(), + }; + + vm = shallowMount(ParentRow, { + propsData: { + commitRef: 'master', + path, + }, + stubs: { + RouterLink: RouterLinkStub, + }, + mocks: { + $router, + }, + }); +} + +describe('Repository parent row component', () => { + afterEach(() => { + vm.destroy(); + }); + + it.each` + path | to + ${'app'} | ${'/tree/master/'} + ${'app/assets'} | ${'/tree/master/app'} + `('renders link in $path to $to', ({ path, to }) => { + factory(path); + + expect(vm.find(RouterLinkStub).props().to).toEqual({ + path: to, + }); + }); + + it('pushes new router when clicking row', () => { + factory('app/assets'); + + vm.find('td').trigger('click'); + + expect($router.push).toHaveBeenCalledWith({ + path: '/tree/master/app', + }); + }); + + // We test that it does not get called when clicking any internal + // links as this was causing multipe routes to get pushed + it('does not trigger router.push when clicking link', () => { + factory('app/assets'); + + vm.find('a').trigger('click'); + + expect($router.push).not.toHaveBeenCalledWith({ + path: '/tree/master/app', + }); + }); +}); |