step-sequence-generator
Version:
A step sequence generator for figure skating programs
137 lines (136 loc) • 7.13 kB
JavaScript
;
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');
});
});
});