113 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { GlLink, GlTooltip, GlSprintf } from '@gitlab/ui';
 | |
| import { shallowMount } from '@vue/test-utils';
 | |
| import LockTooltip from '~/namespaces/cascading_settings/components/lock_tooltip.vue';
 | |
| 
 | |
| describe('LockTooltip', () => {
 | |
|   const mockNamespace = {
 | |
|     fullName: 'GitLab Org / GitLab',
 | |
|     path: '/gitlab-org/gitlab/-/edit',
 | |
|   };
 | |
| 
 | |
|   const applicationSettingMessage =
 | |
|     'An administrator selected this setting for the instance and you cannot change it.';
 | |
| 
 | |
|   let wrapper;
 | |
|   const tooltipMountEl = document.createElement('div');
 | |
| 
 | |
|   const createWrapper = (props = {}) => {
 | |
|     wrapper = shallowMount(LockTooltip, {
 | |
|       propsData: {
 | |
|         ancestorNamespace: mockNamespace,
 | |
|         isLockedByAdmin: false,
 | |
|         isLockedByGroupAncestor: false,
 | |
|         targetElement: tooltipMountEl,
 | |
|         ...props,
 | |
|       },
 | |
|       stubs: {
 | |
|         GlSprintf,
 | |
|       },
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   const findLink = () => wrapper.findComponent(GlLink);
 | |
|   const findTooltip = () => wrapper.findComponent(GlTooltip);
 | |
| 
 | |
|   describe('when setting is locked by an admin setting', () => {
 | |
|     beforeEach(() => {
 | |
|       createWrapper({ isLockedByAdmin: true });
 | |
|     });
 | |
| 
 | |
|     it('displays correct tooltip message', () => {
 | |
|       expect(findTooltip().text()).toBe(applicationSettingMessage);
 | |
|     });
 | |
| 
 | |
|     it('sets `target` prop correctly', () => {
 | |
|       expect(findTooltip().props().target).toBe(tooltipMountEl);
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('when setting is locked by an ancestor namespace', () => {
 | |
|     describe('and ancestorNamespace is set', () => {
 | |
|       beforeEach(() => {
 | |
|         createWrapper({
 | |
|           isLockedByGroupAncestor: true,
 | |
|           ancestorNamespace: mockNamespace,
 | |
|         });
 | |
|       });
 | |
| 
 | |
|       it('displays correct tooltip message', () => {
 | |
|         expect(findTooltip().text()).toBe(
 | |
|           `This setting has been enforced by an owner of ${mockNamespace.fullName}.`,
 | |
|         );
 | |
|       });
 | |
| 
 | |
|       it('displays link to ancestor namespace', () => {
 | |
|         expect(findLink().attributes().href).toBe(mockNamespace.path);
 | |
|       });
 | |
| 
 | |
|       it('sets `target` prop correctly', () => {
 | |
|         expect(findTooltip().props().target).toBe(tooltipMountEl);
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     describe('and ancestorNamespace is not set', () => {
 | |
|       beforeEach(() => {
 | |
|         createWrapper({ isLockedByGroupAncestor: true, ancestorNamespace: null });
 | |
|       });
 | |
| 
 | |
|       it('displays a generic message', () => {
 | |
|         expect(findTooltip().text()).toBe(
 | |
|           `This setting has been enforced by an owner and cannot be changed.`,
 | |
|         );
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('when setting is locked by an application setting and an ancestor namespace', () => {
 | |
|     beforeEach(() => {
 | |
|       createWrapper({
 | |
|         isLockedByAdmin: true,
 | |
|         isLockedByGroupAncestor: true,
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     it('displays correct tooltip message', () => {
 | |
|       expect(findTooltip().text()).toBe(applicationSettingMessage);
 | |
|     });
 | |
| 
 | |
|     it('sets `target` prop correctly', () => {
 | |
|       expect(findTooltip().props().target).toBe(tooltipMountEl);
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('when setting is not locked', () => {
 | |
|     beforeEach(() => {
 | |
|       createWrapper({ isLockedByAdmin: false, isLockedByGroupAncestor: false });
 | |
|     });
 | |
| 
 | |
|     it('does not render tooltip', () => {
 | |
|       expect(findTooltip().exists()).toBe(false);
 | |
|     });
 | |
|   });
 | |
| });
 |