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