@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
JavaScript
"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
});
});
});