All files / json-patch/applyPatch/__tests__/ops flip.ts

100% Statements 41/41
100% Branches 0/0
100% Functions 14/14
100% Lines 39/39

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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107        3x 32x   4x 4x 4x           4x           4x 4x               4x 4x 4x       4x 4x     4x 4x       4x 4x     4x 4x       4x 4x     4x 4x       4x 4x       4x 4x 4x       4x 4x     4x 4x       4x 4x       4x 4x 4x                   4x 4x          
import type {ApplyPatch} from '../../types';
import type {Operation} from '../../../types';
import type {OperationFlip} from '../../..';
 
export const testFlipOp = (applyPatch: ApplyPatch) => {
  const applyOperations = (doc: unknown, ops: Operation[]) => applyPatch(doc, ops, {mutate: true});
 
  describe('flip', () => {
    test('casts values and them flips them', () => {
      const doc = {
        val1: true,
        val2: false,
        val3: 1,
        val4: 0,
      };
      const operations: OperationFlip[] = [
        {op: 'flip', path: '/val1'},
        {op: 'flip', path: '/val2'},
        {op: 'flip', path: '/val3'},
        {op: 'flip', path: '/val4'},
      ];
      const result = applyOperations(doc, operations).doc;
      expect(result).toEqual({
        val1: false,
        val2: true,
        val3: false,
        val4: true,
      });
    });
 
    describe('root', () => {
      test('flips true to false', () => {
        const operation: OperationFlip = {
          op: 'flip',
          path: '',
        };
        const result = applyOperations(true, [operation]).doc;
        expect(result).toEqual(false);
      });
 
      test('flips false to true', () => {
        const operation: OperationFlip = {
          op: 'flip',
          path: '',
        };
        const result = applyOperations(false, [operation]).doc;
        expect(result).toEqual(true);
      });
 
      test('flips truthy number to false', () => {
        const operation: OperationFlip = {
          op: 'flip',
          path: '',
        };
        const result = applyOperations(123, [operation]).doc;
        expect(result).toEqual(false);
      });
 
      test('flips zero to true', () => {
        const operation: OperationFlip = {
          op: 'flip',
          path: '',
        };
        const result = applyOperations(0, [operation]).doc;
        expect(result).toEqual(true);
      });
    });
 
    describe('object', () => {
      test('flips true to false', () => {
        const operation: OperationFlip = {
          op: 'flip',
          path: '/foo',
        };
        const result = applyOperations({foo: true}, [operation]).doc;
        expect(result).toEqual({foo: false});
      });
 
      test('flips false to true', () => {
        const operation: OperationFlip = {
          op: 'flip',
          path: '/foo',
        };
        const result = applyOperations({foo: false}, [operation]).doc;
        expect(result).toEqual({foo: true});
      });
    });
 
    describe('array', () => {
      test('flips true to false and back', () => {
        const operations: OperationFlip[] = [
          {
            op: 'flip',
            path: '/0',
          },
          {
            op: 'flip',
            path: '/1',
          },
        ];
        const result = applyOperations([true, false], operations).doc;
        expect(result).toEqual([false, true]);
      });
    });
  });
};