mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-08-13 14:44:59 +00:00
102 lines
4.1 KiB
JavaScript
102 lines
4.1 KiB
JavaScript
import { GlButton, GlIcon } from '@gitlab/ui';
|
|
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
|
|
import VisibilityIconButton from '~/vue_shared/components/visibility_icon_button.vue';
|
|
import {
|
|
GROUP_VISIBILITY_TYPE,
|
|
PROJECT_VISIBILITY_TYPE,
|
|
VISIBILITY_LEVEL_INTERNAL_STRING,
|
|
VISIBILITY_LEVEL_PRIVATE_STRING,
|
|
VISIBILITY_LEVEL_PUBLIC_STRING,
|
|
VISIBILITY_TYPE_ICON,
|
|
} from '~/visibility_level/constants';
|
|
|
|
describe('Visibility icon button', () => {
|
|
let glTooltipDirectiveMock;
|
|
let wrapper;
|
|
|
|
const createComponent = (props = {}) => {
|
|
glTooltipDirectiveMock = jest.fn();
|
|
|
|
wrapper = shallowMountExtended(VisibilityIconButton, {
|
|
directives: {
|
|
GlTooltip: glTooltipDirectiveMock,
|
|
},
|
|
propsData: {
|
|
...props,
|
|
},
|
|
stubs: {
|
|
GlIcon,
|
|
},
|
|
});
|
|
};
|
|
|
|
const findIconButton = () => wrapper.findComponent(GlButton);
|
|
const findIcon = () => wrapper.findComponent(GlIcon);
|
|
|
|
describe('visibilityTooltip', () => {
|
|
describe('if item represents group', () => {
|
|
it.each`
|
|
visibilityLevel | visibilityTooltip | visibilityIcon | tooltipPlacement
|
|
${VISIBILITY_LEVEL_PUBLIC_STRING} | ${GROUP_VISIBILITY_TYPE[VISIBILITY_LEVEL_PUBLIC_STRING]} | ${VISIBILITY_TYPE_ICON[VISIBILITY_LEVEL_PUBLIC_STRING]} | ${'top'}
|
|
${VISIBILITY_LEVEL_INTERNAL_STRING} | ${GROUP_VISIBILITY_TYPE[VISIBILITY_LEVEL_INTERNAL_STRING]} | ${VISIBILITY_TYPE_ICON[VISIBILITY_LEVEL_INTERNAL_STRING]} | ${'bottom'}
|
|
${VISIBILITY_LEVEL_PRIVATE_STRING} | ${GROUP_VISIBILITY_TYPE[VISIBILITY_LEVEL_PRIVATE_STRING]} | ${VISIBILITY_TYPE_ICON[VISIBILITY_LEVEL_PRIVATE_STRING]} | ${'right'}
|
|
`(
|
|
'should return corresponding text when visibility level is $visibilityLevel',
|
|
({ visibilityLevel, visibilityTooltip, visibilityIcon, tooltipPlacement }) => {
|
|
createComponent({ isGroup: true, visibilityLevel, tooltipPlacement });
|
|
|
|
expect(findIconButton().attributes()).toEqual(
|
|
expect.objectContaining({
|
|
'aria-label': visibilityTooltip,
|
|
}),
|
|
);
|
|
|
|
expect(findIcon().props()).toEqual(
|
|
expect.objectContaining({
|
|
name: visibilityIcon,
|
|
}),
|
|
);
|
|
|
|
expect(glTooltipDirectiveMock.mock.calls[0][1].value).toEqual({
|
|
placement: tooltipPlacement,
|
|
boundary: 'viewport',
|
|
title: visibilityTooltip,
|
|
});
|
|
},
|
|
);
|
|
});
|
|
|
|
describe('if item represents project', () => {
|
|
it.each`
|
|
visibilityLevel | visibilityTooltip | visibilityIcon | tooltipPlacement
|
|
${VISIBILITY_LEVEL_PUBLIC_STRING} | ${PROJECT_VISIBILITY_TYPE[VISIBILITY_LEVEL_PUBLIC_STRING]} | ${VISIBILITY_TYPE_ICON[VISIBILITY_LEVEL_PUBLIC_STRING]} | ${'top'}
|
|
${VISIBILITY_LEVEL_INTERNAL_STRING} | ${PROJECT_VISIBILITY_TYPE[VISIBILITY_LEVEL_INTERNAL_STRING]} | ${VISIBILITY_TYPE_ICON[VISIBILITY_LEVEL_INTERNAL_STRING]} | ${'bottom'}
|
|
${VISIBILITY_LEVEL_PRIVATE_STRING} | ${PROJECT_VISIBILITY_TYPE[VISIBILITY_LEVEL_PRIVATE_STRING]} | ${VISIBILITY_TYPE_ICON[VISIBILITY_LEVEL_PRIVATE_STRING]} | ${'left'}
|
|
`(
|
|
'should return corresponding text when visibility level is $visibilityLevel',
|
|
({ visibilityLevel, visibilityTooltip, visibilityIcon, tooltipPlacement }) => {
|
|
createComponent({ visibilityLevel, tooltipPlacement });
|
|
|
|
expect(findIconButton().attributes()).toEqual(
|
|
expect.objectContaining({
|
|
'aria-label': visibilityTooltip,
|
|
}),
|
|
);
|
|
|
|
expect(findIcon().props()).toEqual(
|
|
expect.objectContaining({
|
|
name: visibilityIcon,
|
|
}),
|
|
);
|
|
|
|
expect(glTooltipDirectiveMock.mock.calls[0][1].value).toEqual({
|
|
placement: tooltipPlacement,
|
|
boundary: 'viewport',
|
|
title: visibilityTooltip,
|
|
});
|
|
},
|
|
);
|
|
});
|
|
});
|
|
});
|