/**
 * Shell EVLib
 *
 * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
 */

import {
  ActiveResponse200Json,
  ChargingController,
  GetChargeSessionRetrieveResponse200Json,
  GetChargeSessionRetrieveResponse200JsonStatusEnum,
  InlineResponse202,
  InlineResponse2021,
} from '../src';
import { testClient } from './testClient';
import {
  expectHeadersToMatch,
  expectMatchingWithOptions,
  makeApiCall,
} from './testHelper';

describe('ChargingController', () => {
  let controller : ChargingController;

  beforeAll(() => {
    controller = new ChargingController(testClient);
  });

  it('should Test Start', async () => {
    const requestId = '123e4567-e89b-12d3-a456-426614174000';

    const response = await makeApiCall(
      () => controller.start(requestId, undefined)
    );

    expect(response.statusCode).toBe(200);

    const expectedHeaders = { 'Content-Type': ['application/json', true] };

    expectHeadersToMatch(response.headers, expectedHeaders);

    const expected: InlineResponse202 = {
      requestId: '9d2dee33-7803-485a-a2b1-2c7538e597ee',
      status: GetChargeSessionRetrieveResponse200JsonStatusEnum.SUCCESS,
      data: [
        {
          sessionId: 'c3e332f0-1bb2-4f50-a96b-e075bbb71e68',
        }
      ],
    };

    expect(response.result).not.toBeNull();
    expectMatchingWithOptions(
      expected,
      response.result,
      { allowExtra: true, isOrdered: false, checkValues: false }
    );
  });

  it('should Test Stop', async () => {
    const requestId = '123e4567-e89b-12d3-a456-426614174000';

    const sessionId = 'c3e332f0-1bb2-4f50-a96b-e075bbb71e68';

    const response = await makeApiCall(
      () => controller.stop(requestId, sessionId)
    );

    expect(response.statusCode).toBe(200);

    const expectedHeaders = { 'Content-Type': ['application/json', true] };

    expectHeadersToMatch(response.headers, expectedHeaders);

    const expected: InlineResponse2021 = {
      requestId: '9d2dee33-7803-485a-a2b1-2c7538e597ee',
      status: GetChargeSessionRetrieveResponse200JsonStatusEnum.SUCCESS,
    };

    expect(response.result).not.toBeNull();
    expectMatchingWithOptions(
      expected,
      response.result,
      { allowExtra: true, isOrdered: false, checkValues: false }
    );
  });

  it('should Test GetChargeSessionRetrieve', async () => {
    const requestId = '123e4567-e89b-12d3-a456-426614174000';

    const sessionId = 'c3e332f0-1bb2-4f50-a96b-e075bbb71e68';

    const response = await makeApiCall(
      () => controller.getChargeSessionRetrieve(requestId, sessionId)
    );

    expect(response.statusCode).toBe(200);

    const expectedHeaders = { 'Content-Type': ['application/json', true] };

    expectHeadersToMatch(response.headers, expectedHeaders);

    const expected: GetChargeSessionRetrieveResponse200Json = {
      requestId: '9d2dee33-7803-485a-a2b1-2c7538e597ee',
      status: GetChargeSessionRetrieveResponse200JsonStatusEnum.SUCCESS,
      data: [
        {
          id: '78b5d7a3-bdba-43d7-9851-1c84fcddb782',
          userId: '281482b6-2c9a-4fd1-b3ea-1928edb40ef9',
          emaId: 'NL-TNM-C00122045-K',
          evseId: 'NL*TNM*E02003451*0',
          lastUpdated: '2024-06-19T07:36:57.985998Z',
          startedAt: '2024-06-19T11:20:27Z',
          stoppedAt: '2014-06-19T12:20:27Z',
          sessionState: {
            status: 'Started',
          },
        }
      ],
    };

    expect(response.result).not.toBeNull();
    expectMatchingWithOptions(
      expected,
      response.result,
      { allowExtra: true, isOrdered: false, checkValues: false }
    );
  });

  it('should Test Active', async () => {
    const requestId = '123e4567-e89b-12d3-a456-426614174000';

    const emaId = 'NL-TNM-C0216599X-A';

    const response = await makeApiCall(
      () => controller.active(requestId, emaId)
    );

    expect(response.statusCode).toBe(200);

    const expectedHeaders = { 'Content-Type': ['application/json', true] };

    expectHeadersToMatch(response.headers, expectedHeaders);

    const expected: ActiveResponse200Json = {
      requestId: '9d2dee33-7803-485a-a2b1-2c7538e597ee',
      status: GetChargeSessionRetrieveResponse200JsonStatusEnum.SUCCESS,
      data: [
        {
          id: '78b5d7a3-bdba-43d7-9851-1c84fcddb782',
          userId: '281482b6-2c9a-4fd1-b3ea-1928edb40ef9',
          emaId: 'NL-TNM-C00122045-K',
          evseId: 'NL*TNM*E02003451*0',
          startedAt: '2015-08-19T11:20:27Z',
          stoppedAt: '2015-08-19T11:20:27Z',
          sessionState: {
            status: 'Started',
          },
          lastUpdated: '2024-07-17T07:36:57.985998Z',
        }
      ],
    };

    expect(response.result).not.toBeNull();
    expectMatchingWithOptions(
      expected,
      response.result,
      { allowExtra: true, isOrdered: false, checkValues: false }
    );
  });
});
