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

60 lines (59 loc) 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const activity_1 = require("../activities/activity"); const creator_1 = require("../creators/creator"); const data_distance_1 = require("../data/data.distance"); const activity_types_1 = require("../activities/activity.types"); const data_duration_1 = require("../data/data.duration"); describe('Activity Duration Stream', () => { let activity; beforeEach(() => { // Create a 10-second activity const startDate = new Date('2023-01-01T10:00:00Z'); const endDate = new Date('2023-01-01T10:00:10Z'); const creator = new creator_1.Creator('Test Creator'); activity = new activity_1.Activity(startDate, endDate, activity_types_1.ActivityTypes.Running, creator); }); it('should generate a duration stream based on time stream logic', () => { // Add a distance stream with some data const distanceStream = activity.createStream(data_distance_1.DataDistance.type); // Data at 0s, 5s, 10s distanceStream.getData()[0] = 0; distanceStream.getData()[5] = 50; distanceStream.getData()[10] = 100; activity.addStream(distanceStream); const durationStream = activity.generateDurationStream(); expect(durationStream.type).toBe(data_duration_1.DataDuration.type); const data = durationStream.getData(); // Assuming generateTimeStream fills data where source stream has data expect(data[0]).toBe(0); expect(data[5]).toBe(5); expect(data[10]).toBe(10); // Other indices should be null/undefined as per generateTimeStream logic? // Let's verify what generateTimeStream does. // It uses `getStreamDataByDuration` with filterNull=true. // So it only populates indices where source stream has data. expect(data[1]).toBeFalsy(); expect(data[2]).toBeFalsy(); }); it('should allow specifying stream types to base duration on', () => { // Scenario where we want duration based on HeartRate, not Distance // Although logic reuses generateTimeStream which filters by streamTypes if provided. // But generateTimeStream implementation: /* if (streamTypes.length) { streams = streams.filter(stream => streamTypes.indexOf(stream.type) !== -1); } */ // It unions all provided streams? // "streams.forEach(stream => { ... })" // Yes, it iterates all matching streams and fills the time stream. // Let's create a custom stream const customStream = activity.createStream('Custom'); customStream.getData()[2] = 123; activity.addStream(customStream); const durationStream = activity.generateDurationStream(['Custom']); expect(durationStream.getData()[2]).toBe(2); expect(durationStream.getData()[0]).toBeFalsy(); // Distance stream at 0 should be ignored if we only asked for Custom }); });