All files / src/converter baseConverter.spec.ts

100% Statements 60/60
100% Branches 17/17
87.5% Functions 7/8
100% Lines 60/60

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 701x   1x   1x 1x 1x 1x 1x 1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x   1x 1x 1x 1x   1x 1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x   1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import { describe, expect, test, vi } from 'vitest';
 
import { baseConverter } from './baseConverter';
 
describe('Base Converter', () => {
  describe('calls functions passed in', () => {
    const mockValidator = vi.fn().mockReturnValue({ isValid: true });
    const mockConverter = vi.fn().mockReturnValue('test');
    const fakeConverter = baseConverter<number, string>({
      input: 123,
      converter: (_) => mockConverter(),
      inputValidator: (_) => mockValidator(),
    });
 
    test('validation runs', () => {
      fakeConverter();
      expect(mockValidator).toHaveBeenCalled();
    });
    test('converter runs', () => {
      fakeConverter();
      expect(mockConverter).toHaveBeenCalled();
    });
  });
 
  describe('if validation fails', () => {
    const mockConverter = vi.fn().mockReturnValue('test');
    const fakeConverter = baseConverter<number, string>({
      input: 123,
      converter: (_) => mockConverter(),
      inputValidator: (_) => vi.fn().mockReturnValue({ isValid: false })(),
    });
 
    test('should not run converter', () => {
      fakeConverter();
      expect(mockConverter).toHaveBeenCalledTimes(0);
    });
 
    test('should return an error result', () => {
      const result = fakeConverter();
      expect(result.isSuccess, result.errorMessage).toBeFalsy();
    });
  });
 
  describe('if conversion fails', () => {
    const mockConverter = vi.fn().mockReturnValue('test');
    const fakeConverter = baseConverter<number, string>({
      input: 123,
      converter: (_) => mockConverter(),
      inputValidator: (_) => vi.fn().mockReturnValue({ isValid: true })(),
    });
 
    test('should run converter', () => {
      fakeConverter();
      expect(mockConverter).toHaveBeenCalledTimes(1);
    });
 
    test('should return an error result', () => {
      const fakeConverterWithBadConversion = baseConverter<number, string>({
        input: 123,
        converter: (_) => {
          throw 'mock';
        },
        inputValidator: (_) => vi.fn().mockReturnValue({ isValid: true })(),
      });
      const result = fakeConverterWithBadConversion();
      expect(result.isSuccess, result.errorMessage).toBeFalsy();
    });
  });
});