UNPKG

@sports-alliance/sports-lib

Version:

A Library to for importing / exporting and processing GPX, TCX, FIT and JSON files from services such as Strava, Movescount, Garmin, Polar etc

93 lines (92 loc) 5.27 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const mockParse = jest.fn(); jest.mock('fit-file-parser', () => ({ __esModule: true, default: jest.fn().mockImplementation(() => ({ parse: mockParse })) })); const activity_parsing_options_1 = require("../../../../activities/activity-parsing-options"); const data_stamina_1 = require("../../../../data/data.stamina"); const importer_fit_1 = require("./importer.fit"); const finiteNumbers = (values) => values.filter((value) => Number.isFinite(value)); const getStatValue = (activity, type) => { var _a; return (_a = activity.getStat(type)) === null || _a === void 0 ? void 0 : _a.getValue(); }; const createGarminStaminaFitObject = () => { const startTime = new Date('2026-05-21T10:00:00.000Z'); const at = (seconds) => new Date(startTime.getTime() + seconds * 1000); return { file_ids: [{ manufacturer: 'garmin' }], events: [], sessions: [ { sport: 'running', start_time: at(0), timestamp: at(4), total_elapsed_time: 4, total_timer_time: 4, total_distance: 40, beginning_potential_stamina: 95, ending_potential_stamina: 66, min_stamina: 34, laps: [ { start_time: at(0), timestamp: at(4), total_elapsed_time: 4, total_timer_time: 4, total_distance: 40, lap_trigger: 'manual', beginning_potential_stamina: 95, ending_potential_stamina: 66, min_stamina: 34 } ] } ], records: [ { timestamp: at(0), distance: 0, speed: 3, stamina: 95, potential_stamina: 95 }, { timestamp: at(1), distance: 10, speed: 3, stamina: 80, potential_stamina: 92 }, { timestamp: at(2), distance: 20, speed: 3, stamina: 34, potential_stamina: 80 }, { timestamp: at(3), distance: 30, speed: 3, stamina: 66, potential_stamina: 66 }, { timestamp: at(4), distance: 40, speed: 3, stamina: 66, potential_stamina: 66 } ] }; }; describe('EventImporterFIT Garmin stamina integration', () => { beforeEach(() => { mockParse.mockReset(); mockParse.mockImplementation((_arrayBuffer, callback) => { callback(null, createGarminStaminaFitObject()); }); }); it('should import Garmin stamina from parsed FIT records and session summaries', () => __awaiter(void 0, void 0, void 0, function* () { var _a, _b, _c; const event = yield importer_fit_1.EventImporterFIT.getFromArrayBuffer(new ArrayBuffer(1), new activity_parsing_options_1.ActivityParsingOptions({ generateUnitStreams: false }), 'garmin-stamina.fit'); const activity = event.getFirstActivity(); const lap = activity.getLaps()[0]; expect(mockParse).toHaveBeenCalledTimes(1); expect(finiteNumbers(activity.getStreamData(data_stamina_1.DataStamina.type))).toEqual([95, 80, 34, 66, 66]); expect(finiteNumbers(activity.getStreamData(data_stamina_1.DataPotentialStamina.type))).toEqual([95, 92, 80, 66, 66]); expect(getStatValue(activity, data_stamina_1.DataBeginningPotentialStamina.type)).toBe(95); expect(getStatValue(activity, data_stamina_1.DataEndingPotentialStamina.type)).toBe(66); expect(getStatValue(activity, data_stamina_1.DataStaminaMin.type)).toBe(34); expect(getStatValue(activity, data_stamina_1.DataStaminaMax.type)).toBe(95); expect(getStatValue(activity, data_stamina_1.DataStaminaAvg.type)).toBeCloseTo(68.2, 10); expect(getStatValue(activity, data_stamina_1.DataPotentialStaminaMin.type)).toBe(66); expect(getStatValue(activity, data_stamina_1.DataPotentialStaminaMax.type)).toBe(95); expect(getStatValue(activity, data_stamina_1.DataPotentialStaminaAvg.type)).toBeCloseTo(79.8, 10); expect((_a = lap.getStat(data_stamina_1.DataBeginningPotentialStamina.type)) === null || _a === void 0 ? void 0 : _a.getValue()).toBe(95); expect((_b = lap.getStat(data_stamina_1.DataEndingPotentialStamina.type)) === null || _b === void 0 ? void 0 : _b.getValue()).toBe(66); expect((_c = lap.getStat(data_stamina_1.DataStaminaMin.type)) === null || _c === void 0 ? void 0 : _c.getValue()).toBe(34); })); });