import { createVue, triggerEvent, destroyVM } from '../util';
describe('Dropdown', () => {
  let vm;
  afterEach(() => {
    destroyVM(vm);
  });
  it('create', done => {
    vm = createVue({
      template: `
        
          
            下拉菜单
          
          
            黄金糕
            狮子头
            螺蛳粉
            双皮奶
            蚵仔煎
          
        
      `
    }, true);
    let dropdown = vm.$refs.dropdown;
    let dropdownElm = dropdown.$el;
    let triggerElm = dropdownElm.children[0];
    triggerEvent(triggerElm, 'mouseenter');
    setTimeout(_ => {
      expect(dropdown.visible).to.be.true;
      triggerEvent(triggerElm, 'mouseleave');
      setTimeout(_ => {
        expect(dropdown.visible).to.not.true;
        destroyVM(vm);
        done();
      }, 300);
    }, 400);
  });
  it('menu click', done => {
    vm = createVue({
      template: `
        
          
            下拉菜单
          
          
            黄金糕
            狮子头
            螺蛳粉
            双皮奶
            蚵仔煎
          
        
      `
    }, true);
    let dropdown = vm.$refs.dropdown;
    let dropdownElm = dropdown.$el;
    let triggerElm = dropdownElm.children[0];
    let callback = sinon.spy();
    dropdown.$on('command', callback);
    triggerEvent(triggerElm, 'mouseenter');
    setTimeout(_ => {
      vm.$refs.commandC.$el.click();
      setTimeout(_ => {
        expect(dropdown.visible).to.not.true;
        expect(callback.calledWith('c')).to.be.true;
        destroyVM(vm);
        done();
      }, 300);
    }, 300);
  });
  it('trigger', done => {
    vm = createVue({
      template: `
        
          
            下拉菜单trigger click
          
          
            黄金糕
            狮子头
            螺蛳粉
            双皮奶
            蚵仔煎
          
        
      `
    }, true);
    let dropdownElm = vm.$el;
    let dropdown = vm.$refs.dropdown;
    let triggerElm = dropdownElm.children[0];
    triggerEvent(triggerElm, 'mouseenter');
    dropdown.$nextTick(_ => {
      expect(dropdown.visible).to.not.true;
      triggerElm.click();
      dropdown.$nextTick(_ => {
        expect(dropdown.visible).to.be.true;
        destroyVM(vm);
        done();
      });
    });
  });
  it('split button', done => {
    vm = createVue({
      template: `
        
          更多菜单
          
            黄金糕
            狮子头
            螺蛳粉
            双皮奶
            蚵仔煎
          
        
      `
    }, true);
    let dropdown = vm.$refs.dropdown;
    let dropdownElm = dropdown.$el;
    let triggerElm = dropdownElm.querySelector('.el-dropdown__caret-button');
    var callback = sinon.spy();
    dropdown.$on('click', callback);
    dropdownElm.querySelector('.el-button').click();
    setTimeout(_ => {
      expect(callback.called).to.be.true;
    }, 300);
    triggerEvent(triggerElm, 'mouseenter');
    setTimeout(_ => {
      expect(dropdown.visible).to.be.true;
      triggerEvent(triggerElm, 'mouseleave');
      setTimeout(_ => {
        expect(dropdown.visible).to.not.true;
        destroyVM(vm);
        done();
      }, 300);
    }, 300);
  });
  it('hide on click', done => {
    vm = createVue({
      template: `
        
          
            下拉菜单
          
          
            黄金糕
            狮子头
            螺蛳粉
            双皮奶
            蚵仔煎
          
        
      `
    }, true);
    let dropdown = vm.$refs.dropdown;
    let dropdownElm = dropdown.$el;
    let triggerElm = dropdownElm.children[0];
    let callback = sinon.spy();
    dropdown.$on('command', callback);
    triggerEvent(triggerElm, 'mouseenter');
    setTimeout(_ => {
      vm.$refs.commandC.$el.click();
      setTimeout(_ => {
        expect(dropdown.visible).to.true;
        expect(callback.calledWith('c')).to.be.true;
        done();
      }, 300);
    }, 300);
  });
});