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

187 lines (186 loc) 8.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const importer_json_1 = require("./importer.json"); const activity_types_1 = require("../../../../activities/activity.types"); const data_activity_types_1 = require("../../../../data/data.activity-types"); const data_device_names_1 = require("../../../../data/data.device-names"); const data_distance_1 = require("../../../../data/data.distance"); const data_ibi_1 = require("../../../../data/data.ibi"); const data_power_curve_1 = require("../../../../data/data.power-curve"); const data_time_1 = require("../../../../data/data.time"); const file_type_enum_1 = require("../../file-type.enum"); const privacy_class_interface_1 = require("../../../../privacy/privacy.class.interface"); const data_duration_1 = require("../../../../data/data.duration"); const data_power_1 = require("../../../../data/data.power"); const ibi_stream_1 = require("../../../../streams/ibi-stream"); const data_heart_rate_1 = require("../../../../data/data.heart-rate"); describe('EventImporterJSON', () => { it('should hydrate full event JSON including activities and power curves', () => { var _a, _b, _c, _d; const eventCurve = new data_power_curve_1.DataPowerCurve([{ duration: new data_duration_1.DataDuration(1), power: new data_power_1.DataPower(320) }]).toJSON(); const activityCurve = new data_power_curve_1.DataPowerCurve([{ duration: new data_duration_1.DataDuration(5), power: new data_power_1.DataPower(280) }]).toJSON(); const event = importer_json_1.EventImporterJSON.getEventFromJSON({ name: 'json-event', startDate: 0, endDate: 4000, srcFileType: file_type_enum_1.FileType.FIT, description: 'round-trip', isMerge: false, privacy: privacy_class_interface_1.Privacy.Public, powerCurve: eventCurve, stats: { [data_activity_types_1.DataActivityTypes.type]: [activity_types_1.ActivityTypes.Running, activity_types_1.ActivityTypes.Cycling], [data_device_names_1.DataDeviceNames.type]: ['Edge', 'HRM', 'HRM'] }, activities: [ { name: null, startDate: 2000, endDate: 3000, type: activity_types_1.ActivityTypes.Cycling, powerMeter: false, trainer: false, powerCurve: activityCurve, stats: {}, streams: [ { type: data_time_1.DataTime.type, data: [0, 1] }, { type: data_distance_1.DataDistance.type, data: [0, 10] }, { type: data_ibi_1.DataIBI.type, data: [823, 823] } ], laps: [], creator: { name: 'test', devices: [] }, intensityZones: [], events: [] }, { name: null, startDate: 0, endDate: 1000, type: activity_types_1.ActivityTypes.Running, powerMeter: false, trainer: false, powerCurve: null, stats: {}, streams: [{ type: data_distance_1.DataDistance.type, data: [0, 5] }], laps: [], creator: { name: 'test', devices: [] }, intensityZones: [], events: [] } ] }); expect(event.getActivities()).toHaveLength(2); expect(event.getFirstActivity().startDate.getTime()).toBe(0); expect(event.getLastActivity().startDate.getTime()).toBe(2000); expect(event.isMultiSport()).toBe(true); expect(event.getActivityTypesAsString()).toBe('Running, Cycling'); expect(event.getDeviceNamesAsString()).toBe('Edge, 2x HRM'); expect((_a = event.powerCurve) === null || _a === void 0 ? void 0 : _a.toJSON()).toEqual(eventCurve); expect((_b = event.getStat(data_power_curve_1.DataPowerCurve.type)) === null || _b === void 0 ? void 0 : _b.toJSON()).toEqual(eventCurve); const importedCyclingActivity = event.getLastActivity(); expect(importedCyclingActivity.hasStreamData(data_time_1.DataTime.type)).toBe(false); expect(importedCyclingActivity.getStream(data_ibi_1.DataIBI.type)).toBeInstanceOf(ibi_stream_1.IBIStream); expect(importedCyclingActivity.generateTimeStream([data_ibi_1.DataIBI.type]).getData(true)).toEqual([1, 2]); expect((_c = importedCyclingActivity.powerCurve) === null || _c === void 0 ? void 0 : _c.toJSON()).toEqual(activityCurve); expect((_d = importedCyclingActivity.getStat(data_power_curve_1.DataPowerCurve.type)) === null || _d === void 0 ? void 0 : _d.toJSON()).toEqual(activityCurve); }); it('should keep merged events out of the multi-sport classification after import', () => { const event = importer_json_1.EventImporterJSON.getEventFromJSON({ name: 'merged-event', startDate: 0, endDate: 2000, srcFileType: file_type_enum_1.FileType.FIT, description: null, isMerge: true, privacy: privacy_class_interface_1.Privacy.Private, powerCurve: null, stats: {}, activities: [ { name: null, startDate: 0, endDate: 1000, type: activity_types_1.ActivityTypes.Running, powerMeter: false, trainer: false, powerCurve: null, stats: {}, streams: [{ type: data_distance_1.DataDistance.type, data: [0, 1] }], laps: [], creator: { name: 'test', devices: [] }, intensityZones: [], events: [] }, { name: null, startDate: 1000, endDate: 2000, type: activity_types_1.ActivityTypes.Cycling, powerMeter: false, trainer: false, powerCurve: null, stats: {}, streams: [{ type: data_distance_1.DataDistance.type, data: [0, 2] }], laps: [], creator: { name: 'test', devices: [] }, intensityZones: [], events: [] } ] }); expect(event.isMerge).toBe(true); expect(event.isMultiSport()).toBe(false); }); it('should hydrate event JSON that omits embedded activities for Firestore-style event documents', () => { const event = importer_json_1.EventImporterJSON.getEventFromJSON({ name: 'firestore-event', startDate: 0, endDate: 2000, srcFileType: file_type_enum_1.FileType.FIT, description: null, isMerge: false, privacy: privacy_class_interface_1.Privacy.Private, powerCurve: null, stats: {}, activities: undefined }); expect(event.getActivities()).toEqual([]); expect(event.name).toBe('firestore-event'); }); it('should hydrate all optional intensity zone lower limits', () => { const zones = importer_json_1.EventImporterJSON.getIntensityZonesFromJSON({ type: data_heart_rate_1.DataHeartRate.type, zone1Duration: 1, zone2Duration: 2, zone3Duration: 3, zone4Duration: 4, zone5Duration: 5, zone6Duration: 6, zone7Duration: 7, zone1LowerLimit: 90, zone2LowerLimit: 110, zone3LowerLimit: 130, zone4LowerLimit: 150, zone5LowerLimit: 170, zone6LowerLimit: 190, zone7LowerLimit: 210 }); expect(zones.toJSON()).toEqual({ type: data_heart_rate_1.DataHeartRate.type, zone1Duration: 1, zone2Duration: 2, zone3Duration: 3, zone4Duration: 4, zone5Duration: 5, zone6Duration: 6, zone7Duration: 7, zone1LowerLimit: 90, zone2LowerLimit: 110, zone3LowerLimit: 130, zone4LowerLimit: 150, zone5LowerLimit: 170, zone6LowerLimit: 190, zone7LowerLimit: 210 }); }); });