import { createTest, createVue, destroyVM } from '../util';
import TimeSelect from 'packages/time-select';
import Vue from 'vue';
describe('TimeSelect', () => {
  let vm;
  afterEach(() => {
    destroyVM(vm);
  });
  it('should render correct contents', done => {
    vm = createTest(TimeSelect, {
      pickerOptions: {
        start: '08:30',
        step: '00:15',
        end: '18:30'
      },
      placeholder: 'test'
    }, true);
    const input = vm.$el.querySelector('input');
    input.focus();
    input.blur();
    Vue.nextTick(_ => {
      expect(vm.picker.start).to.equal('08:30');
      expect(vm.picker.end).to.equal('18:30');
      expect(vm.picker.step).to.equal('00:15');
      expect(vm.$el.querySelector('input').getAttribute('placeholder')).to.equal('test');
      done();
    });
  });
  it('select time', done => {
    vm = createVue({
      template: `
        
          
          
        
      `,
      data() {
        return {
          value: ''
        };
      }
    }, true);
    const input = vm.$el.querySelector('input');
    input.focus();
    input.blur();
    Vue.nextTick(_ => {
      const items = vm.$refs.compo.picker.$el.querySelectorAll('.time-select-item');
      const target = items[4];
      const time = target.textContent;
      target.click();
      Vue.nextTick(_ => {
        expect(vm.value).to.equal(time);
        done();
      });
    });
  });
  it('set default value', done => {
    vm = createTest(TimeSelect, {
      value: '14:30'
    }, true);
    const input = vm.$el.querySelector('input');
    input.focus();
    input.blur();
    setTimeout(_ => {
      expect(input.value).to.equal('14:30');
      expect(vm.picker.$el.querySelector('.selected')).to.be.ok;
      expect(vm.picker.$el.querySelector('.selected').textContent).to.equal('14:30');
      done();
    }, 50);
  });
  it('set minTime', done => {
    vm = createVue(`
      
      
    `, true);
    const input = vm.$el.querySelector('input');
    const picker = vm.$refs.picker;
    input.focus();
    input.blur();
    setTimeout(_ => {
      const elms = picker.picker.$el.querySelectorAll('.disabled');
      const elm = elms[elms.length - 1];
      expect(elm.textContent).to.equal('14:30');
      done();
    }, 50);
  });
  it('minTime < value', done => {
    vm = createVue({
      template: `
        
        
      `,
      data() {
        return { value: '09:30' };
      }
    }, true);
    const input = vm.$el.querySelector('input');
    const picker = vm.$refs.picker;
    input.focus();
    input.blur();
    setTimeout(_ => {
      vm.value = '10:30';
      setTimeout(_ => {
        expect(picker.picker.value).to.equal('10:30');
        done();
      }, 50);
    }, 50);
  });
  it('set maxTime', done => {
    vm = createVue(`
      
      
    `, true);
    const input = vm.$el.querySelector('input');
    const picker = vm.$refs.picker;
    input.focus();
    input.blur();
    setTimeout(_ => {
      const elm = picker.picker.$el.querySelector('.disabled');
      expect(elm.textContent).to.equal('14:30');
      done();
    }, 50);
  });
  it('maxTime > value', done => {
    vm = createVue({
      template: `
        
        
      `,
      data() {
        return { value: '09:30' };
      }
    }, true);
    const input = vm.$el.querySelector('input');
    const picker = vm.$refs.picker;
    input.focus();
    input.blur();
    setTimeout(_ => {
      vm.value = '10:30';
      setTimeout(_ => {
        expect(picker.picker.value).to.equal('10:30');
        done();
      }, 50);
    }, 50);
  });
  it('event focus and blur', done => {
    vm = createVue({
      template: `
        
        
      `
    }, true);
    const spyFocus = sinon.spy();
    const spyBlur = sinon.spy();
    vm.$refs.picker.$on('focus', spyFocus);
    vm.$refs.picker.$on('blur', spyBlur);
    vm.$el.querySelector('input').focus();
    vm.$nextTick(_ => {
      expect(spyFocus.calledOnce).to.be.true;
      vm.$refs.picker.pickerVisible = false;
      vm.$nextTick(_ => {
        expect(spyBlur.calledOnce).to.be.true;
        done();
      });
    });
  });
  it('focus', done => {
    vm = createVue({
      template: `
        
      `
    }, true);
    const spy = sinon.spy();
    vm.$refs.picker.$on('focus', spy);
    vm.$refs.picker.focus();
    vm.$nextTick(_ => {
      expect(spy.calledOnce).to.be.true;
      done();
    });
  });
});