mirror of https://github.com/ElemeFE/element
				
				
				
			
		
			
				
	
	
		
			185 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Vue
		
	
	
| import { createTest, createVue, destroyVM } from '../util';
 | |
| import Transfer from 'packages/transfer';
 | |
| 
 | |
| describe('Transfer', () => {
 | |
|   let vm;
 | |
|   const getTestData = () => {
 | |
|     const data = [];
 | |
|     for (let i = 1; i <= 15; i++) {
 | |
|       data.push({
 | |
|         key: i,
 | |
|         label: `备选项 ${ i }`,
 | |
|         disabled: i % 4 === 0
 | |
|       });
 | |
|     }
 | |
|     return data;
 | |
|   };
 | |
|   const createTransfer = (props, opts) => {
 | |
|     return createVue(Object.assign({
 | |
|       template: `
 | |
|         <el-transfer :data="testData" ref="transfer" ${props}>
 | |
|         </el-transfer>
 | |
|       `,
 | |
| 
 | |
|       created() {
 | |
|         this.testData = getTestData();
 | |
|       }
 | |
|     }, opts));
 | |
|   };
 | |
| 
 | |
|   afterEach(() => {
 | |
|     destroyVM(vm);
 | |
|   });
 | |
| 
 | |
|   it('create', () => {
 | |
|     vm = createTest(Transfer, true);
 | |
|     expect(vm.$el).to.exist;
 | |
|   });
 | |
| 
 | |
|   it('default target list', () => {
 | |
|     vm = createTransfer('v-model="value"', {
 | |
|       data() {
 | |
|         return {
 | |
|           value: [1, 4]
 | |
|         };
 | |
|       }
 | |
|     });
 | |
|     expect(vm.$refs.transfer.sourceData.length).to.equal(13);
 | |
|   });
 | |
| 
 | |
|   it('filterable', done => {
 | |
|     vm = createTransfer('v-model="value" filterable :filter-method="method"', {
 | |
|       data() {
 | |
|         return {
 | |
|           value: [],
 | |
|           method(query, option) {
 | |
|             return option.key === Number(query);
 | |
|           }
 | |
|         };
 | |
|       }
 | |
|     });
 | |
|     const transfer = vm.$refs.transfer;
 | |
|     const leftList = transfer.$el.querySelector('.el-transfer-panel').__vue__;
 | |
|     leftList.query = '1';
 | |
|     setTimeout(_ => {
 | |
|       expect(leftList.filteredData.length).to.equal(1);
 | |
|       done();
 | |
|     }, 50);
 | |
|   });
 | |
| 
 | |
|   it('transfer', done => {
 | |
|     vm = createTransfer('v-model="value" :left-default-checked="[2, 3]" :right-default-checked="[1]"', {
 | |
|       data() {
 | |
|         return {
 | |
|           value: [1, 4]
 | |
|         };
 | |
|       }
 | |
|     });
 | |
|     const transfer = vm.$refs.transfer;
 | |
| 
 | |
|     setTimeout(_ => {
 | |
|       transfer.addToLeft();
 | |
|       setTimeout(_ => {
 | |
|         expect(transfer.sourceData.length).to.equal(14);
 | |
|         transfer.addToRight();
 | |
|         setTimeout(_ => {
 | |
|           expect(transfer.sourceData.length).to.equal(12);
 | |
|           done();
 | |
|         }, 50);
 | |
|       }, 50);
 | |
|     }, 50);
 | |
|   });
 | |
| 
 | |
|   it('customize', () => {
 | |
|     vm = createTransfer('v-model="value" :titles="titles" :render-content="renderFunc" :format="format"', {
 | |
|       data() {
 | |
|         return {
 | |
|           value: [2],
 | |
|           titles: ['表1', '表2'],
 | |
|           format: { noChecked: 'no', hasChecked: 'has' },
 | |
|           renderFunc(h, option) {
 | |
|             return <span>{ option.key } - { option.label }</span>;
 | |
|           }
 | |
|         };
 | |
|       }
 | |
|     });
 | |
|     const transfer = vm.$refs.transfer.$el;
 | |
|     const label = transfer.querySelector('.el-transfer-panel__header .el-checkbox__label');
 | |
|     expect(label.innerText.indexOf('表1') > -1).to.true;
 | |
|     expect(transfer.querySelector('.el-transfer-panel__list .el-checkbox__label span').innerText).to.equal('1 - 备选项 1');
 | |
|     expect(label.querySelector('span').innerText).to.equal('no');
 | |
|   });
 | |
| 
 | |
|   it('check', () => {
 | |
|     vm = createTransfer('v-model="value"', {
 | |
|       data() {
 | |
|         return {
 | |
|           value: []
 | |
|         };
 | |
|       }
 | |
|     });
 | |
|     const leftList = vm.$refs.transfer.$el.querySelector('.el-transfer-panel').__vue__;
 | |
|     leftList.handleAllCheckedChange({ target: { checked: true } });
 | |
|     expect(leftList.checked.length).to.equal(12);
 | |
|   });
 | |
| 
 | |
|   describe('target order', () => {
 | |
|     it('original(default)', done => {
 | |
|       vm = createTransfer('v-model="value" :left-default-checked="[2, 3]"', {
 | |
|         data() {
 | |
|           return {
 | |
|             value: [1, 4]
 | |
|           };
 | |
|         }
 | |
|       });
 | |
|       const transfer = vm.$refs.transfer;
 | |
|       setTimeout(() => {
 | |
|         transfer.addToRight();
 | |
|         setTimeout(() => {
 | |
|           const targetItems = [].slice.call(vm.$el.querySelectorAll('.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'));
 | |
|           expect(targetItems.map(item => item.innerText)).to.deep.equal(['备选项 1', '备选项 2', '备选项 3', '备选项 4']);
 | |
|           done();
 | |
|         }, 50);
 | |
|       }, 50);
 | |
|     });
 | |
| 
 | |
|     it('push', done => {
 | |
|       vm = createTransfer('v-model="value" :left-default-checked="[2, 3]" target-order="push"', {
 | |
|         data() {
 | |
|           return {
 | |
|             value: [1, 4]
 | |
|           };
 | |
|         }
 | |
|       });
 | |
|       const transfer = vm.$refs.transfer;
 | |
|       setTimeout(() => {
 | |
|         transfer.addToRight();
 | |
|         setTimeout(() => {
 | |
|           const targetItems = [].slice.call(vm.$el.querySelectorAll('.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'));
 | |
|           expect(targetItems.map(item => item.innerText)).to.deep.equal(['备选项 1', '备选项 4', '备选项 2', '备选项 3']);
 | |
|           done();
 | |
|         }, 50);
 | |
|       }, 50);
 | |
|     });
 | |
| 
 | |
|     it('unshift', done => {
 | |
|       vm = createTransfer('v-model="value" :left-default-checked="[2, 3]" target-order="unshift"', {
 | |
|         data() {
 | |
|           return {
 | |
|             value: [1, 4]
 | |
|           };
 | |
|         }
 | |
|       });
 | |
|       const transfer = vm.$refs.transfer;
 | |
|       setTimeout(() => {
 | |
|         transfer.addToRight();
 | |
|         setTimeout(() => {
 | |
|           const targetItems = [].slice.call(vm.$el.querySelectorAll('.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'));
 | |
|           expect(targetItems.map(item => item.innerText)).to.deep.equal(['备选项 2', '备选项 3', '备选项 1', '备选项 4']);
 | |
|           done();
 | |
|         }, 50);
 | |
|       }, 50);
 | |
|     });
 | |
|   });
 | |
| });
 |