50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
import fs from 'fs';
 | 
						|
import { mount } from '@vue/test-utils';
 | 
						|
import { Document } from 'yaml';
 | 
						|
import InputWrapper from '~/pipeline_wizard/components/input_wrapper.vue';
 | 
						|
 | 
						|
describe('Test all widgets in ./widgets/* whether they provide a minimal api', () => {
 | 
						|
  const createComponent = (props = {}, mountFunc = mount) => {
 | 
						|
    mountFunc(InputWrapper, {
 | 
						|
      propsData: {
 | 
						|
        template: new Document({
 | 
						|
          template: {
 | 
						|
            bar: 'baz',
 | 
						|
            foo: { some: '$TARGET' },
 | 
						|
          },
 | 
						|
        }).get('template'),
 | 
						|
        compiled: new Document({ bar: 'baz', foo: { some: '$TARGET' } }),
 | 
						|
        target: '$TARGET',
 | 
						|
        widget: 'text',
 | 
						|
        label: 'some label (required by the text widget)',
 | 
						|
        ...props,
 | 
						|
      },
 | 
						|
    });
 | 
						|
  };
 | 
						|
 | 
						|
  const widgets = fs
 | 
						|
    .readdirSync('./app/assets/javascripts/pipeline_wizard/components/widgets')
 | 
						|
    .map((filename) => [filename.match(/^(.*).vue$/)[1]]);
 | 
						|
  let consoleErrorSpy;
 | 
						|
 | 
						|
  beforeAll(() => {
 | 
						|
    consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
 | 
						|
  });
 | 
						|
 | 
						|
  afterAll(() => {
 | 
						|
    consoleErrorSpy.mockRestore();
 | 
						|
  });
 | 
						|
 | 
						|
  describe.each(widgets)('`%s` Widget', (name) => {
 | 
						|
    it('passes the input validator', () => {
 | 
						|
      const validatorFunc = InputWrapper.props.widget.validator;
 | 
						|
      expect(validatorFunc(name)).toBe(true);
 | 
						|
    });
 | 
						|
 | 
						|
    it('mounts without error', () => {
 | 
						|
      createComponent({ widget: name });
 | 
						|
      expect(consoleErrorSpy).not.toHaveBeenCalled();
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |