import React from 'react';
import { shallow } from 'enzyme';
import Package from './Package';
import Tag from '../Tag';
import { WrapperLink, Description, OverviewItem } from './styles';

/**
 * Generates one month back date from current time
 * @return {object} date object
 */
const dateOneMonthAgo = () => new Date(1544377770747);

describe('<Package /> component', () => {
  test.skip('should load the component', () => {
    const props = {
      name: 'verdaccio',
      version: '1.0.0',
      time: String(dateOneMonthAgo()),
      license: 'MIT',
      description: 'Private NPM repository',
      author: {
        name: 'Sam',
      },
      keywords: ['verdaccio'],
    };

    const wrapper = shallow(
      <Package author={props.author} description={props.description} license={props.license} name={props.name} time={props.time} version={props.version} />
    );

    // integration expectations

    // check link
    expect(wrapper.find(WrapperLink).prop('to')).toEqual(`detail/${props.name}`);

    // check version
    expect(wrapper.find(OverviewItem).prop('children')).toHaveReturnedWith(`v${props.version}`);

    // TODO - REWRITE THE TEST
    // expect(wrapper.find(Author).dive())

    // check description
    expect(wrapper.find(Description).prop('children')).toHaveReturnedWith(props.description);

    // check license
    expect(wrapper.find(OverviewItem).someWhere(n => n.get(0).props.children[1] === props.license)).toBe(true);

    // check keyword
    expect(wrapper.find(Tag).prop('children')).toEqual(props.keywords[0]);
  });

  test.skip('should load the component without author', () => {
    const props = {
      name: 'verdaccio',
      version: '1.0.0',
      time: String(dateOneMonthAgo()),
      license: 'MIT',
      author: {
        name: 'Anonymous',
        email: '',
        avatar: '',
      },
      description: 'Private NPM repository',
    };
    const wrapper = shallow(
      <Package author={props.author} description={props.description} license={props.license} name={props.name} time={props.time} version={props.version} />
    );

    // integration expectations
    expect(wrapper.html()).toMatchSnapshot();
  });
});
