import Card from './Card.component';
import CardContent from './CardContent.component';
import CardMedia from './CardMedia.component';

describe('<Card>', () => {
  it('Happy: Render Card with props', () => {
    const wrapper = shallow(<Card>Test</Card>);
    expect(wrapper).toHaveLength(1);

    const json = renderJSON(<Card>Test</Card>);
    expect(json.type).toBe('div');
  });

  it('Happy: Render Card with node children', () => {
    const wrapper = shallow(
      <Card title="title">
        <div>Test</div>
      </Card>,
    );

    expect(wrapper).toHaveLength(1);

    const json = renderJSON(
      <Card>
        <div>Test</div>
      </Card>,
    );
    expect(json.type).toBe('div');
  });

  it('Happy: Render Card with notClickable prop', () => {
    const wrapper = shallow(
      <Card notClickable>
        <div>Test</div>
      </Card>,
    );

    expect(wrapper).toHaveLength(1);

    const json = renderJSON(
      <Card>
        <div>Test</div>
      </Card>,
    );
    expect(json.type).toBe('div');
  });

  it('SAD: without props', () => {
    expect(() => shallow(<Card />)).toThrow();
  });
});

describe('Integrate all components <Card>', () => {
  it('Happy: Render Card with props', () => {
    const wrapper = shallow(
      <Card>
        <CardMedia title="title" image="image" alt="alt">
          Test
        </CardMedia>
        <CardContent title="title">
          <div>Test</div>
        </CardContent>
      </Card>,
    );
    expect(wrapper).toHaveLength(1);

    const json = renderJSON(
      <Card>
        <CardMedia title="title" image="image" alt="alt">
          Test
        </CardMedia>
        <CardContent title="title">
          <div>Test</div>
        </CardContent>
      </Card>,
    );
    expect(json.type).toBe('div');
  });
});
