UNPKG

step-sequence-generator

Version:

A step sequence generator for figure skating programs

137 lines (136 loc) 7.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const AbstractSequenceGenerator_1 = require("./AbstractSequenceGenerator"); const SequenceGeneratorFactory_1 = require("./SequenceGeneratorFactory"); const filter_stategy_name_enum_1 = require("../../shared/enums/filter-stategy-name.enum"); const movement_enums_1 = require("../../shared/enums/movement-enums"); // const mockMovements = [{}] as Movement[]; const mockChanceRatioMap = new Map([ [movement_enums_1.ExtendedMovementCharacter.STEP, 0], [movement_enums_1.ExtendedMovementCharacter.TURN, 0], [movement_enums_1.ExtendedMovementCharacter.SEQUENCE, 0], [movement_enums_1.ExtendedMovementCharacter.HOP, 0], [movement_enums_1.ExtendedMovementCharacter.GLIDE, 0], [movement_enums_1.ExtendedMovementCharacter.UNKNOWN, 0], [movement_enums_1.ExtendedMovementCharacter.DIFFICULT, 100], ]); const mockMovements = [ { type: movement_enums_1.MovementCharacter.UNKNOWN, isDifficult: false }, { type: movement_enums_1.MovementCharacter.STEP, isDifficult: true }, ]; // @ts-expect-error TS2515 class testGenerator extends AbstractSequenceGenerator_1.AbstractSequenceGenerator { } (0, vitest_1.describe)('AbstractSequenceGenerator', () => { let generator; // eslint-disable-next-line let generatorAny; (0, vitest_1.beforeEach)(() => { generator = SequenceGeneratorFactory_1.SequenceGeneratorFactory.createDefaultGenerator(mockMovements); // eslint-disable-next-line generatorAny = generator; }); (0, vitest_1.describe)('implementation', () => { (0, vitest_1.it)('должен корректно создаваться', () => { (0, vitest_1.expect)(generator).toBeDefined(); (0, vitest_1.expect)(generator).instanceOf(AbstractSequenceGenerator_1.AbstractSequenceGenerator); }); }); (0, vitest_1.describe)('getCoordinates', () => { (0, vitest_1.it)('должен вызывать getNextPosition', () => { const spyGetNextPosition = vitest_1.vi.spyOn(generatorAny.tracker, 'getNextPosition'); generatorAny.getCoordinates({}); (0, vitest_1.expect)(spyGetNextPosition).toHaveBeenCalled(); }); (0, vitest_1.it)('должен возвращать объект с типом ICoordinates', () => { const result = generatorAny.getCoordinates({}); (0, vitest_1.expect)(result).toHaveProperty('vector'); (0, vitest_1.expect)(result).toHaveProperty('start'); (0, vitest_1.expect)(result).toHaveProperty('end'); }); }); (0, vitest_1.describe)('stepSequenceUpdate', () => { (0, vitest_1.it)('должен добавить элемент в stepSequence', () => { generatorAny.stepSequence = []; generatorAny.stepSequenceUpdate({}); const result = generatorAny.stepSequence.length; (0, vitest_1.expect)(result).toEqual(1); }); }); (0, vitest_1.describe)('counterUpdate', () => { (0, vitest_1.it)('должен вызвать counter.update', () => { const spyUpdate = vitest_1.vi.spyOn(generatorAny.counter, 'update'); generatorAny.counterUpdate({}); (0, vitest_1.expect)(spyUpdate).toHaveBeenCalled(); (0, vitest_1.expect)(spyUpdate).toHaveBeenCalledWith({}); }); }); (0, vitest_1.describe)('contextUpdate', () => { (0, vitest_1.it)('должен обновить context.currentStep', () => { generatorAny.context.currentStep = null; generatorAny.contextUpdate({}); const result = generatorAny.context.currentStep; (0, vitest_1.expect)(result).not.toEqual(null); }); }); (0, vitest_1.describe)('update', () => { const funcNameList = ['contextUpdate', 'counterUpdate', 'stepSequenceUpdate']; vitest_1.it.each(funcNameList)('должен вызывать %s', (funcName) => { const spyFunc = vitest_1.vi.spyOn(generatorAny, funcName); const input = {}; generatorAny.update(input); (0, vitest_1.expect)(spyFunc).toHaveBeenCalled(); (0, vitest_1.expect)(spyFunc).toHaveBeenCalledWith(input); }); }); (0, vitest_1.describe)('reset', () => { const funcNameList = [ { utilName: 'counter', funcName: 'reset', }, { utilName: 'context', funcName: 'resetCurrentStep', }, ]; vitest_1.it.each(funcNameList)('должен вызывать %s', ({ utilName, funcName }) => { const spyFunc = vitest_1.vi.spyOn(generatorAny[utilName], funcName); generatorAny.reset(); (0, vitest_1.expect)(spyFunc).toHaveBeenCalled(); }); }); (0, vitest_1.describe)('getCurrentLibrary', () => { (0, vitest_1.it)('должен вызвать filterStrategy.filter', () => { const spyFilter = vitest_1.vi.spyOn(generatorAny.filterStrategy.get(filter_stategy_name_enum_1.FilterStrategyName.DEFAULT), 'filter'); generatorAny.getCurrentLibrary(generatorAny.filterStrategy.get(filter_stategy_name_enum_1.FilterStrategyName.DEFAULT)); (0, vitest_1.expect)(spyFilter).toHaveBeenCalled(); }); }); (0, vitest_1.describe)('chooseMovement', () => { (0, vitest_1.it)('должен вызвать roulette.spinWheel', () => { const spyFilter = vitest_1.vi.spyOn(generatorAny.roulette, 'spinWheel'); generatorAny.chooseMovement(mockMovements, mockChanceRatioMap); (0, vitest_1.expect)(spyFilter).toHaveBeenCalled(); }); (0, vitest_1.it)('должен вернуть объект', () => { const result = generatorAny.chooseMovement(mockMovements, mockChanceRatioMap); (0, vitest_1.expect)(result).toStrictEqual({ type: movement_enums_1.MovementCharacter.STEP, isDifficult: true }); }); }); (0, vitest_1.describe)('generateMovement', () => { const funcNameList = ['getCurrentLibrary', 'chooseMovement', 'getCoordinates']; vitest_1.it.each(funcNameList)('должен вызывать %s', (funcName) => { const spyFunc = vitest_1.vi.spyOn(generatorAny, funcName); const mockDistanceFactor = 1; generatorAny.generateMovement(mockDistanceFactor, generatorAny.filterStrategy.get(filter_stategy_name_enum_1.FilterStrategyName.DEFAULT)); (0, vitest_1.expect)(spyFunc).toHaveBeenCalled(); }); (0, vitest_1.it)('должен вернуть объект со свойство coordinates', () => { const mockDistanceFactor = 1; const result = generatorAny.generateMovement(mockDistanceFactor, generatorAny.filterStrategy.get(filter_stategy_name_enum_1.FilterStrategyName.DEFAULT)); (0, vitest_1.expect)(result).toHaveProperty('coordinates'); }); }); });