import { mount } from '@vue/test-utils'
import Vue from 'vue'
import Modal from '..'

const ModalTester = {
  props: ['footer', 'visible'],
  methods: {
    getContainer () {
      return this.$refs.container
    },
  },
  render () {
    const modalProps = {
      props: {
        ...this.$props,
        getContainer: this.getContainer,
      },
    }
    return (
      <div>
        <div ref='container' />
        <Modal
          {...modalProps}
        >
          Here is content of Modal
        </Modal>
      </div>
    )
  },
}

describe('Modal', () => {
  it('render correctly', (done) => {
    const wrapper = mount(
      {
        render () {
          return <ModalTester visible />
        },
      }
    )
    expect(wrapper.html()).toMatchSnapshot()
    // https://github.com/vuejs/vue-test-utils/issues/624
    const wrapper1 = mount(ModalTester, {
      sync: false,
    })
    wrapper1.setProps({ visible: true })
    Vue.nextTick(() => {
      expect(wrapper1.html()).toMatchSnapshot()
      done()
    })
  })

  it('render without footer', () => {
    const wrapper = mount(
      {
        render () {
          return <ModalTester visible footer={null} />
        },
      }
    )
    expect(wrapper.html()).toMatchSnapshot()
  })
})