import { v4 } from 'uuid';
import { TransactionDto } from '.';
import {
  TransactionType,
  TransactionStatus,
  TaxAmount,
  CardScheme,
} from './types.d';


describe('Transaction DTO test suite', () => {
  it('should be able to create transaction dto object', () => {
    const id = v4();
    const deviceUuid = v4();
    const entityUuid = v4();
    const siteUuid = v4();
    const timestamp = v4();
    const transactionType = TransactionType.PURCHASE;
    const status = TransactionStatus.APPROVED;
    const maskedPan = v4();
    const reference = v4();
    const amount = 1;
    const deviceName = v4();
    const siteName = v4();
    const saleAmount = 1;
    const tipAmount = 1;
    const feeAmount = 1;
    const taxAmounts: TaxAmount[] = [];
    const surchargeAmount = 1;
    const scheme = CardScheme.VISA;
    const depositUuid = v4();
    const depositDate = new Date().toISOString();
    const panToken = v4();
    const par = v4();

    const dto = new TransactionDto(
      id,
      deviceUuid,
      entityUuid,
      siteUuid,
      timestamp,
      transactionType,
      status,
      maskedPan,
      reference,
      amount,
      deviceName,
      siteName,
      saleAmount,
      tipAmount,
      feeAmount,
      taxAmounts,
      surchargeAmount,
      scheme,
      depositUuid,
      depositDate,
      panToken,
      par,
    );
    expect(dto.id).toBe(id);
    expect(dto.deviceUuid).toBe(deviceUuid);
    expect(dto.entityUuid).toBe(entityUuid);
    expect(dto.siteUuid).toBe(siteUuid);
    expect(dto.timestamp).toBe(timestamp);
    expect(dto.transactionType).toBe(transactionType);
    expect(dto.status).toBe(status);
    expect(dto.maskedPan).toBe(maskedPan);
    expect(dto.reference).toBe(reference);
    expect(dto.amount).toBe(amount);
    expect(dto.deviceName).toBe(deviceName);
    expect(dto.siteName).toBe(siteName);
    expect(dto.saleAmount).toBe(saleAmount);
    expect(dto.tipAmount).toBe(tipAmount);
    expect(dto.feeAmount).toBe(feeAmount);
    expect(dto.taxAmounts).toBe(taxAmounts);
    expect(dto.surchargeAmount).toBe(surchargeAmount);
    expect(dto.scheme).toBe(scheme);
    expect(dto.depositUuid).toBe(depositUuid);
    expect(dto.depositDate).toBe(depositDate);
    expect(dto.panToken).toBe(panToken);
    expect(dto.par).toBe(par);
  });
});
