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

414 lines (413 loc) 27.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const data_speed_1 = require("./data.speed"); const data_pace_1 = require("./data.pace"); const data_effort_pace_1 = require("./data.effort-pace"); const data_effort_pace_avg_1 = require("./data.effort-pace-avg"); const data_effort_pace_min_1 = require("./data.effort-pace-min"); const data_effort_pace_max_1 = require("./data.effort-pace-max"); const data_swim_pace_1 = require("./data.swim-pace"); const data_grade_adjusted_speed_1 = require("./data.grade-adjusted-speed"); const data_grade_adjusted_pace_1 = require("./data.grade-adjusted-pace"); const data_vertical_speed_1 = require("./data.vertical-speed"); const data_store_1 = require("./data.store"); const data_distance_1 = require("./data.distance"); const data_swim_distance_1 = require("./data.swim-distance"); const data_jump_distance_1 = require("./data.jump-distance"); const data_jump_stats_1 = require("./data.jump-stats"); const data_gnss_distance_1 = require("./data.gnss-distance"); const data_gnss_distance_miles_1 = require("./data.gnss-distance-miles"); const data_step_length_1 = require("./data.step-length"); const helpers_1 = require("../events/utilities/helpers"); const user_unit_settings_interface_1 = require("../users/settings/user.unit.settings.interface"); const data_speed_avg_1 = require("./data.speed-avg"); describe('DataStore', () => { const unitDerivedDataTypes = [ data_speed_1.DataSpeedKilometersPerHour.type, data_speed_1.DataSpeedMilesPerHour.type, data_speed_1.DataSpeedFeetPerSecond.type, data_speed_1.DataSpeedFeetPerMinute.type, data_speed_1.DataSpeedMetersPerMinute.type, data_speed_1.DataSpeedKnots.type, data_pace_1.DataPaceMinutesPerMile.type, data_effort_pace_1.DataEffortPaceMinutesPerMile.type, data_effort_pace_avg_1.DataEffortPaceAvgMinutesPerMile.type, data_effort_pace_min_1.DataEffortPaceMinMinutesPerMile.type, data_effort_pace_max_1.DataEffortPaceMaxMinutesPerMile.type, data_swim_pace_1.DataSwimPaceMinutesPer100Yard.type, data_grade_adjusted_speed_1.DataGradeAdjustedSpeedKilometersPerHour.type, data_grade_adjusted_speed_1.DataGradeAdjustedSpeedMilesPerHour.type, data_grade_adjusted_speed_1.DataGradeAdjustedSpeedFeetPerSecond.type, data_grade_adjusted_speed_1.DataGradeAdjustedSpeedFeetPerMinute.type, data_grade_adjusted_speed_1.DataGradeAdjustedSpeedMetersPerMinute.type, data_grade_adjusted_speed_1.DataGradeAdjustedSpeedKnots.type, data_grade_adjusted_pace_1.DataGradeAdjustedPaceMinutesPerMile.type, data_vertical_speed_1.DataVerticalSpeedFeetPerSecond.type, data_vertical_speed_1.DataVerticalSpeedMetersPerMinute.type, data_vertical_speed_1.DataVerticalSpeedFeetPerMinute.type, data_vertical_speed_1.DataVerticalSpeedMetersPerHour.type, data_vertical_speed_1.DataVerticalSpeedFeetPerHour.type, data_vertical_speed_1.DataVerticalSpeedKilometerPerHour.type, data_vertical_speed_1.DataVerticalSpeedMilesPerHour.type, data_jump_stats_1.DataJumpSpeedAvgKilometersPerHour.type, data_jump_stats_1.DataJumpSpeedAvgMilesPerHour.type, data_jump_stats_1.DataJumpSpeedAvgFeetPerSecond.type, data_jump_stats_1.DataJumpSpeedAvgMetersPerMinute.type, data_jump_stats_1.DataJumpSpeedAvgFeetPerMinute.type, data_jump_stats_1.DataJumpSpeedAvgKnots.type, data_jump_stats_1.DataJumpSpeedMinKilometersPerHour.type, data_jump_stats_1.DataJumpSpeedMinMilesPerHour.type, data_jump_stats_1.DataJumpSpeedMinFeetPerSecond.type, data_jump_stats_1.DataJumpSpeedMinMetersPerMinute.type, data_jump_stats_1.DataJumpSpeedMinFeetPerMinute.type, data_jump_stats_1.DataJumpSpeedMinKnots.type, data_jump_stats_1.DataJumpSpeedMaxKilometersPerHour.type, data_jump_stats_1.DataJumpSpeedMaxMilesPerHour.type, data_jump_stats_1.DataJumpSpeedMaxFeetPerSecond.type, data_jump_stats_1.DataJumpSpeedMaxMetersPerMinute.type, data_jump_stats_1.DataJumpSpeedMaxFeetPerMinute.type, data_jump_stats_1.DataJumpSpeedMaxKnots.type, data_distance_1.DataDistanceFeet.type, data_distance_1.DataDistanceMiles.type, data_gnss_distance_miles_1.DataGNSSDistanceMiles.type ]; const _speedDerivedDataTypes = [data_pace_1.DataPace.type, data_grade_adjusted_pace_1.DataGradeAdjustedPace.type, data_swim_pace_1.DataSwimPace.type]; it('should get the correct unitbased datatypes', () => { // @todo here we should think expect(data_store_1.DynamicDataLoader.allUnitDerivedDataTypes.sort()).toEqual(unitDerivedDataTypes.sort()); }); it('keeps GNSS distance blacklisted for stream-generation only', () => { expect(data_store_1.DynamicDataLoader.isBlackListedStream(data_gnss_distance_1.DataGNSSDistance.type)).toBe(true); expect(data_store_1.DynamicDataLoader.isBlackListedStream(data_distance_1.DataDistance.type)).toBe(false); expect(data_store_1.DynamicDataLoader.isBlackListedStream(data_step_length_1.DataStepLength.type)).toBe(false); }); describe('getUnitBasedDataTypesFromDataTypes', () => { it('should include derived types by default', () => { const _types = [data_speed_1.DataSpeedKilometersPerHour.type, data_pace_1.DataPace.type]; const settings = { speedUnits: [data_speed_1.DataSpeedKilometersPerHour.type], swimPaceUnits: [], paceUnits: [data_pace_1.DataPaceMinutesPerMile.type], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], distanceUnits: user_unit_settings_interface_1.DistanceUnits.Kilometers, elevationUnits: [], temperatureUnits: [], weightUnits: [] }; const result = data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataTypes([data_speed_1.DataSpeed.type], settings); expect(result).toContain(data_pace_1.DataPaceMinutesPerMile.type); }); it('should exclude derived types when includeDerivedTypes is false', () => { const settings = { speedUnits: [data_speed_1.DataSpeedKilometersPerHour.type], swimPaceUnits: [], paceUnits: [data_pace_1.DataPaceMinutesPerMile.type], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], distanceUnits: user_unit_settings_interface_1.DistanceUnits.Kilometers, elevationUnits: [], temperatureUnits: [], weightUnits: [] }; const result = data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataTypes([data_speed_1.DataSpeed.type], settings, { includeDerivedTypes: false }); expect(result).toContain(data_speed_1.DataSpeedKilometersPerHour.type); expect(result).not.toContain(data_pace_1.DataPaceMinutesPerMile.type); }); it('should include jump speed unit variant data types for selected speed units', () => { const settings = { speedUnits: [data_speed_1.DataSpeedMilesPerHour.type, data_speed_1.DataSpeedKilometersPerHour.type], swimPaceUnits: [], paceUnits: [], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], distanceUnits: user_unit_settings_interface_1.DistanceUnits.Kilometers, elevationUnits: [], temperatureUnits: [], weightUnits: [] }; const result = data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataTypes([data_jump_stats_1.DataJumpSpeedAvg.type, data_jump_stats_1.DataJumpSpeedMin.type, data_jump_stats_1.DataJumpSpeedMax.type], settings); expect(result).toEqual([ data_jump_stats_1.DataJumpSpeedAvgMilesPerHour.type, data_jump_stats_1.DataJumpSpeedAvgKilometersPerHour.type, data_jump_stats_1.DataJumpSpeedMinMilesPerHour.type, data_jump_stats_1.DataJumpSpeedMinKilometersPerHour.type, data_jump_stats_1.DataJumpSpeedMaxMilesPerHour.type, data_jump_stats_1.DataJumpSpeedMaxKilometersPerHour.type ]); }); it('should include effort pace unit variant data types from paceUnits', () => { const settings = { speedUnits: [], swimPaceUnits: [], paceUnits: [data_pace_1.DataPace.type, data_pace_1.DataPaceMinutesPerMile.type], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], distanceUnits: user_unit_settings_interface_1.DistanceUnits.Kilometers, elevationUnits: [], temperatureUnits: [], weightUnits: [] }; const result = data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataTypes([data_effort_pace_1.DataEffortPace.type, data_effort_pace_avg_1.DataEffortPaceAvg.type, data_effort_pace_min_1.DataEffortPaceMin.type, data_effort_pace_max_1.DataEffortPaceMax.type], settings); expect(result).toEqual([ data_effort_pace_1.DataEffortPace.type, data_effort_pace_1.DataEffortPaceMinutesPerMile.type, data_effort_pace_avg_1.DataEffortPaceAvg.type, data_effort_pace_avg_1.DataEffortPaceAvgMinutesPerMile.type, data_effort_pace_min_1.DataEffortPaceMin.type, data_effort_pace_min_1.DataEffortPaceMinMinutesPerMile.type, data_effort_pace_max_1.DataEffortPaceMax.type, data_effort_pace_max_1.DataEffortPaceMaxMinutesPerMile.type ]); }); }); describe('distanceUnits-based conversion', () => { const milesSettings = { speedUnits: [data_speed_1.DataSpeed.type], swimPaceUnits: [], paceUnits: [], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], distanceUnits: user_unit_settings_interface_1.DistanceUnits.Miles, elevationUnits: [], temperatureUnits: [], weightUnits: [] }; const kilometersSettings = { speedUnits: [data_speed_1.DataSpeedMilesPerHour.type], swimPaceUnits: [], paceUnits: [], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], distanceUnits: user_unit_settings_interface_1.DistanceUnits.Kilometers, elevationUnits: [], temperatureUnits: [], weightUnits: [] }; const missingDistanceSettings = { speedUnits: [data_speed_1.DataSpeedMilesPerHour.type], swimPaceUnits: [], paceUnits: [], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], elevationUnits: [], temperatureUnits: [], weightUnits: [] }; const allDistanceTypes = Object.values(data_store_1.DataStore) .filter((DataClass) => typeof DataClass === 'function') .filter((DataClass) => DataClass === data_distance_1.DataDistance || DataClass.prototype instanceof data_distance_1.DataDistance) .map((DataClass) => DataClass.type) .filter((dataType) => (dataType !== data_distance_1.DataDistanceFeet.type && dataType !== data_distance_1.DataDistanceMiles.type && dataType !== data_gnss_distance_miles_1.DataGNSSDistanceMiles.type)); const getExpectedImperialDistanceType = (dataType) => { if (dataType === data_jump_distance_1.DataJumpDistance.type || dataType === data_jump_stats_1.DataJumpDistanceMin.type || dataType === data_jump_stats_1.DataJumpDistanceMax.type || dataType === data_jump_stats_1.DataJumpDistanceAvg.type) { return data_distance_1.DataDistanceFeet.type; } return dataType === data_gnss_distance_1.DataGNSSDistance.type ? data_gnss_distance_miles_1.DataGNSSDistanceMiles.type : data_distance_1.DataDistanceMiles.type; }; it('has imperial mappings for every DataStore class extending DataDistance (except imperial variants)', () => { expect(allDistanceTypes.length).toBeGreaterThan(0); allDistanceTypes.forEach(dataType => { expect(data_store_1.DynamicDataLoader.dataTypeUnitGroups[dataType]).toBeDefined(); expect(data_store_1.DynamicDataLoader.dataTypeUnitGroups[dataType][getExpectedImperialDistanceType(dataType)]).toBeDefined(); }); }); it('returns imperial unit type for all mapped distance-capable data types in miles mode', () => { allDistanceTypes.forEach(dataType => { expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(dataType, milesSettings)).toEqual([ getExpectedImperialDistanceType(dataType) ]); }); }); it('returns kilometers base type for all mapped distance-capable data types in kilometers mode', () => { allDistanceTypes.forEach(dataType => { expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(dataType, kilometersSettings)).toEqual([dataType]); }); }); it('displays jump distances in feet when distance preference is miles', () => { const converted = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_jump_distance_1.DataJumpDistance(2), milesSettings); expect(converted).toHaveLength(1); expect(converted[0].getType()).toBe(data_distance_1.DataDistanceFeet.type); expect(converted[0].getDisplayValue()).toBe('6.6'); expect(converted[0].getDisplayUnit()).toBe('ft'); }); it('keeps swim distance in meters when distance preference is miles', () => { const converted = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_swim_distance_1.DataSwimDistance(1500), milesSettings); expect(converted).toHaveLength(1); expect(converted[0].getType()).toBe(data_distance_1.DataDistance.type); expect(converted[0].getDisplayType()).toBe(data_distance_1.DataDistance.type); expect(converted[0].getDisplayValue()).toBe('1.500'); expect(converted[0].getDisplayUnit()).toBe('m'); }); it('defaults to kilometers when distanceUnits is missing', () => { expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_distance_1.DataDistance.type, missingDistanceSettings)).toEqual([ data_distance_1.DataDistance.type ]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_jump_stats_1.DataJumpDistanceAvg.type, missingDistanceSettings)).toEqual([data_jump_stats_1.DataJumpDistanceAvg.type]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_gnss_distance_1.DataGNSSDistance.type, missingDistanceSettings)).toEqual([data_gnss_distance_1.DataGNSSDistance.type]); }); it('includes distance-derived types from getUnitBasedDataTypesFromDataTypes based on distanceUnits', () => { expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataTypes([data_distance_1.DataDistance.type, data_jump_stats_1.DataJumpDistanceAvg.type, data_gnss_distance_1.DataGNSSDistance.type, data_step_length_1.DataStepLength.type], milesSettings)).toEqual(expect.arrayContaining([data_distance_1.DataDistanceFeet.type, data_distance_1.DataDistanceMiles.type, data_gnss_distance_miles_1.DataGNSSDistanceMiles.type])); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataTypes([data_distance_1.DataDistance.type, data_jump_stats_1.DataJumpDistanceAvg.type, data_gnss_distance_1.DataGNSSDistance.type, data_step_length_1.DataStepLength.type], kilometersSettings)).toEqual(expect.arrayContaining([ data_distance_1.DataDistance.type, data_jump_stats_1.DataJumpDistanceAvg.type, data_gnss_distance_1.DataGNSSDistance.type, data_step_length_1.DataStepLength.type ])); }); it('returns converted imperial data instances for all mapped distance classes in miles mode', () => { const distanceInstances = allDistanceTypes.map(dataType => data_store_1.DynamicDataLoader.getDataInstanceFromDataType(dataType, 1609.344)); distanceInstances.forEach(distanceInstance => { const expectedImperialType = getExpectedImperialDistanceType(distanceInstance.getType()); const isFeetType = expectedImperialType === data_distance_1.DataDistanceFeet.type; const converted = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(distanceInstance, milesSettings); expect(converted).toHaveLength(1); expect(converted[0].getType()).toBe(expectedImperialType); expect(converted[0].getValue()).toBeCloseTo(isFeetType ? (0, helpers_1.convertMetersToFeet)(1609.344) : (0, helpers_1.convertMetersToMiles)(1609.344), 10); expect(converted[0].getDisplayUnit()).toBe(isFeetType ? 'ft' : 'mi'); }); }); it('returns original kilometers data instances in kilometers mode and missing-distanceUnits fallback', () => { const kilometersInstances = allDistanceTypes.map(dataType => data_store_1.DynamicDataLoader.getDataInstanceFromDataType(dataType, 1609.344)); kilometersInstances.forEach(instance => { const kilometersConverted = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(instance, kilometersSettings); expect(kilometersConverted).toHaveLength(1); expect(kilometersConverted[0].getType()).toBe(instance.getType()); const fallbackConverted = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(instance, missingDistanceSettings); expect(fallbackConverted).toHaveLength(1); expect(fallbackConverted[0].getType()).toBe(instance.getType()); }); }); }); describe('jump speed unit conversion', () => { const mphSettings = { speedUnits: [data_speed_1.DataSpeedMilesPerHour.type], swimPaceUnits: [], paceUnits: [], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], distanceUnits: user_unit_settings_interface_1.DistanceUnits.Kilometers, elevationUnits: [], temperatureUnits: [], weightUnits: [] }; const canonicalSpeedSettings = Object.assign(Object.assign({}, mphSettings), { speedUnits: [data_speed_1.DataSpeed.type] }); it('maps jump speed avg/min/max to speed unit variant types for selected speed units', () => { expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_jump_stats_1.DataJumpSpeedAvg.type, mphSettings)).toEqual([ data_jump_stats_1.DataJumpSpeedAvgMilesPerHour.type ]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_jump_stats_1.DataJumpSpeedMin.type, mphSettings)).toEqual([ data_jump_stats_1.DataJumpSpeedMinMilesPerHour.type ]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_jump_stats_1.DataJumpSpeedMax.type, mphSettings)).toEqual([ data_jump_stats_1.DataJumpSpeedMaxMilesPerHour.type ]); }); it('keeps jump speed canonical types when selected speed unit is canonical m/s', () => { expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_jump_stats_1.DataJumpSpeedAvg.type, canonicalSpeedSettings)).toEqual([ data_jump_stats_1.DataJumpSpeedAvg.type ]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_jump_stats_1.DataJumpSpeedMin.type, canonicalSpeedSettings)).toEqual([ data_jump_stats_1.DataJumpSpeedMin.type ]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_jump_stats_1.DataJumpSpeedMax.type, canonicalSpeedSettings)).toEqual([ data_jump_stats_1.DataJumpSpeedMax.type ]); }); it('returns converted jump speed data instances with selected speed unit display variants', () => { const convertedAvg = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_jump_stats_1.DataJumpSpeedAvg(5), mphSettings); const convertedMin = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_jump_stats_1.DataJumpSpeedMin(5), mphSettings); const convertedMax = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_jump_stats_1.DataJumpSpeedMax(5), mphSettings); expect(convertedAvg).toHaveLength(1); expect(convertedAvg[0].getType()).toBe(data_jump_stats_1.DataJumpSpeedAvgMilesPerHour.type); expect(convertedAvg[0].getValue()).toBeCloseTo((0, helpers_1.convertSpeedToSpeedInMilesPerHour)(5), 10); expect(convertedAvg[0].getDisplayUnit()).toBe('mph'); expect(convertedMin).toHaveLength(1); expect(convertedMin[0].getType()).toBe(data_jump_stats_1.DataJumpSpeedMinMilesPerHour.type); expect(convertedMin[0].getValue()).toBeCloseTo((0, helpers_1.convertSpeedToSpeedInMilesPerHour)(5), 10); expect(convertedMin[0].getDisplayUnit()).toBe('mph'); expect(convertedMax).toHaveLength(1); expect(convertedMax[0].getType()).toBe(data_jump_stats_1.DataJumpSpeedMaxMilesPerHour.type); expect(convertedMax[0].getValue()).toBeCloseTo((0, helpers_1.convertSpeedToSpeedInMilesPerHour)(5), 10); expect(convertedMax[0].getDisplayUnit()).toBe('mph'); }); it('returns jump speed data instances for multiple selected speed units in order', () => { const multiSpeedSettings = Object.assign(Object.assign({}, mphSettings), { speedUnits: [data_speed_1.DataSpeedMilesPerHour.type, data_speed_1.DataSpeedKilometersPerHour.type] }); const convertedAvg = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_jump_stats_1.DataJumpSpeedAvg(5), multiSpeedSettings); expect(convertedAvg).toHaveLength(2); expect(convertedAvg[0].getType()).toBe(data_jump_stats_1.DataJumpSpeedAvgMilesPerHour.type); expect(convertedAvg[1].getType()).toBe(data_jump_stats_1.DataJumpSpeedAvgKilometersPerHour.type); expect(convertedAvg[0].getDisplayUnit()).toBe('mph'); expect(convertedAvg[1].getDisplayUnit()).toBe('km/h'); }); it('keeps jump speed derived variants distinct from regular speed derived variants', () => { const regularSpeedConverted = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_speed_avg_1.DataSpeedAvg(5), mphSettings); const jumpSpeedConverted = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_jump_stats_1.DataJumpSpeedAvg(5), mphSettings); expect(regularSpeedConverted).toHaveLength(1); expect(jumpSpeedConverted).toHaveLength(1); expect(regularSpeedConverted[0].getType()).toBe(data_speed_avg_1.DataSpeedAvgMilesPerHour.type); expect(jumpSpeedConverted[0].getType()).toBe(data_jump_stats_1.DataJumpSpeedAvgMilesPerHour.type); expect(regularSpeedConverted[0].getType()).not.toBe(jumpSpeedConverted[0].getType()); }); it('resolves jump speed unit-derived aliases to canonical unit types', () => { expect(data_store_1.DynamicDataLoader.getDataInstanceFromDataType('Jump Speed Avg in miles per hour', 5).getType()).toBe(data_jump_stats_1.DataJumpSpeedAvgMilesPerHour.type); expect(data_store_1.DynamicDataLoader.getDataInstanceFromDataType('Jump Speed Min in miles per hour', 5).getType()).toBe(data_jump_stats_1.DataJumpSpeedMinMilesPerHour.type); expect(data_store_1.DynamicDataLoader.getDataInstanceFromDataType('Jump Speed Max in miles per hour', 5).getType()).toBe(data_jump_stats_1.DataJumpSpeedMaxMilesPerHour.type); }); }); describe('effort pace unit conversion', () => { const paceSettings = { speedUnits: [], swimPaceUnits: [], paceUnits: [data_pace_1.DataPace.type, data_pace_1.DataPaceMinutesPerMile.type], gradeAdjustedSpeedUnits: [], gradeAdjustedPaceUnits: [], verticalSpeedUnits: [], distanceUnits: user_unit_settings_interface_1.DistanceUnits.Kilometers, elevationUnits: [], temperatureUnits: [], weightUnits: [] }; it('maps effort pace family to pace-based unit variants', () => { expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_effort_pace_1.DataEffortPace.type, paceSettings)).toEqual([ data_effort_pace_1.DataEffortPace.type, data_effort_pace_1.DataEffortPaceMinutesPerMile.type ]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_effort_pace_avg_1.DataEffortPaceAvg.type, paceSettings)).toEqual([ data_effort_pace_avg_1.DataEffortPaceAvg.type, data_effort_pace_avg_1.DataEffortPaceAvgMinutesPerMile.type ]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_effort_pace_min_1.DataEffortPaceMin.type, paceSettings)).toEqual([ data_effort_pace_min_1.DataEffortPaceMin.type, data_effort_pace_min_1.DataEffortPaceMinMinutesPerMile.type ]); expect(data_store_1.DynamicDataLoader.getUnitBasedDataTypesFromDataType(data_effort_pace_max_1.DataEffortPaceMax.type, paceSettings)).toEqual([ data_effort_pace_max_1.DataEffortPaceMax.type, data_effort_pace_max_1.DataEffortPaceMaxMinutesPerMile.type ]); }); it('returns effort pace avg unit-based data instances using paceUnits', () => { const converted = data_store_1.DynamicDataLoader.getUnitBasedDataFromDataInstance(new data_effort_pace_avg_1.DataEffortPaceAvg(300), paceSettings); expect(converted).toHaveLength(2); expect(converted[0].getType()).toBe(data_effort_pace_avg_1.DataEffortPaceAvg.type); expect(converted[1].getType()).toBe(data_effort_pace_avg_1.DataEffortPaceAvgMinutesPerMile.type); expect(converted[0].getDisplayUnit()).toBe('min/km'); expect(converted[1].getDisplayUnit()).toBe('min/m'); }); }); });