import random, { createRandomHash, getRandomNumber, evaluateRandomNumber, resetRandomNumbers, } from '../random' describe('createRandomHash()', () => { test('generate hash without listItemId', () => { const formulaId = 'formulaId' const objectId = 'objectId' const index = 'index' const hash = createRandomHash(formulaId, objectId, index) expect(hash).toEqual('objectId/formulaId/index') }) test('generate hash with listItemId', () => { const formulaId = 'formulaId' const objectId = 'objectId' const index = 'index' const listItemId = 'listItemId' const hash = createRandomHash(formulaId, objectId, index, listItemId) expect(hash).toEqual('objectId/formulaId/index/listItemId') }) }) describe('evaluateRandomNumber()', () => { const previousState = { numbers: [], } const id = '2b0d42aa-d891-4729-9f01-5d3a517a5e7d' const componentId = 'dfrkaxv4hvgrgffb23qmjmftx' const multiple = 9 const offset = 1 test('action call', () => { expect(evaluateRandomNumber({ id, componentId, multiple, offset })).toEqual( { type: 'EVALUATE_RANDOM_NUMBER', meta: { id: '2b0d42aa-d891-4729-9f01-5d3a517a5e7d', componentId: 'dfrkaxv4hvgrgffb23qmjmftx', multiple: 9, offset: 1, }, } ) }) test('persist state type', () => { // @ts-ignore: Prevent numbers to change from array to object expect(random({ numbers: {} }, {})).toEqual({ numbers: [] }) }) test('evaluate random number by multiple and offset', () => { const { numbers: [{ value }], } = random(previousState, { type: 'EVALUATE_RANDOM_NUMBER', meta: { id, componentId, multiple, offset, }, }) expect(value).toBeGreaterThanOrEqual(offset) expect(value).toBeLessThanOrEqual(multiple + offset) }) test('do not evaluate if no multiple and offset were passed', () => { const state = random(previousState, { type: 'EVALUATE_RANDOM_NUMBER', meta: { id, componentId, }, }) expect(state).toEqual({ numbers: [] }) }) }) describe('resetRandomNumbers()', () => { const previousState = { numbers: [ { id: '2b0d42aa-d891-4729-9f01-5d3a517a5e7d', componentId: 'dfrkaxv4hvgrgffb23qmjmftx', value: 11, }, { id: 'f002ba59-181d-4fa9-9efb-824ee1c2c979', componentId: '31awp9fns418130s7v5dancq5', value: 12, }, ], } test('action call', () => { expect(resetRandomNumbers('dfrkaxv4hvgrgffb23qmjmftx')).toEqual({ type: 'RESET_RANDOM_NUMBERS', meta: { componentId: 'dfrkaxv4hvgrgffb23qmjmftx' }, }) }) test('reset random numbers from a screen', () => { expect( random(previousState, { type: 'RESET_RANDOM_NUMBERS', meta: { componentId: 'dfrkaxv4hvgrgffb23qmjmftx' }, }) ).toEqual({ numbers: [ { id: 'f002ba59-181d-4fa9-9efb-824ee1c2c979', componentId: '31awp9fns418130s7v5dancq5', value: 12, }, ], }) }) test('reset all random numbers', () => { expect( random(previousState, { type: 'RESET_RANDOM_NUMBERS', meta: {}, }) ).toEqual({ numbers: [] }) }) }) describe('getRandomNumber()', () => { const previousState = { numbers: [ { id: '2b0d42aa-d891-4729-9f01-5d3a517a5e7d', componentId: 'dfrkaxv4hvgrgffb23qmjmftx', value: 11, }, ], } test('get valid value if random number exists', () => { const result = getRandomNumber( previousState, '2b0d42aa-d891-4729-9f01-5d3a517a5e7d' ) expect(result).toEqual(11) }) test('get undefined if random number does not exist', () => { const result = getRandomNumber( previousState, 'f002ba59-181d-4fa9-9efb-824ee1c2c979' ) expect(result).toEqual(undefined) }) })