All files / src/validation galacticInputValidation.spec.ts

100% Statements 62/62
100% Branches 17/17
100% Functions 0/0
100% Lines 62/62

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 681x   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 1x 1x  
import { describe, expect, test } from 'vitest';
 
import { GalacticInputValidator, GalacticCodeInputValidator, galacticCodePattern } from './galacticInputValidation';
import type { GlyphInput } from '@/types/glyphTypes';
 
describe('Galactic Input Validation', () => {
  describe('general input validation', () => {
    test('nothing provided is invalid', () => {
      const inputProps: GlyphInput = {};
      expect(GalacticInputValidator(inputProps).isValid).toBeFalsy();
    });
  });
 
  describe('galactic code validation', () => {
    test('null code is not valid', () => {
      const code: any = null;
      expect(GalacticCodeInputValidator(code).isValid).toBeFalsy();
    });
    test('empty string code is not valid', () => {
      const code = '';
      expect(GalacticCodeInputValidator(code).isValid).toBeFalsy();
    });
    test('too short code is not valid', () => {
      const code = '1234:';
      expect(GalacticCodeInputValidator(code).isValid).toBeFalsy();
    });
    test('invalid in the middle length code is not valid', () => {
      const code = '1234:1234:1234:14';
      expect(GalacticCodeInputValidator(code).isValid).toBeFalsy();
    });
    test('too long code is not valid', () => {
      const code = '1234:1234:1234:1234:0000';
      expect(GalacticCodeInputValidator(code).isValid).toBeFalsy();
    });
    test('contains valid characters', () => {
      const code = '1234:ABCD:1234:CDEF';
      expect(GalacticCodeInputValidator(code).isValid).toBeTruthy();
    });
    test('contains invalid characters', () => {
      const code = '1234:test:1234:fred';
      expect(GalacticCodeInputValidator(code).isValid).toBeFalsy();
    });
  });
 
  describe('galactic code pattern validation', () => {
    test('contains valid characters, semicolons', () => {
      const code = '1234:1234:1234:1234';
      expect(galacticCodePattern(code).isValid).toBeTruthy();
    });
    test('contains valid characters, no semicolons', () => {
      const code = '1234123412341234';
      expect(galacticCodePattern(code).isValid).toBeTruthy();
    });
    test('short coords contains invalid semicolon position', () => {
      const code = '123412341234:234';
      expect(galacticCodePattern(code).isValid).toBeFalsy();
    });
    test('contains invalid semicolon position', () => {
      const code = '12345:234:1234:1234';
      expect(galacticCodePattern(code).isValid).toBeFalsy();
    });
    test('contains missing semicolon position', () => {
      const code = '123451234:1234:1234';
      expect(galacticCodePattern(code).isValid).toBeFalsy();
    });
  });
});