All files / xstate/test after.test.ts

100% Statements 13/13
100% Branches 0/0
100% Functions 3/3
100% Lines 13/13

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 691x 1x 1x   1x                                             1x 1x 1x               1x               1x                   1x 1x         1x 1x            
import { assert } from 'chai';
import { Machine } from '../src/index';
import { after, cancel, send } from '../src/actions';
 
const lightMachine = Machine({
  id: 'light',
  initial: 'green',
  context: {
    canTurnGreen: true
  },
  states: {
    green: {
      after: {
        1000: 'yellow'
      }
    },
    yellow: {
      after: {
        1000: [{ target: 'red' }]
      }
    },
    red: {
      after: [{ delay: 1000, target: 'green' }]
    }
  }
});
 
describe('delayed transitions', () => {
  it('should resolve transitions', () => {
    assert.deepEqual(lightMachine.states.green.after, [
      {
        target: 'yellow',
        delay: 1000,
        event: after(1000, 'light.green'),
        actions: []
      }
    ]);
    assert.deepEqual(lightMachine.states.yellow.after, [
      {
        target: 'red',
        delay: 1000,
        event: after(1000, 'light.yellow'),
        actions: []
      }
    ]);
    assert.deepEqual(lightMachine.states.red.after, [
      {
        target: 'green',
        delay: 1000,
        event: after(1000, 'light.red'),
        actions: []
      }
    ]);
  });
 
  it('should transition after delay', () => {
    const nextState = lightMachine.transition(
      lightMachine.initialState,
      after(1000, 'light.green')
    );
 
    assert.deepEqual(nextState.value, 'yellow');
    assert.deepEqual(nextState.actions, [
      cancel(after(1000, 'light.green')),
      send(after(1000, 'light.yellow'), { delay: 1000 })
    ]);
  });
});