running-tools

A collection of tools for runners and their coaches
git clone https://git.ashermorgan.net/running-tools/
Log | Files | Refs | README

commit 4170dda0e2989405f780e3ca75d13f26adfa7a4c
parent b5ad7c6a08b2298e0e13beff4c48c0e7890ca366
Author: Asher Morgan <59518073+ashermorgan@users.noreply.github.com>
Date:   Sat, 17 May 2025 15:05:39 -0700

Simplify description of some workout targets

E.g. "5 km" instead of "5 km @ 5 km".

Diffstat:
Msrc/utils/calculators.js | 12+++++++-----
Mtests/e2e/workout-calculator.spec.js | 14+++++++++++---
2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/utils/calculators.js b/src/utils/calculators.js @@ -151,19 +151,21 @@ export function calculateWorkoutResults(input, target, options, preciseDurations let d2, t2, t3; // Calculate pace - let key = formatNumber(target.splitValue, 0, 2, false) + ' ' - + DISTANCE_UNITS[target.splitUnit].symbol + ' @ '; + let key = formatNumber(target.splitValue, 0, 2, false) + ' ' + + DISTANCE_UNITS[target.splitUnit].symbol; if (target.type === 'distance') { // Convert target distance into meters d2 = convertDistance(target.distanceValue, target.distanceUnit, 'meters'); t2 = raceUtils.predictTime(d1, input.time, d2, options.model, options.riegelExponent); - key += formatNumber(target.distanceValue, 0, 2, false) + ' ' - + DISTANCE_UNITS[target.distanceUnit].symbol; + if (target.distanceValue != target.splitValue || target.distanceUnit != target.splitUnit) { + key += ' @ ' + formatNumber(target.distanceValue, 0, 2, false) + ' ' + + DISTANCE_UNITS[target.distanceUnit].symbol; + } } else { t2 = target.time; d2 = raceUtils.predictDistance(t1, d1, t2, options.model, options.riegelExponent); - key += formatDuration(target.time, 3, 2, false); + key += ' @ ' + formatDuration(target.time, 3, 2, false); } t3 = paceUtils.calculateTime(d2, t2, d3); diff --git a/tests/e2e/workout-calculator.spec.js b/tests/e2e/workout-calculator.spec.js @@ -59,13 +59,19 @@ test('Workout Calculator', async ({ page }) => { await page.getByLabel('Split distance unit').last().selectOption('Meters'); await page.getByLabel('Target duration minutes').last().fill('19'); await page.getByLabel('Target duration seconds').last().fill('0'); + await page.getByRole('button', { name: 'Add distance target' }).click(); + await page.getByLabel('Split distance value').last().fill('2'); + await page.getByLabel('Split distance unit').last().selectOption('Miles'); + await page.getByLabel('Target distance value').last().fill('2'); + await page.getByLabel('Target distance unit').last().selectOption('Miles'); await page.getByRole('button', { name: 'Close' }).click(); // Assert workout splits are correct await expect(page.getByRole('row').nth(1)).toHaveText('401 m @ 2 mi' + '1:18.49'); await expect(page.getByRole('row').nth(2)).toHaveText('600 m @ 19:00' + '2:05.14'); await expect(page.getByRole('row').nth(4)).toHaveText('1 mi @ 10 km' + '6:00.90'); - await expect(page.getByRole('row')).toHaveCount(7); + await expect(page.getByRole('row').nth(7)).toHaveText('2 mi' + '10:30.00'); + await expect(page.getByRole('row')).toHaveCount(8); // Create custom target set await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); @@ -109,7 +115,8 @@ test('Workout Calculator', async ({ page }) => { await expect(page.getByRole('row').nth(1)).toHaveText('401 m @ 2 mi' + '1:18.49'); await expect(page.getByRole('row').nth(2)).toHaveText('600 m @ 19:00' + '2:05.14'); await expect(page.getByRole('row').nth(4)).toHaveText('1 mi @ 10 km' + '6:00.90'); - await expect(page.getByRole('row')).toHaveCount(7); + await expect(page.getByRole('row').nth(7)).toHaveText('2 mi' + '10:30.00'); + await expect(page.getByRole('row')).toHaveCount(8); // Delete custom target set await page.getByLabel('Selected target set').selectOption('Workout Target Set #2'); @@ -124,7 +131,8 @@ test('Workout Calculator', async ({ page }) => { await expect(page.getByRole('row').nth(1)).toHaveText('401 m @ 2 mi' + '1:18.49'); await expect(page.getByRole('row').nth(2)).toHaveText('600 m @ 19:00' + '2:05.14'); await expect(page.getByRole('row').nth(4)).toHaveText('1 mi @ 10 km' + '6:00.90'); - await expect(page.getByRole('row')).toHaveCount(7); + await expect(page.getByRole('row').nth(7)).toHaveText('2 mi' + '10:30.00'); + await expect(page.getByRole('row')).toHaveCount(8); // Revert target set await page.getByRole('button', { name: 'Edit target set' }).click();