49 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { shallowMount, createWrapper } from '@vue/test-utils';
 | |
| import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants';
 | |
| import ModalCopyButton from '~/vue_shared/components/modal_copy_button.vue';
 | |
| 
 | |
| describe('modal copy button', () => {
 | |
|   let wrapper;
 | |
| 
 | |
|   afterEach(() => {
 | |
|     wrapper.destroy();
 | |
|   });
 | |
| 
 | |
|   beforeEach(() => {
 | |
|     wrapper = shallowMount(ModalCopyButton, {
 | |
|       propsData: {
 | |
|         text: 'copy me',
 | |
|         title: 'Copy this value',
 | |
|         id: 'test-id',
 | |
|       },
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('clipboard', () => {
 | |
|     it('should fire a `success` event on click', () => {
 | |
|       const root = createWrapper(wrapper.vm.$root);
 | |
|       document.execCommand = jest.fn(() => true);
 | |
|       window.getSelection = jest.fn(() => ({
 | |
|         toString: jest.fn(() => 'test'),
 | |
|         removeAllRanges: jest.fn(),
 | |
|       }));
 | |
|       wrapper.trigger('click');
 | |
| 
 | |
|       return wrapper.vm.$nextTick().then(() => {
 | |
|         expect(wrapper.emitted().success).not.toBeEmpty();
 | |
|         expect(document.execCommand).toHaveBeenCalledWith('copy');
 | |
|         expect(root.emitted(BV_HIDE_TOOLTIP)).toEqual([['test-id']]);
 | |
|       });
 | |
|     });
 | |
|     it("should propagate the clipboard error event if execCommand doesn't work", () => {
 | |
|       document.execCommand = jest.fn(() => false);
 | |
|       wrapper.trigger('click');
 | |
| 
 | |
|       return wrapper.vm.$nextTick().then(() => {
 | |
|         expect(wrapper.emitted().error).not.toBeEmpty();
 | |
|         expect(document.execCommand).toHaveBeenCalledWith('copy');
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| });
 |