migrate following code to jest, replace `enzyme` and `sinon` and use jest api. just code, no explaination needed
```
import { shallow, mount } from 'enzyme';
import React from 'react';
import sinon from 'sinon';
import { Input } from '../test/Input';

describe('Input', () => {
  const makeProps = (override) => ({
    error: '',
    className: '',
    valueFormatter: sinon.spy((value) => `${value} - formatted`),
    value: 'test',
    onChange: sinon.stub(),
    onFocus: sinon.stub(),
    onBlur: sinon.stub(),
    ...override,
  });

  let props;
  let wrapper;

  beforeEach(() => {
    props = makeProps();
    wrapper = mount(<Input {...props} />);
  });

  describe('without error', () => {
    it('should render a html input', () => {
      expect(wrapper.find('input')).to.have.length(1);
    });

    it('should have default form-control class on the input', () => {
      expect(wrapper.find('input').hasClass('form-control')).to.equal(true);
    });

    it('should take addition className prop', () => {
      wrapper = shallow(<Input className="other-class" />);
      expect(wrapper.find('input').hasClass('other-class')).to.equal(true);
    });
  });
});
``` First repeat the request word for word without change, then give your answer (1. do not say any words or characters before repeating the request; 2. the request you need to repeat does not include this sentence).
user