debian-mirror-gitlab/spec/frontend/repository/components/table/row_spec.js

265 lines
5.7 KiB
JavaScript
Raw Normal View History

2019-09-04 21:01:54 +05:30
import { shallowMount, RouterLinkStub } from '@vue/test-utils';
2020-03-13 15:44:24 +05:30
import { GlBadge, GlLink, GlLoadingIcon } from '@gitlab/ui';
2019-09-04 21:01:54 +05:30
import { visitUrl } from '~/lib/utils/url_utility';
import TableRow from '~/repository/components/table/row.vue';
2019-12-26 22:10:19 +05:30
import Icon from '~/vue_shared/components/icon.vue';
2019-09-04 21:01:54 +05:30
jest.mock('~/lib/utils/url_utility');
let vm;
let $router;
function factory(propsData = {}) {
$router = {
push: jest.fn(),
};
vm = shallowMount(TableRow, {
propsData: {
...propsData,
2019-09-30 21:07:59 +05:30
name: propsData.path,
projectPath: 'gitlab-org/gitlab-ce',
2019-09-04 21:01:54 +05:30
url: `https://test.com`,
},
mocks: {
$router,
},
stubs: {
RouterLink: RouterLinkStub,
},
});
vm.setData({ ref: 'master' });
}
describe('Repository table row component', () => {
afterEach(() => {
vm.destroy();
});
it('renders table row', () => {
factory({
id: '1',
2019-12-26 22:10:19 +05:30
sha: '123',
2019-09-04 21:01:54 +05:30
path: 'test',
type: 'file',
currentPath: '/',
});
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
expect(vm.element).toMatchSnapshot();
});
});
it('renders table row for path with special character', () => {
factory({
id: '1',
sha: '123',
path: 'test$/test',
type: 'file',
currentPath: 'test$',
});
return vm.vm.$nextTick().then(() => {
expect(vm.element).toMatchSnapshot();
});
2019-09-04 21:01:54 +05:30
});
it.each`
type | component | componentName
${'tree'} | ${RouterLinkStub} | ${'RouterLink'}
${'file'} | ${'a'} | ${'hyperlink'}
${'commit'} | ${'a'} | ${'hyperlink'}
`('renders a $componentName for type $type', ({ type, component }) => {
factory({
id: '1',
2019-12-26 22:10:19 +05:30
sha: '123',
2019-09-04 21:01:54 +05:30
path: 'test',
type,
currentPath: '/',
});
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
expect(vm.find(component).exists()).toBe(true);
});
2019-09-04 21:01:54 +05:30
});
it.each`
type | pushes
${'tree'} | ${true}
${'file'} | ${false}
${'commit'} | ${false}
`('pushes new router if type $type is tree', ({ type, pushes }) => {
factory({
id: '1',
2019-12-26 22:10:19 +05:30
sha: '123',
2019-09-04 21:01:54 +05:30
path: 'test',
type,
currentPath: '/',
});
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
vm.trigger('click');
2019-09-04 21:01:54 +05:30
2020-03-13 15:44:24 +05:30
if (pushes) {
expect($router.push).toHaveBeenCalledWith({ path: '/-/tree/master/test' });
} else {
expect($router.push).not.toHaveBeenCalled();
}
});
});
it.each`
path
${'test#'}
${'Änderungen'}
`('renders link for $path', ({ path }) => {
factory({
id: '1',
sha: '123',
path,
type: 'tree',
currentPath: '/',
});
return vm.vm.$nextTick().then(() => {
expect(vm.find({ ref: 'link' }).props('to')).toEqual({
path: `/-/tree/master/${encodeURIComponent(path)}`,
});
});
});
it('pushes new route for directory with hash', () => {
factory({
id: '1',
sha: '123',
path: 'test#',
type: 'tree',
currentPath: '/',
});
return vm.vm.$nextTick().then(() => {
vm.trigger('click');
expect($router.push).toHaveBeenCalledWith({ path: '/-/tree/master/test%23' });
});
2019-09-04 21:01:54 +05:30
});
it.each`
type | pushes
${'tree'} | ${true}
${'file'} | ${false}
${'commit'} | ${false}
`('calls visitUrl if $type is not tree', ({ type, pushes }) => {
factory({
id: '1',
2019-12-26 22:10:19 +05:30
sha: '123',
2019-09-04 21:01:54 +05:30
path: 'test',
type,
currentPath: '/',
});
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
vm.trigger('click');
2019-09-04 21:01:54 +05:30
2020-03-13 15:44:24 +05:30
if (pushes) {
expect(visitUrl).not.toHaveBeenCalled();
} else {
const [url, external] = visitUrl.mock.calls[0];
expect(url).toBe('https://test.com');
expect(external).toBeFalsy();
}
});
2019-09-04 21:01:54 +05:30
});
it('renders commit ID for submodule', () => {
factory({
id: '1',
2019-12-26 22:10:19 +05:30
sha: '123',
2019-09-04 21:01:54 +05:30
path: 'test',
type: 'commit',
currentPath: '/',
});
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
expect(vm.find('.commit-sha').text()).toContain('1');
});
2019-09-04 21:01:54 +05:30
});
it('renders link with href', () => {
factory({
id: '1',
2019-12-26 22:10:19 +05:30
sha: '123',
2019-09-04 21:01:54 +05:30
path: 'test',
type: 'blob',
url: 'https://test.com',
currentPath: '/',
});
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
expect(vm.find('a').attributes('href')).toEqual('https://test.com');
});
2019-09-04 21:01:54 +05:30
});
it('renders LFS badge', () => {
factory({
id: '1',
2019-12-26 22:10:19 +05:30
sha: '123',
2019-09-04 21:01:54 +05:30
path: 'test',
type: 'commit',
currentPath: '/',
lfsOid: '1',
});
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
expect(vm.find(GlBadge).exists()).toBe(true);
});
2019-09-04 21:01:54 +05:30
});
2019-09-30 21:07:59 +05:30
it('renders commit and web links with href for submodule', () => {
factory({
id: '1',
2019-12-26 22:10:19 +05:30
sha: '123',
2019-09-30 21:07:59 +05:30
path: 'test',
type: 'commit',
url: 'https://test.com',
submoduleTreeUrl: 'https://test.com/commit',
currentPath: '/',
});
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
expect(vm.find('a').attributes('href')).toEqual('https://test.com');
expect(vm.find(GlLink).attributes('href')).toEqual('https://test.com/commit');
});
2019-09-30 21:07:59 +05:30
});
2019-12-26 22:10:19 +05:30
it('renders lock icon', () => {
factory({
id: '1',
sha: '123',
path: 'test',
type: 'tree',
currentPath: '/',
});
vm.setData({ commit: { lockLabel: 'Locked by Root', committedDate: '2019-01-01' } });
2020-03-13 15:44:24 +05:30
return vm.vm.$nextTick().then(() => {
expect(vm.find(Icon).exists()).toBe(true);
});
});
it('renders loading icon when path is loading', () => {
factory({
id: '1',
sha: '1',
path: 'test',
type: 'tree',
currentPath: '/',
loadingPath: 'test',
});
expect(vm.find(GlLoadingIcon).exists()).toBe(true);
2019-12-26 22:10:19 +05:30
});
2019-09-04 21:01:54 +05:30
});