180 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { mount } from '@vue/test-utils';
 | |
| import { GlLoadingIcon } from '@gitlab/ui';
 | |
| import SnippetBlobView from '~/snippets/components/snippet_blob_view.vue';
 | |
| import BlobHeader from '~/blob/components/blob_header.vue';
 | |
| import BlobEmbeddable from '~/blob/components/blob_embeddable.vue';
 | |
| import BlobContent from '~/blob/components/blob_content.vue';
 | |
| import { RichViewer, SimpleViewer } from '~/vue_shared/components/blob_viewers';
 | |
| import {
 | |
|   SNIPPET_VISIBILITY_PRIVATE,
 | |
|   SNIPPET_VISIBILITY_INTERNAL,
 | |
|   SNIPPET_VISIBILITY_PUBLIC,
 | |
| } from '~/snippets/constants';
 | |
| 
 | |
| import { Blob as BlobMock, SimpleViewerMock, RichViewerMock } from 'jest/blob/components/mock_data';
 | |
| 
 | |
| describe('Blob Embeddable', () => {
 | |
|   let wrapper;
 | |
|   const snippet = {
 | |
|     id: 'gid://foo.bar/snippet',
 | |
|     webUrl: 'https://foo.bar',
 | |
|     visibilityLevel: SNIPPET_VISIBILITY_PUBLIC,
 | |
|   };
 | |
|   const dataMock = {
 | |
|     blob: BlobMock,
 | |
|     activeViewerType: SimpleViewerMock.type,
 | |
|   };
 | |
| 
 | |
|   function createComponent(
 | |
|     props = {},
 | |
|     data = dataMock,
 | |
|     blobLoading = false,
 | |
|     contentLoading = false,
 | |
|   ) {
 | |
|     const $apollo = {
 | |
|       queries: {
 | |
|         blob: {
 | |
|           loading: blobLoading,
 | |
|         },
 | |
|         blobContent: {
 | |
|           loading: contentLoading,
 | |
|         },
 | |
|       },
 | |
|     };
 | |
| 
 | |
|     wrapper = mount(SnippetBlobView, {
 | |
|       propsData: {
 | |
|         snippet: {
 | |
|           ...snippet,
 | |
|           ...props,
 | |
|         },
 | |
|       },
 | |
|       data() {
 | |
|         return {
 | |
|           ...data,
 | |
|         };
 | |
|       },
 | |
|       mocks: { $apollo },
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   afterEach(() => {
 | |
|     wrapper.destroy();
 | |
|   });
 | |
| 
 | |
|   describe('rendering', () => {
 | |
|     it('renders correct components', () => {
 | |
|       createComponent();
 | |
|       expect(wrapper.find(BlobEmbeddable).exists()).toBe(true);
 | |
|       expect(wrapper.find(BlobHeader).exists()).toBe(true);
 | |
|       expect(wrapper.find(BlobContent).exists()).toBe(true);
 | |
|     });
 | |
| 
 | |
|     it.each([SNIPPET_VISIBILITY_INTERNAL, SNIPPET_VISIBILITY_PRIVATE, 'foo'])(
 | |
|       'does not render blob-embeddable by default',
 | |
|       visibilityLevel => {
 | |
|         createComponent({
 | |
|           visibilityLevel,
 | |
|         });
 | |
|         expect(wrapper.find(BlobEmbeddable).exists()).toBe(false);
 | |
|       },
 | |
|     );
 | |
| 
 | |
|     it('does render blob-embeddable for public snippet', () => {
 | |
|       createComponent({
 | |
|         visibilityLevel: SNIPPET_VISIBILITY_PUBLIC,
 | |
|       });
 | |
|       expect(wrapper.find(BlobEmbeddable).exists()).toBe(true);
 | |
|     });
 | |
| 
 | |
|     it('shows loading icon while blob data is in flight', () => {
 | |
|       createComponent({}, dataMock, true);
 | |
|       expect(wrapper.find(GlLoadingIcon).exists()).toBe(true);
 | |
|       expect(wrapper.find('.snippet-file-content').exists()).toBe(false);
 | |
|     });
 | |
| 
 | |
|     it('sets simple viewer correctly', () => {
 | |
|       createComponent();
 | |
|       expect(wrapper.find(SimpleViewer).exists()).toBe(true);
 | |
|     });
 | |
| 
 | |
|     it('sets rich viewer correctly', () => {
 | |
|       const data = Object.assign({}, dataMock, {
 | |
|         activeViewerType: RichViewerMock.type,
 | |
|       });
 | |
|       createComponent({}, data);
 | |
|       expect(wrapper.find(RichViewer).exists()).toBe(true);
 | |
|     });
 | |
| 
 | |
|     it('correctly switches viewer type', () => {
 | |
|       createComponent();
 | |
|       expect(wrapper.find(SimpleViewer).exists()).toBe(true);
 | |
| 
 | |
|       wrapper.vm.switchViewer(RichViewerMock.type);
 | |
| 
 | |
|       return wrapper.vm
 | |
|         .$nextTick()
 | |
|         .then(() => {
 | |
|           expect(wrapper.find(RichViewer).exists()).toBe(true);
 | |
|           wrapper.vm.switchViewer(SimpleViewerMock.type);
 | |
|         })
 | |
|         .then(() => {
 | |
|           expect(wrapper.find(SimpleViewer).exists()).toBe(true);
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     describe('URLS with hash', () => {
 | |
|       beforeEach(() => {
 | |
|         window.location.hash = '#LC2';
 | |
|       });
 | |
| 
 | |
|       afterEach(() => {
 | |
|         window.location.hash = '';
 | |
|       });
 | |
| 
 | |
|       it('renders simple viewer by default if URL contains hash', () => {
 | |
|         createComponent();
 | |
| 
 | |
|         expect(wrapper.vm.activeViewerType).toBe(SimpleViewerMock.type);
 | |
|         expect(wrapper.find(SimpleViewer).exists()).toBe(true);
 | |
|       });
 | |
| 
 | |
|       describe('switchViewer()', () => {
 | |
|         it('by default switches to the passed viewer', () => {
 | |
|           createComponent();
 | |
| 
 | |
|           wrapper.vm.switchViewer(RichViewerMock.type);
 | |
|           return wrapper.vm
 | |
|             .$nextTick()
 | |
|             .then(() => {
 | |
|               expect(wrapper.vm.activeViewerType).toBe(RichViewerMock.type);
 | |
|               expect(wrapper.find(RichViewer).exists()).toBe(true);
 | |
| 
 | |
|               wrapper.vm.switchViewer(SimpleViewerMock.type);
 | |
|             })
 | |
|             .then(() => {
 | |
|               expect(wrapper.vm.activeViewerType).toBe(SimpleViewerMock.type);
 | |
|               expect(wrapper.find(SimpleViewer).exists()).toBe(true);
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         it('respects hash over richViewer in the blob when corresponding parameter is passed', () => {
 | |
|           createComponent(
 | |
|             {},
 | |
|             {
 | |
|               blob: BlobMock,
 | |
|             },
 | |
|           );
 | |
|           expect(wrapper.vm.blob.richViewer).toEqual(expect.any(Object));
 | |
| 
 | |
|           wrapper.vm.switchViewer(RichViewerMock.type, true);
 | |
|           return wrapper.vm.$nextTick().then(() => {
 | |
|             expect(wrapper.vm.activeViewerType).toBe(SimpleViewerMock.type);
 | |
|             expect(wrapper.find(SimpleViewer).exists()).toBe(true);
 | |
|           });
 | |
|         });
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| });
 |