import React from 'react';
import { mount } from 'enzyme';
import Form from '..';

describe('Form', () => {
  it('should display two message', () => {
    const rules = [
      {
        pattern: /^\w+$/,
        message: 'Error message 1',
      },
      {
        pattern: /^\w+$/,
        message: 'Error message 2',
      },
    ];
    let myForm;
    const Form1 = Form.create()(({ form }) => {
      myForm = form;
      return (
        <Form>
          <Form.Item label="Account">
            {form.getFieldDecorator('account', { initialValue: '+=-/', rules })(<input />)}
          </Form.Item>
        </Form>
      );
    });

    const wrapper = mount(<Form1 />);
    myForm.validateFields();

    wrapper.update();
    expect(wrapper.render()).toMatchSnapshot();
  });

  it('should display custom message', () => {
    const rules = [
      {
        pattern: /^$/,
        message: (
          <span>
            Account does not exist,{' '}
            <a rel="noopener noreferrer" href="https://www.alipay.com/" target="_blank">
              Forgot account?
            </a>
          </span>
        ),
      },
    ];
    let myForm;
    const Form1 = Form.create()(({ form }) => {
      myForm = form;
      return (
        <Form>
          <Form.Item label="Account">
            {form.getFieldDecorator('account', { initialValue: 'antd', rules })(<input />)}
          </Form.Item>
        </Form>
      );
    });

    const wrapper = mount(<Form1 />);
    myForm.validateFields();

    wrapper.update();
    expect(wrapper.render()).toMatchSnapshot();
  });

  it('support error message with reactNode', () => {
    let myForm;
    const Form1 = Form.create()(({ form }) => {
      myForm = form;
      return (
        <Form>
          <Form.Item label="Account">{form.getFieldDecorator('account')(<input />)}</Form.Item>
        </Form>
      );
    });

    const wrapper = mount(<Form1 />);

    myForm.setFields({
      account: {
        errors: [<div>Error 1</div>, <div>Error 2</div>],
      },
    });

    expect(wrapper.render()).toMatchSnapshot();
  });

  it('should print warning for not generating help and validateStatus automatically', () => {
    const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
    const Form1 = Form.create()(({ form }) => {
      return (
        <Form>
          <Form.Item label="Account">
            {form.getFieldDecorator('account')(<input />)}
            {form.getFieldDecorator('account')(<input />)}
          </Form.Item>
        </Form>
      );
    });

    mount(<Form1 />);
    expect(errorSpy).toHaveBeenCalledWith(
      'Warning: [antd: Form.Item] Cannot generate `validateStatus` and `help` automatically, while there are more than one `getFieldDecorator` in it.',
    );
    errorSpy.mockRestore();
  });

  // https://github.com/ant-design/ant-design/issues/14911
  it('should not print warning for not generating help and validateStatus automatically when help or validateStatus is specified', () => {
    const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
    const Form1 = Form.create()(({ form }) => {
      return (
        <Form>
          <Form.Item label="Account" help="custom help information">
            {form.getFieldDecorator('account')(<input />)}
            {form.getFieldDecorator('account')(<input />)}
          </Form.Item>
        </Form>
      );
    });

    mount(<Form1 />);
    expect(errorSpy).not.toHaveBeenCalled();
    errorSpy.mockRestore();
  });
});

@@ -2405,39 +2405,39 @@
 FieldDecorator('
-account
+field_1
 ')(%3Cinput /%3E)%7D%0A 
@@ -2464,39 +2464,39 @@
 FieldDecorator('
-account
+field_2
 ')(%3Cinput /%3E)%7D%0A 
@@ -3264,39 +3264,39 @@
 FieldDecorator('
-account
+field_1
 ')(%3Cinput /%3E)%7D%0A 
@@ -3323,39 +3323,39 @@
 FieldDecorator('
-account
+field_2
 ')(%3Cinput /%3E)%7D%0A 

update test case