summaryrefslogtreecommitdiff
path: root/web/static_test
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-08-16 13:25:21 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-08-16 13:25:21 +0200
commit2d18d177f48285eb123e7da8680fc00e7a6fe19c (patch)
tree2b339bcec21c244242f6e26d4444feebdf3b73d0 /web/static_test
parentbe78280c669a04c112afaf1801f22ed2eec7c55a (diff)
refactor(web): split ride detail JavaScript
Diffstat (limited to 'web/static_test')
-rw-r--r--web/static_test/ride-detail-logic.test.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/web/static_test/ride-detail-logic.test.js b/web/static_test/ride-detail-logic.test.js
new file mode 100644
index 0000000..2d9a695
--- /dev/null
+++ b/web/static_test/ride-detail-logic.test.js
@@ -0,0 +1,45 @@
+import test from "node:test";
+import assert from "node:assert/strict";
+import {
+ categoryForScore,
+ climbMetrics,
+ cotacolForClimb,
+ elevationAtDistance,
+ formatDistance,
+ formatElevation,
+ nearestPointIndex,
+} from "../static/ride-detail-logic.js";
+
+const points = [
+ { distanceKm: 0, elevationM: 100 },
+ { distanceKm: 0.12, elevationM: 106 },
+ { distanceKm: 0.2, elevationM: 114 },
+ { distanceKm: 0.25, elevationM: 120 },
+];
+
+test("finds the nearest profile point by distance", () => {
+ assert.equal(nearestPointIndex(points, 0.01), 0);
+ assert.equal(nearestPointIndex(points, 0.15), 1);
+ assert.equal(nearestPointIndex(points, 0.24), 3);
+});
+
+test("interpolates elevation between route points", () => {
+ assert.equal(elevationAtDistance(points, 0, 100), 105);
+ assert.equal(elevationAtDistance(points, 2, 250), 120);
+});
+
+test("calculates climb metrics with the Cotacol score", () => {
+ const metrics = climbMetrics(points, { startIndex: 0, endIndex: 3 });
+
+ assert.equal(metrics.distanceKm, 0.25);
+ assert.equal(metrics.elevationGain, 20);
+ assert.equal(metrics.slope, 8);
+ assert.equal(metrics.cotacol, cotacolForClimb(points, 0, 3));
+ assert.equal(metrics.category, categoryForScore(metrics.score));
+});
+
+test("formats profile labels consistently", () => {
+ assert.equal(formatDistance(2.4), "2.4 km");
+ assert.equal(formatDistance(12.4), "12 km");
+ assert.equal(formatElevation(123.6), "124 m");
+});