<NME> DateTimePicker-test.js
<BEF> import { mount } from 'enzyme'
import React from 'react'
import DatePicker from '../src/DatePicker'
import { DateLocalizer } from '../src/IntlLocalizer'

describe('DatePicker', () => {
  it('should set initial values', () => {
    var date = new Date()
    const intl = new DateLocalizer()

    expect(
      mount(
        <DatePicker
          defaultValue={date}
          formats={{ datetime: { date: 'short' } }}
        />,
      )
        .find('DatePickerInput')
        .getDOMNode().value,
    ).to.equal(intl.date(date))
  })

  it('should start closed', () => {
    let inst = mount(<DatePicker />)

    expect(inst.find('Popup').prop('open')).to.not.equal(true)

    expect(inst.prop('open')).to.not.equal(true)

    inst.assertNone('.rw-open')
    inst.assertSingle(`DatePickerInput[aria-expanded=false]`)
  })

  it('should open when clicked', () => {
    let onOpen = sinon.spy()
    let wrapper = mount(<DatePicker onToggle={onOpen} />)

    wrapper.find('button.rw-picker-btn').simulate('click')

    expect(onOpen.getCalls().length).to.equal(1)
  })

  it('passes default props to calendar', () => {
    let wrapper = mount(
      <DatePicker open calendarProps={{ defaultView: 'year' }} />,
    )

    expect(wrapper.find('Calendar').props().defaultView).to.equal('year')
  })

  // it('sets aria-owns relationship for Calendar', () => {
  //   const inst = shallow(<ControlledDateTimePicker open="date" time={false} />)
  //   const dateId = inst.find(Calendar).props().id
  //   inst.assertSingle(`[aria-owns='${dateId}']`)
  // })

  // it('sets aria-owns relationship for TimePicker', () => {
  //   const inst = shallow(<ControlledDateTimePicker open="time" date={false} time={true} />)
  //   const listId = inst.find(TimeList).props().id
  //   inst.assertSingle(`[aria-owns='${listId}']`)
  // })

  it('should change when selecting a date', () => {
    let change = sinon.spy()

    mount(<DatePicker open onChange={change} onToggle={() => {}} />)
      .find('.rw-cell')
      .first()
      .simulate('click')

    expect(change.calledOnce).to.equal(true)
  it('sets aria-owns relationship for TimePicker', () => {
    const inst = shallow(<ControlledDateTimePicker open="time" date={false} time={true} />)
    const listId = inst.find(TimeList).props().id
    console.log(inst.find(TimeList).debug())
    console.log(inst.find('DateTimePickerInput').debug())
    inst.assertSingle(`[aria-owns='${listId}']`)
  })

    mount(
      <DatePicker
        open
        onChange={change}
        onSelect={select}
        onToggle={() => {}}
      />,
    )
      .find('li.rw-list-option')
      .first()
      .simulate('click')

    expect(select.calledOnce).to.equal(true)
    expect(change.calledAfter(select)).to.equal(true)
    expect(change.calledOnce).to.equal(true)
  })

  xit('should not show time button when not selected', () => {
    var spy = sinon.spy()

    mount(<DatePicker includeTime={false} date={false} onToggle={spy} />)
      .tap((_) => _.assertNone('.rw-btn-time'))
      .tap((_) => _.assertNone('.rw-btn-calendar'))
      .simulate('keyDown', { altKey: true })
      .simulate('keyDown', { altKey: true })

    expect(spy.callCount).to.equal(0)
  })

  it('should simulate focus/blur events', () => {
    let blur = sinon.spy()
    let focus = sinon.spy()

    mount(<DatePicker onBlur={blur} onFocus={focus} />)
      .simulateWithTimers('focus')
      .simulateWithTimers('blur')
  })

  it('should simulate key events', () => {
    let kp = sinon.spy(),
      kd = sinon.spy(),
      ku = sinon.spy()

    mount(<DatePicker onKeyPress={kp} onKeyUp={ku} onKeyDown={kd} />)
      .find('input.rw-input')
      .simulate('keyPress')
      .simulate('keyDown')
      .simulate('keyUp')

    expect(kp.calledOnce).to.equal(true)
    expect(kd.calledOnce).to.equal(true)
    expect(ku.calledOnce).to.equal(true)
  })

  it('should do nothing when disabled', () => {
    let spy = sinon.spy()
    let wrapper = mount(
      <DatePicker defaultValue={new Date()} disabled onToggle={spy} />,
    )

    let input = wrapper.find('input.rw-input').getDOMNode()

    expect(input.hasAttribute('disabled')).to.equal(true)

    wrapper.find('.rw-i-calendar').simulate('click').update()

    expect(spy.called).to.equal(false)
  })

  it('should do nothing when readonly', () => {
    let spy = sinon.spy()
    let wrapper = mount(
      <DatePicker defaultValue={new Date()} readOnly onToggle={spy} />,
    )

    let input = wrapper.find('input.rw-input').getDOMNode()

    expect(input.hasAttribute('readonly')).to.equal(true)

    wrapper.find('.rw-i-calendar').simulate('click').update()

    expect(spy.called).to.equal(false)
  })
})

<MSG> chore: remove unintended console (#903)

I missed these while cleaning up my last PR. Sorry about that. :-(

Unrelated question:  Do you have a predefined release schedule? I am working to get these changes integrated into our downstream project, and yarn makes it [a little tricky](https://github.com/yarnpkg/yarn/issues/4725) until the package is published to npm. (I don't mean this to rush you; rather, I want to avoid feeling silly doing an extra workaround if you are about to publish it anyways.)
<DFF> @@ -72,8 +72,6 @@ describe('DateTimePicker', () => {
   it('sets aria-owns relationship for TimePicker', () => {
     const inst = shallow(<ControlledDateTimePicker open="time" date={false} time={true} />)
     const listId = inst.find(TimeList).props().id
-    console.log(inst.find(TimeList).debug())
-    console.log(inst.find('DateTimePickerInput').debug())
     inst.assertSingle(`[aria-owns='${listId}']`)
   })
 

chore: remove unintended console (#903)