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

73 lines (72 loc) 3.8 kB
"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); }); });