UNPKG

step-sequence-generator

Version:

A step sequence generator for figure skating programs

303 lines (302 loc) 17.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const StepCounter_1 = require("./StepCounter"); const turn_absolute_name_enum_1 = require("../../shared/enums/turn-absolute-name.enum"); const movement_enums_1 = require("../../shared/enums/movement-enums"); (0, vitest_1.describe)('StepCounter', () => { let counter; (0, vitest_1.beforeEach)(() => { counter = new StepCounter_1.StepCounter(); }); (0, vitest_1.describe)('implementation', () => { (0, vitest_1.it)('должен корректно создаваться', () => { (0, vitest_1.expect)(counter).toBeDefined(); (0, vitest_1.expect)(counter).toBeInstanceOf(StepCounter_1.StepCounter); }); }); // note turns methods (0, vitest_1.describe)('turns methods', () => { (0, vitest_1.describe)('reset должен всем свойствам в counter выставить 0', () => { (0, vitest_1.beforeEach)(() => { counter['turns'] = { difficultAll: 6, difficultOrigin: new Map([ [turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER, 2], [turn_absolute_name_enum_1.TurnAbsoluteName.COUNTER, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.BRACKET, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.TWIZZLE, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.LOOP, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.CHOCTAW, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.UNKNOWN, 1], ]), }; counter['lastStep'] = { name: 'test' }; counter['rotations'] = new Map([ [movement_enums_1.RotationDirectionString.NONE, 10], [movement_enums_1.RotationDirectionString.COUNTERCLOCKWISE, 10], [movement_enums_1.RotationDirectionString.CLOCKWISE, 10], ]); counter['distance'] = 5; counter['threeTurnsBlock'] = { blockAmount: 2, turns: new Map([ [turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.COUNTER, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.BRACKET, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.TWIZZLE, 1], [turn_absolute_name_enum_1.TurnAbsoluteName.LOOP, 1], ]), }; counter.reset(); }); (0, vitest_1.it)('lastStep должен быть null', () => { (0, vitest_1.expect)(counter['lastStep']).toEqual(null); }); (0, vitest_1.it)('turns.difficultAll должен быть 0', () => { (0, vitest_1.expect)(counter['turns'].difficultAll).toEqual(0); }); (0, vitest_1.it)('все turns.difficultOrigin должны быть 0', () => { (0, vitest_1.expect)(counter['turns'].difficultOrigin).toStrictEqual(new Map([ [turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.COUNTER, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.BRACKET, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.TWIZZLE, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.LOOP, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.CHOCTAW, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.UNKNOWN, 0], ])); }); (0, vitest_1.it)('все turns.rotations должны быть 0', () => { (0, vitest_1.expect)(counter['rotations']).toStrictEqual(new Map([ [movement_enums_1.RotationDirectionString.NONE, 0], [movement_enums_1.RotationDirectionString.COUNTERCLOCKWISE, 0], [movement_enums_1.RotationDirectionString.CLOCKWISE, 0], ])); }); (0, vitest_1.it)('distance должен быть 0', () => { (0, vitest_1.expect)(counter['distance']).toEqual(0); }); (0, vitest_1.it)('все свойства в threeTurnsBlock должны быть 0', () => { (0, vitest_1.expect)(counter['threeTurnsBlock']).toStrictEqual({ blockAmount: 0, turns: new Map([ [turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.COUNTER, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.BRACKET, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.TWIZZLE, 0], [turn_absolute_name_enum_1.TurnAbsoluteName.LOOP, 0], ]), }); }); }); (0, vitest_1.describe)('increaseDifficultAll', () => { (0, vitest_1.it)('должен увеличить на единицу turns.difficultAll', () => { counter['turns'].difficultAll = 1; counter['increaseTurnsDifficultAll'](); const expected = 2; const result = counter.difficultTurnsAllAmount; (0, vitest_1.expect)(result).toEqual(expected); }); }); (0, vitest_1.describe)('increaseDifficultOrigin', () => { (0, vitest_1.it)('должен увеличить на единицу одно свойство в turns.difficultOrigin', () => { const turnAbsoluteName = turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER; const currentDifficultOriginAmount = 1; counter['increaseDifficultOrigin'](turnAbsoluteName, currentDifficultOriginAmount); const expected = 2; const result = counter['turns'].difficultOrigin.get(turnAbsoluteName); (0, vitest_1.expect)(result).toEqual(expected); }); }); (0, vitest_1.describe)('getCurrentDifficultOriginAmount', () => { (0, vitest_1.it)('должен вернуть значение свойства в counter.turns', () => { const turnAbsoluteName = turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER; counter['turns'].difficultOrigin.set(turnAbsoluteName, 1); const result = counter['getCurrentDifficultOriginAmount'](turnAbsoluteName); const expected = 1; (0, vitest_1.expect)(result).toEqual(expected); }); }); (0, vitest_1.describe)('conditionIsMovementDifficult', () => { (0, vitest_1.it)('должен вернуть true', () => { const mockMovement = { isDifficult: true, }; const result = counter['conditionIsMovementDifficult'](mockMovement); (0, vitest_1.expect)(result).toBeTruthy(); }); (0, vitest_1.it)('должен вернуть false', () => { const mockMovement = { isDifficult: false }; const result = counter['conditionIsMovementDifficult'](mockMovement); (0, vitest_1.expect)(result).toBeFalsy(); }); }); (0, vitest_1.describe)('conditionToIncreaseDifficultOrigin', () => { (0, vitest_1.it)('должен вернуть true', () => { const turnAbsoluteName = turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER; counter['turns'].difficultOrigin.set(turnAbsoluteName, 1); const result = counter['conditionToIncreaseDifficultOrigin'](turnAbsoluteName); (0, vitest_1.expect)(result).toBeTruthy(); }); (0, vitest_1.it)('должен вернуть false', () => { const turnAbsoluteName = turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER; counter['turns'].difficultOrigin.set(turnAbsoluteName, 2); const result = counter['conditionToIncreaseDifficultOrigin'](turnAbsoluteName); (0, vitest_1.expect)(result).toBeFalsy(); }); }); }); // note rotations methods (0, vitest_1.describe)('rotations methods', () => { (0, vitest_1.describe)('mappingRotationDirection', () => { const propList = [ [movement_enums_1.RotationDirection.COUNTERCLOCKWISE, movement_enums_1.RotationDirectionString.COUNTERCLOCKWISE], [movement_enums_1.RotationDirection.NONE, movement_enums_1.RotationDirectionString.NONE], [movement_enums_1.RotationDirection.CLOCKWISE, movement_enums_1.RotationDirectionString.CLOCKWISE], ]; vitest_1.it.each(propList)('должен преобразовывать %s в %s', (input, expected) => { const result = counter['mappingRotationDirection'](input); (0, vitest_1.expect)(result).toEqual(expected); (0, vitest_1.expect)(Object.values(movement_enums_1.RotationDirectionString)).toContain(result); }); (0, vitest_1.it)('должен выбросить ошибку, если передано неверное значение', () => { const input = 'wrong value'; (0, vitest_1.expect)(() => counter['mappingRotationDirection'](input)).toThrowError('from mappingRotationDirection: Unrecognized RotationDirection'); }); }); (0, vitest_1.describe)('increaseRotations', () => { (0, vitest_1.it)('должен увеличить counter.rotations на 180', () => { const mockCurrentMovement = { rotationDegree: movement_enums_1.RotationDegree.DEGREE_180, rotationDirection: movement_enums_1.RotationDirection.CLOCKWISE, }; counter['increaseRotations'](mockCurrentMovement, 180); const expected = 360; const result = counter['rotations'].get(movement_enums_1.RotationDirectionString.CLOCKWISE); (0, vitest_1.expect)(result).toEqual(expected); }); }); (0, vitest_1.describe)('conditionToIncreaseRotations', () => { (0, vitest_1.it)('должен вернуть true (проверка первого условия)', () => { const mockCurrentMovement = { rotationDegree: movement_enums_1.RotationDegree.DEGREE_360, rotationDirection: movement_enums_1.RotationDirection.COUNTERCLOCKWISE, }; const mockLastStep = { rotationDirection: movement_enums_1.RotationDirection.CLOCKWISE, }; counter['lastStep'] = mockLastStep; const result = counter['conditionToIncreaseRotations'](mockCurrentMovement); (0, vitest_1.expect)(result).toBeTruthy(); }); (0, vitest_1.it)('должен вернуть true (проверка второго условия)', () => { const mockCurrentMovement = { rotationDegree: movement_enums_1.RotationDegree.DEGREE_180, rotationDirection: movement_enums_1.RotationDirection.CLOCKWISE, }; const mockLastStep = { rotationDirection: movement_enums_1.RotationDirection.CLOCKWISE, }; counter['lastStep'] = mockLastStep; const result = counter['conditionToIncreaseRotations'](mockCurrentMovement); (0, vitest_1.expect)(result).toBeTruthy(); }); (0, vitest_1.it)('должен вернуть false (проверка первого условия)', () => { const mockCurrentMovement = { rotationDegree: movement_enums_1.RotationDegree.DEGREES_0, rotationDirection: movement_enums_1.RotationDirection.CLOCKWISE, }; const mockLastStep = { rotationDirection: movement_enums_1.RotationDirection.CLOCKWISE, }; counter['lastStep'] = mockLastStep; const result = counter['conditionToIncreaseRotations'](mockCurrentMovement); (0, vitest_1.expect)(result).toBeFalsy(); }); (0, vitest_1.it)('должен вернуть false (проверка второго условия)', () => { const mockCurrentMovement = { rotationDegree: movement_enums_1.RotationDegree.DEGREE_180, rotationDirection: movement_enums_1.RotationDirection.CLOCKWISE, }; const mockLastStep = { rotationDirection: movement_enums_1.RotationDirection.COUNTERCLOCKWISE, }; counter['lastStep'] = mockLastStep; const result = counter['conditionToIncreaseRotations'](mockCurrentMovement); (0, vitest_1.expect)(result).toBeFalsy(); }); }); }); // note public methods (0, vitest_1.describe)('public methods', () => { (0, vitest_1.describe)('update', () => { let counterAny; (0, vitest_1.beforeEach)(() => { counterAny = counter; }); (0, vitest_1.describe)('должен вызывать', () => { const methodNameList = [ 'conditionIsMovementDifficult', 'conditionToIncreaseDifficultOrigin', 'conditionToIncreaseRotations', 'increaseTurnsDifficultAll', 'increaseDifficultOrigin', 'increaseRotations', 'updateLastStep', ]; const mockMovement = { isDifficult: true, type: movement_enums_1.MovementCharacter.TURN, rotationDirection: movement_enums_1.RotationDirection.CLOCKWISE, rotationDegree: movement_enums_1.RotationDegree.DEGREE_360, absoluteName: turn_absolute_name_enum_1.TurnAbsoluteName.ROCKER, }; vitest_1.it.each(methodNameList)('метод %s', (methodName) => { const spyFn = vitest_1.vi.spyOn(counterAny, methodName); counter.update(mockMovement); (0, vitest_1.expect)(spyFn).toHaveBeenCalled(); }); }); }); (0, vitest_1.describe)('difficultTurnsAllAmount', () => { (0, vitest_1.it)('должен вернуть общее количество используемых сложных поворотов', () => { counter['turns'].difficultAll = 10; const expected = 10; const result = counter.difficultTurnsAllAmount; (0, vitest_1.expect)(result).toBe(expected); }); (0, vitest_1.it)('должен вернуть 0 если сложные повороты не установлены', () => { const expected = 0; const result = counter.difficultTurnsAllAmount; (0, vitest_1.expect)(result).toBe(expected); }); }); // todo написать тест (0, vitest_1.describe)('difficultTurnsOriginAmount', () => { (0, vitest_1.it)('должен вернуть количество сложных поворотов при условии, что каждый тип учитывается не более двух раз', () => { const test = 0; }); }); (0, vitest_1.describe)('rotationAmount', () => { (0, vitest_1.it)('должен вернуть объект с количеством поворотов в каждую сторону в градусах', () => { counter['rotations'].set(movement_enums_1.RotationDirectionString.CLOCKWISE, 360); counter['rotations'].set(movement_enums_1.RotationDirectionString.COUNTERCLOCKWISE, 720); const expected = { clockwise: 360, counterclockwise: 720, }; const result = counter.rotationAmount; (0, vitest_1.expect)(result).toStrictEqual(expected); }); (0, vitest_1.it)('должен вернуть объект с 0 для каждой стороны, если обороты не установлены', () => { const expected = { clockwise: 0, counterclockwise: 0, }; const result = counter.rotationAmount; (0, vitest_1.expect)(result).toStrictEqual(expected); }); }); }); });