/* tslint:disable max-line-length */ import axios from 'axios'; import sinon from 'sinon'; import dayjs from 'dayjs'; import ChargeService from './charge.service'; import { DATE_FORMAT } from '@/shared/composables/date-format'; import { Charge } from '@/shared/model/charge.model'; const error = { response: { status: null, data: { type: null, }, }, }; const axiosStub = { get: sinon.stub(axios, 'get'), post: sinon.stub(axios, 'post'), put: sinon.stub(axios, 'put'), patch: sinon.stub(axios, 'patch'), delete: sinon.stub(axios, 'delete'), }; describe('Service Tests', () => { describe('Charge Service', () => { let service: ChargeService; let elemDefault; let currentDate: Date; beforeEach(() => { service = new ChargeService(); currentDate = new Date(); elemDefault = new Charge(123, currentDate, 'CHARGE', 0); }); describe('Service methods', () => { it('should find an element', async () => { const returnedFromService = { chargeDate: dayjs(currentDate).format(DATE_FORMAT), ...elemDefault }; axiosStub.get.resolves({ data: returnedFromService }); return service.find(123).then(res => { expect(res).toMatchObject(elemDefault); }); }); it('should not find an element', async () => { axiosStub.get.rejects(error); return service .find(123) .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should create a Charge', async () => { const returnedFromService = { id: 123, chargeDate: dayjs(currentDate).format(DATE_FORMAT), ...elemDefault }; const expected = { chargeDate: currentDate, ...returnedFromService }; axiosStub.post.resolves({ data: returnedFromService }); return service.create({}).then(res => { expect(res).toMatchObject(expected); }); }); it('should not create a Charge', async () => { axiosStub.post.rejects(error); return service .create({}) .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should update a Charge', async () => { const returnedFromService = { chargeDate: dayjs(currentDate).format(DATE_FORMAT), type: 'BBBBBB', amount: 1, ...elemDefault }; const expected = { chargeDate: currentDate, ...returnedFromService }; axiosStub.put.resolves({ data: returnedFromService }); return service.update(expected).then(res => { expect(res).toMatchObject(expected); }); }); it('should not update a Charge', async () => { axiosStub.put.rejects(error); return service .update({}) .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should partial update a Charge', async () => { const patchObject = { amount: 1, ...new Charge() }; const returnedFromService = Object.assign(patchObject, elemDefault); const expected = { chargeDate: currentDate, ...returnedFromService }; axiosStub.patch.resolves({ data: returnedFromService }); return service.partialUpdate(patchObject).then(res => { expect(res).toMatchObject(expected); }); }); it('should not partial update a Charge', async () => { axiosStub.patch.rejects(error); return service .partialUpdate({}) .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should return a list of Charge', async () => { const returnedFromService = { chargeDate: dayjs(currentDate).format(DATE_FORMAT), type: 'BBBBBB', amount: 1, ...elemDefault }; const expected = { chargeDate: currentDate, ...returnedFromService }; axiosStub.get.resolves([returnedFromService]); return service.retrieve().then(res => { expect(res).toContainEqual(expected); }); }); it('should not return a list of Charge', async () => { axiosStub.get.rejects(error); return service .retrieve() .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should delete a Charge', async () => { axiosStub.delete.resolves({ ok: true }); return service.delete(123).then(res => { expect(res.ok).toBeTruthy(); }); }); it('should not delete a Charge', async () => { axiosStub.delete.rejects(error); return service .delete(123) .then() .catch(err => { expect(err).toMatchObject(error); }); }); }); }); });