{{>licenseInfo}}

{{#hasRequest}}
import {{baseName}}Requests from '../../src/api/{{baseName}}Requests';
{{/hasRequest}}
{{#hasEvent}}
import {{baseName}}Events from '../../src/api/{{baseName}}Events';
{{/hasEvent}}

describe('{{classname}}', function () {
{{#hasRequest}}
  let requests;
{{/hasRequest}}
{{#hasEvent}}
  let events;
{{/hasEvent}}
  beforeEach(function () {
{{#hasRequest}}
    let requestHandler;
    requests = new {{baseName}}Requests({
      registerRequestHandler(name, handler) {
        requestHandler = handler;
      },
      sendRequest(name, data) {
        requestHandler && requestHandler(data);
        return Promise.resolve(data);
      },
    });
{{/hasRequest}}
{{#hasEvent}}
    let eventListener;
    events = new {{baseName}}Events({
      registerEventListener(name, listener) {
        eventListener = listener;
      },
      emitEvent(name, data) {
        eventListener && eventListener(data);
      },
    });
{{/hasEvent}}
  });
{{#operations}}
{{#operation}}

  describe('{{operationId}}', () => {
{{^isEvent}}
    it('sends "{{operationId}}" request', () => {
      return requests.{{operationId}}('id').then(response => {
        expect(response).toEqual({data: 'id', timeout: undefined});
      });
    });
{{/isEvent}}
{{#isEvent}}
    it('emits "{{operationId}}" event', () => {
      const listener = jest.fn();
      events.add{{{camelizedNickName}}}EventListener(listener);
      events.emit{{camelizedNickName}}('id');
      expect(listener).toHaveBeenCalledWith({data: 'id'});
    });
{{/isEvent}}
  });
{{/operation}}
{{/operations}}
});
