All Downloads are FREE. Search and download functionalities are using the official Maven repository.

generator.client.vue.test.unit.http.AxiosHttp.spec.ts.mustache Maven / Gradle / Ivy

There is a newer version: 1.22.0
Show newest version
import { describe, it, expect } from 'vitest';
import type { AxiosResponse } from 'axios';
import { AxiosHttp } from '@/http/AxiosHttp';
import { dataAxiosResponse, stubAxiosInstance } from './AxiosStub';

interface Payload {
  payload: string;
}

const fakePayload = (): Payload => ({
  payload: 'content',
});

interface Result {
  result: string;
}

const fakeResult = (): Result => ({
  result: 'content',
});

const responseResult = (): AxiosResponse => dataAxiosResponse(fakeResult());

const expectForQuerying = (uri: string, result: AxiosResponse) => {
  expect(result.data).toEqual(fakeResult());
  expect(uri).toBe('/uri');
};

describe('axiosHttp', () => {
  describe('GET', () => {
    it('should get content', async () => {
      const axiosInstance = stubAxiosInstance();
      axiosInstance.get.resolves(responseResult());
      const axiosHttp = new AxiosHttp(axiosInstance);

      const result = await axiosHttp.get('/uri');

      const [uri] = axiosInstance.get.getCall(0).args;
      expect(result.data).toEqual(fakeResult());
      expect(uri).toBe('/uri');
    });

    it('should get content with params', async () => {
      const axiosInstance = stubAxiosInstance();
      axiosInstance.get.resolves(responseResult());
      const axiosHttp = new AxiosHttp(axiosInstance);

      await axiosHttp.get('/uri', { params: { beer: 'chips' } });

      const [, config] = axiosInstance.get.getCall(0).args;
      expect(config.params.beer).toBe('chips');
    });
  });

  describe('PUT', () => {
    it('should only get content', async () => {
      const axiosInstance = stubAxiosInstance();
      axiosInstance.put.resolves(responseResult());
      const axiosHttp = new AxiosHttp(axiosInstance);

      const result = await axiosHttp.put('/uri');

      const [uri] = axiosInstance.put.getCall(0).args;
      expect(result.data).toEqual(fakeResult());
      expect(uri).toBe('/uri');
    });

    it('should send and get content', async () => {
      const axiosInstance = stubAxiosInstance();
      axiosInstance.put.resolves(responseResult());
      const axiosHttp = new AxiosHttp(axiosInstance);

      const result = await axiosHttp.put('/uri', fakePayload());

      const [uri, payload] = axiosInstance.put.getCall(0).args;
      expect(payload).toEqual(fakePayload());
      expectForQuerying(uri, result);
    });
  });

  describe('POST', () => {
    it('should only get content', async () => {
      const axiosInstance = stubAxiosInstance();
      axiosInstance.post.resolves(responseResult());
      const axiosHttp = new AxiosHttp(axiosInstance);

      const result = await axiosHttp.post('/uri');

      const [uri] = axiosInstance.post.getCall(0).args;
      expect(result.data).toEqual(fakeResult());
      expect(uri).toBe('/uri');
    });

    it('should send and get content', async () => {
      const axiosInstance = stubAxiosInstance();
      axiosInstance.post.resolves(responseResult());
      const axiosHttp = new AxiosHttp(axiosInstance);

      const result = await axiosHttp.post('/uri', fakePayload());

      const [uri, payload] = axiosInstance.post.getCall(0).args;
      expect(payload).toEqual(fakePayload());
      expectForQuerying(uri, result);
    });
  });

  describe('DELETE', () => {
    it('should get content', async () => {
      const axiosInstance = stubAxiosInstance();
      axiosInstance.delete.resolves(responseResult());
      const axiosHttp = new AxiosHttp(axiosInstance);

      const result = await axiosHttp.delete('/uri');

      const [uri] = axiosInstance.delete.getCall(0).args;
      expect(result.data).toEqual(fakeResult());
      expect(uri).toBe('/uri');
    });
  });
});




© 2015 - 2024 Weber Informatics LLC | Privacy Policy