import { beforeEach, describe, expect, it, vi } from 'vitest'; import axios from 'axios'; import { ExamAnswer } from '@/shared/model/exam-answer.model'; import ExamAnswerService from './exam-answer.service'; const error = { response: { status: null, data: { type: null, }, }, }; const axiosStub = { get: vi.spyOn(axios, 'get'), post: vi.spyOn(axios, 'post'), put: vi.spyOn(axios, 'put'), patch: vi.spyOn(axios, 'patch'), delete: vi.spyOn(axios, 'delete'), }; describe('Service Tests', () => { describe('ExamAnswer Service', () => { let service: ExamAnswerService; let elemDefault; beforeEach(() => { service = new ExamAnswerService(); elemDefault = new ExamAnswer(123, 'AAAAAAA', 'AAAAAAA', 'A', 'AAAAAAA', false, 0); }); describe('Service methods', () => { it('should find an element', async () => { const returnedFromService = { ...elemDefault }; axiosStub.get.mockResolvedValue({ data: returnedFromService }); return service.find(123).then(res => { expect(res).toMatchObject(elemDefault); }); }); it('should not find an element', async () => { axiosStub.get.mockRejectedValue(error); return service .find(123) .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should create a ExamAnswer', async () => { const returnedFromService = { id: 123, ...elemDefault }; const expected = { ...returnedFromService }; axiosStub.post.mockResolvedValue({ data: returnedFromService }); return service.create({}).then(res => { expect(res).toMatchObject(expected); }); }); it('should not create a ExamAnswer', async () => { axiosStub.post.mockRejectedValue(error); return service .create({}) .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should update a ExamAnswer', async () => { const returnedFromService = { questionTextSnapshot: 'BBBBBB', explanationSnapshot: 'BBBBBB', selectedOption: 'BBBBBB', selectedContentSnapshot: 'BBBBBB', correct: true, awardedPoints: 1, ...elemDefault, }; const expected = { ...returnedFromService }; axiosStub.put.mockResolvedValue({ data: returnedFromService }); return service.update(expected).then(res => { expect(res).toMatchObject(expected); }); }); it('should not update a ExamAnswer', async () => { axiosStub.put.mockRejectedValue(error); return service .update({}) .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should partial update a ExamAnswer', async () => { const patchObject = { questionTextSnapshot: 'BBBBBB', explanationSnapshot: 'BBBBBB', ...new ExamAnswer() }; const returnedFromService = Object.assign(patchObject, elemDefault); const expected = { ...returnedFromService }; axiosStub.patch.mockResolvedValue({ data: returnedFromService }); return service.partialUpdate(patchObject).then(res => { expect(res).toMatchObject(expected); }); }); it('should not partial update a ExamAnswer', async () => { axiosStub.patch.mockRejectedValue(error); return service .partialUpdate({}) .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should return a list of ExamAnswer', async () => { const returnedFromService = { questionTextSnapshot: 'BBBBBB', explanationSnapshot: 'BBBBBB', selectedOption: 'BBBBBB', selectedContentSnapshot: 'BBBBBB', correct: true, awardedPoints: 1, ...elemDefault, }; const expected = { ...returnedFromService }; axiosStub.get.mockResolvedValue([returnedFromService]); return service.retrieve().then(res => { expect(res).toContainEqual(expected); }); }); it('should not return a list of ExamAnswer', async () => { axiosStub.get.mockRejectedValue(error); return service .retrieve() .then() .catch(err => { expect(err).toMatchObject(error); }); }); it('should delete a ExamAnswer', async () => { axiosStub.delete.mockResolvedValue({ ok: true }); return service.delete(123).then(res => { expect(res.ok).toBeTruthy(); }); }); it('should not delete a ExamAnswer', async () => { axiosStub.delete.mockRejectedValue(error); return service .delete(123) .then() .catch(err => { expect(err).toMatchObject(error); }); }); }); }); });