86 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { shallowMount } from '@vue/test-utils';
 | |
| import { mapComputed } from '~/vuex_shared/bindings';
 | |
| 
 | |
| describe('Binding utils', () => {
 | |
|   describe('mapComputed', () => {
 | |
|     const defaultArgs = [['baz'], 'bar', 'foo', 'qux'];
 | |
| 
 | |
|     const createDummy = (mapComputedArgs = defaultArgs) => ({
 | |
|       computed: {
 | |
|         ...mapComputed(...mapComputedArgs),
 | |
|       },
 | |
|       render() {
 | |
|         return null;
 | |
|       },
 | |
|     });
 | |
| 
 | |
|     const mocks = {
 | |
|       $store: {
 | |
|         state: {
 | |
|           baz: 2,
 | |
|           foo: {
 | |
|             baz: 1,
 | |
|           },
 | |
|         },
 | |
|         getters: {
 | |
|           getBaz: 'foo',
 | |
|         },
 | |
|         dispatch: jest.fn(),
 | |
|       },
 | |
|     };
 | |
| 
 | |
|     it('returns an object with keys equal to the first fn parameter', () => {
 | |
|       const keyList = ['foo1', 'foo2'];
 | |
|       const result = mapComputed(keyList, 'foo', 'bar');
 | |
|       expect(Object.keys(result)).toEqual(keyList);
 | |
|     });
 | |
| 
 | |
|     it('returns an object with keys equal to the first fn parameter when the root is a function', () => {
 | |
|       const keyList = ['foo1', 'foo2'];
 | |
|       const result = mapComputed(keyList, 'foo', (state) => state.bar);
 | |
|       expect(Object.keys(result)).toEqual(keyList);
 | |
|     });
 | |
| 
 | |
|     it('returned object has set and get function', () => {
 | |
|       const result = mapComputed(['baz'], 'foo', 'bar');
 | |
|       expect(result.baz.set).toBeDefined();
 | |
|       expect(result.baz.get).toBeDefined();
 | |
|     });
 | |
| 
 | |
|     describe('set function', () => {
 | |
|       it('invokes $store.dispatch', () => {
 | |
|         const context = shallowMount(createDummy(), { mocks });
 | |
|         context.vm.baz = 'a';
 | |
|         expect(context.vm.$store.dispatch).toHaveBeenCalledWith('bar', { baz: 'a' });
 | |
|       });
 | |
|       it('uses updateFn in list object mode if updateFn exists', () => {
 | |
|         const context = shallowMount(createDummy([[{ key: 'foo', updateFn: 'baz' }]]), { mocks });
 | |
|         context.vm.foo = 'b';
 | |
|         expect(context.vm.$store.dispatch).toHaveBeenCalledWith('baz', { foo: 'b' });
 | |
|       });
 | |
|       it('in  list object mode defaults to defaultUpdateFn if updateFn do not exists', () => {
 | |
|         const context = shallowMount(createDummy([[{ key: 'foo' }], 'defaultFn']), { mocks });
 | |
|         context.vm.foo = 'c';
 | |
|         expect(context.vm.$store.dispatch).toHaveBeenCalledWith('defaultFn', { foo: 'c' });
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     describe('get function', () => {
 | |
|       it('if root is set returns $store.state[root][key]', () => {
 | |
|         const context = shallowMount(createDummy(), { mocks });
 | |
|         expect(context.vm.baz).toBe(mocks.$store.state.foo.baz);
 | |
|       });
 | |
| 
 | |
|       it('if root is not set returns $store.state[key]', () => {
 | |
|         const context = shallowMount(createDummy([['baz'], 'bar']), { mocks });
 | |
|         expect(context.vm.baz).toBe(mocks.$store.state.baz);
 | |
|       });
 | |
| 
 | |
|       it('when using getters it invoke the appropriate getter', () => {
 | |
|         const context = shallowMount(createDummy([[{ getter: 'getBaz', key: 'baz' }]]), { mocks });
 | |
|         expect(context.vm.baz).toBe(mocks.$store.getters.getBaz);
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| });
 |