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,
 | |
|           });
 | |
|         },
 | |
|       );
 | |
|     });
 | |
|   });
 | |
| });
 |