@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
74 lines (73 loc) • 4.02 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const event_1 = require("./event");
const activity_1 = require("../activities/activity");
const creator_1 = require("../creators/creator");
const activity_types_1 = require("../activities/activity.types");
const file_type_enum_1 = require("./adapters/file-type.enum");
const data_activity_types_1 = require("../data/data.activity-types");
const data_device_names_1 = require("../data/data.device-names");
describe('Event', () => {
let event;
beforeEach(() => {
event = new event_1.Event('Test', new Date(0), new Date(200), file_type_enum_1.FileType.FIT);
event.description = 'Test';
});
it('should add an activity', () => {
expect(event.getActivities().length).toBe(0);
event.addActivity(new activity_1.Activity(new Date(0), new Date(new Date(0).getTime() + 10), activity_types_1.ActivityTypes.Running, new creator_1.Creator('Test')));
expect(event.getActivities().length).toBe(1);
});
it('should remove an activity', () => {
const activity = new activity_1.Activity(new Date(0), new Date(new Date(0).getTime() + 10), activity_types_1.ActivityTypes.Running, new creator_1.Creator('Test'));
event.addActivity(activity);
expect(event.getActivities().length).toBe(1);
event.removeActivity(activity);
expect(event.getActivities().length).toBe(0);
});
it('should get the first and the last activity', () => {
const activityA = new activity_1.Activity(new Date(20), new Date(30), activity_types_1.ActivityTypes.Running, new creator_1.Creator('Test'));
const activityB = new activity_1.Activity(new Date(0), new Date(10), activity_types_1.ActivityTypes.Running, new creator_1.Creator('Test'));
event.addActivity(activityA);
event.addActivity(activityB);
// Should get them sorted by date
expect(event.getFirstActivity()).toEqual(activityB);
expect(event.getLastActivity()).toEqual(activityA);
});
it('should export correctly to JSON', () => {
const d1 = new Date(0);
const d2 = new Date(new Date(0).getTime() + 200);
const activity = new activity_1.Activity(d1, d2, activity_types_1.ActivityTypes.Running, new creator_1.Creator('Test'));
event.addActivity(activity);
event.setID('123');
expect(event.toJSON()).toEqual({
name: 'Test',
description: 'Test',
isMerge: false,
powerCurve: null,
privacy: 'private',
srcFileType: file_type_enum_1.FileType.FIT,
stats: {},
activities: [activity.toJSON()],
startDate: d1.getTime(),
endDate: d2.getTime()
});
});
it('should normalize single activity type aliases when formatting type string', () => {
event.addStat(new data_activity_types_1.DataActivityTypes(['running_trail']));
expect(event.getActivityTypesAsString()).toBe(activity_types_1.ActivityTypes.TrailRunning);
});
it('should preserve unknown single activity type strings when formatting type string', () => {
event.addStat(new data_activity_types_1.DataActivityTypes(['mystery_sport']));
expect(event.getActivityTypesAsString()).toBe('mystery_sport');
});
it('should format device names with multiplicity', () => {
event.addStat(new data_device_names_1.DataDeviceNames(['Edge', 'HRM', 'HRM']));
expect(event.getDeviceNamesAsString()).toBe('Edge, 2x HRM');
});
it('should classify non-merged events with multiple activities as multi-sport', () => {
event.addActivity(new activity_1.Activity(new Date(0), new Date(1000), activity_types_1.ActivityTypes.Running, new creator_1.Creator('Run')));
event.addActivity(new activity_1.Activity(new Date(1000), new Date(2000), activity_types_1.ActivityTypes.Cycling, new creator_1.Creator('Ride')));
expect(event.isMultiSport()).toBe(true);
});
});