import './index';

import { expect } from 'chai';
import fetchMock from 'fetch-mock';
import { $$ } from '../../../infra-sk/modules/dom';

import { chromiumPatchResult } from './test_data';
import { eventPromise, setUpElementUnderTest } from '../../../infra-sk/modules/test_util';
import { PatchSk } from './patch-sk';
import { InputSk } from '../input-sk/input-sk';

describe('patch-sk', () => {
  const newInstance = setUpElementUnderTest<PatchSk>('patch-sk');
  fetchMock.config.overwriteRoutes = false;

  let patchSk: PatchSk;
  beforeEach(() => {
    patchSk = newInstance((ele) => {
      ele.patchType = 'chromium';
    });
  });

  afterEach(() => {
    //  Check all mock fetches called at least once and reset.
    expect(fetchMock.done()).to.be.true;
    fetchMock.reset();
  });

  const simulateClInput = (cl: string, resp: any) => {
    if (cl.length >= 3) {
      fetchMock.postOnce('begin:/_/cl_data', resp);
    }
    const input = $$('input-sk', patchSk) as InputSk;
    input.focus();
    input.value = cl;
    input.dispatchEvent(
      new Event('input', {
        bubbles: true,
        cancelable: true,
      })
    );
  };
  const simulatePatchEdit = (addition: string) => {
    const exTextarea = $$('expandable-textarea-sk', patchSk) as HTMLInputElement;
    ($$('button', exTextarea) as HTMLElement).click();
    exTextarea.value += addition;
    exTextarea.dispatchEvent(
      new Event('input', {
        bubbles: true,
        cancelable: true,
      })
    );
  };

  it('loads a valid cl', async () => {
    const event = eventPromise('cl-description-changed');
    simulateClInput('123', chromiumPatchResult);
    await event;

    expect(patchSk).to.have.property('cl', '123');
    expect(patchSk.clDescription).to.contain('googlesource.com').and.to.contain('Roll Skia');
    expect(patchSk.patch).to.contain('diff --git');
  });

  it('supports patch edit', async () => {
    let event = eventPromise('cl-description-changed');
    simulateClInput('123', chromiumPatchResult);
    await event;
    event = eventPromise('patch-changed');
    simulatePatchEdit('sweet new content in my patch');
    await event;

    expect(patchSk.patch).to.contain('new content');
  });

  it('errors on network error', async () => {
    const event = eventPromise('cl-description-changed');
    simulateClInput('123', 503);
    await event;

    expect(patchSk).to.have.nested.property(
      '_clError.message',
      'Bad network response: Service Unavailable'
    );
    expect(patchSk.clDescription).to.equal('');
  });
});
