import React from 'react';
import * as reactDom from 'react-dom';
import { ClientApp } from './app';
import setupClient from './client';

jest.mock('react-dom');

jest.mock('react-router-dom');

jest.mock('./app');

const routes = { default: [] };

const mockRootElement = <div />;
document.getElementById = jest.fn().mockReturnValue(mockRootElement);

describe('Client', () => {
  beforeAll(() => {
    window.SPARTACUS_DATA = 'someData';
  });

  afterAll(() => {
    window.SPARTACUS_DATA = null;
  });

  it('should hydrate client once routes are ready', async () => {
    const data = window.SPARTACUS_DATA;
    await setupClient({ data, routes, module });

    expect(reactDom.hydrate).toHaveBeenCalledWith(
      <ClientApp routes={routes} data={window.SPARTACUS_DATA} />,
      mockRootElement,
    );
  });
});
