@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
73 lines (72 loc) • 3.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const creator_1 = require("../creators/creator");
const data_ascent_1 = require("../data/data.ascent");
const data_descent_1 = require("../data/data.descent");
const data_distance_1 = require("../data/data.distance");
const data_grade_avg_1 = require("../data/data.grade-avg");
const data_grade_max_1 = require("../data/data.grade-max");
const data_grade_min_1 = require("../data/data.grade-min");
const route_1 = require("./route");
const route_file_1 = require("./route-file");
const route_file_utilities_1 = require("./route-file.utilities");
describe('RouteFileUtilities', () => {
const creator = new creator_1.Creator('test');
function createRoute(stats) {
const route = new route_1.Route(creator);
if (stats.distance !== undefined) {
route.addStat(new data_distance_1.DataDistance(stats.distance));
}
if (stats.ascent !== undefined) {
route.addStat(new data_ascent_1.DataAscent(stats.ascent));
}
if (stats.descent !== undefined) {
route.addStat(new data_descent_1.DataDescent(stats.descent));
}
if (stats.minGrade !== undefined) {
route.addStat(new data_grade_min_1.DataGradeMin(stats.minGrade));
}
if (stats.maxGrade !== undefined) {
route.addStat(new data_grade_max_1.DataGradeMax(stats.maxGrade));
}
if (stats.avgGrade !== undefined) {
route.addStat(new data_grade_avg_1.DataGradeAvg(stats.avgGrade));
}
return route;
}
it('copies child route stats for single-route files', () => {
const route = createRoute({
distance: 1000,
ascent: 25,
descent: 10,
minGrade: -4,
maxGrade: 12,
avgGrade: 3
});
const routeFile = new route_file_1.RouteFile('single', undefined, creator, [route]);
route_file_utilities_1.RouteFileUtilities.reGenerateStatsForRouteFile(routeFile);
expect(routeFile.getStat(data_distance_1.DataDistance.type)).toBe(route.getStat(data_distance_1.DataDistance.type));
expect(routeFile.getStat(data_grade_avg_1.DataGradeAvg.type)).toBe(route.getStat(data_grade_avg_1.DataGradeAvg.type));
});
it('aggregates stats across multi-route files', () => {
const routeFile = new route_file_1.RouteFile('multi', undefined, creator, [
createRoute({ distance: 1000, ascent: 10, descent: 15, minGrade: -8, maxGrade: 12, avgGrade: 4 }),
createRoute({ distance: 3000, ascent: 20, descent: 25, minGrade: -12, maxGrade: 18, avgGrade: 8 })
]);
route_file_utilities_1.RouteFileUtilities.reGenerateStatsForRouteFile(routeFile);
expect(routeFile.getStat(data_distance_1.DataDistance.type).getValue()).toBe(4000);
expect(routeFile.getStat(data_ascent_1.DataAscent.type).getValue()).toBe(30);
expect(routeFile.getStat(data_descent_1.DataDescent.type).getValue()).toBe(40);
expect(routeFile.getStat(data_grade_min_1.DataGradeMin.type).getValue()).toBe(-12);
expect(routeFile.getStat(data_grade_max_1.DataGradeMax.type).getValue()).toBe(18);
expect(routeFile.getStat(data_grade_avg_1.DataGradeAvg.type).getValue()).toBe(7);
});
it('falls back to simple average grade when route distances are missing', () => {
const routeFile = new route_file_1.RouteFile('multi', undefined, creator, [
createRoute({ avgGrade: 4 }),
createRoute({ distance: 3000, avgGrade: 8 })
]);
route_file_utilities_1.RouteFileUtilities.reGenerateStatsForRouteFile(routeFile);
expect(routeFile.getStat(data_grade_avg_1.DataGradeAvg.type).getValue()).toBe(6);
});
});