import { Map as ImmutableMap } from 'immutable';
import React from 'react';
import { Route, Switch } from 'react-router-dom';

import { normalizeAccount } from 'soapbox/normalizers';

import { render, rootState } from '../../../../jest/test-helpers';
import ChatWidget from '../chat-widget/chat-widget';

const id = '1';
const account = normalizeAccount({
  id,
  acct: 'justin-username',
  display_name: 'Justin L',
  avatar: 'test.jpg',
  chats_onboarded: true,
});

const store = rootState
  .set('me', id)
  .set('accounts', ImmutableMap({
    [id]: account,
  }) as any);

describe('<ChatWidget />', () => {
  describe('when on the /chats endpoint', () => {
    it('hides the widget', async () => {
      const App = () => (
        <Switch>
          <Route path='/chats' exact><span>Chats page <ChatWidget /></span></Route>
          <Route path='/' exact><span data-testid='home'>Homepage <ChatWidget /></span></Route>
        </Switch>
      );

      const screen = render(
        <App />,
        {},
        store,
        { initialEntries: ['/chats'] },
      );

      expect(screen.queryAllByTestId('pane')).toHaveLength(0);
    });
  });

  describe('when the user has not onboarded chats', () => {
    it('hides the widget', async () => {
      const accountWithoutChats = normalizeAccount({
        id,
        acct: 'justin-username',
        display_name: 'Justin L',
        avatar: 'test.jpg',
        chats_onboarded: false,
      });
      const newStore = store.set('accounts', ImmutableMap({
        [id]: accountWithoutChats,
      }) as any);

      const screen = render(
        <ChatWidget />,
        {},
        newStore,
      );

      expect(screen.queryAllByTestId('pane')).toHaveLength(0);
    });
  });

  describe('when the user is onboarded and the endpoint is not /chats', () => {
    it('shows the widget', async () => {
      const App = () => (
        <Switch>
          <Route path='/chats' exact><span>Chats page <ChatWidget /></span></Route>
          <Route path='/' exact><span data-testid='home'>Homepage <ChatWidget /></span></Route>
        </Switch>
      );

      const screen = render(
        <App />,
        {},
        store,
        { initialEntries: ['/'] },
      );

      expect(screen.queryAllByTestId('pane')).toHaveLength(1);
    });
  });
});