running-tools

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

commit 78a17ce7d3cf1ab7439d190a133fc8247d406924
parent 5b8f066f78aa1d3af92041d0a025f4dd6ade39ee
Author: Asher Morgan <59518073+ashermorgan@users.noreply.github.com>
Date:   Fri, 21 Jun 2024 14:02:10 -0700

Automatically start editing new target sets

Diffstat:
Msrc/components/TargetEditor.vue | 4++--
Msrc/components/TargetSetSelector.vue | 13++++++++++++-
Mtests/e2e/cross-calculator.spec.js | 6+++---
Mtests/e2e/pace-calculator.spec.js | 7+++----
Mtests/e2e/race-calculator.spec.js | 7+++----
Mtests/e2e/split-calculator.spec.js | 9++++-----
Mtests/e2e/workout-calculator.spec.js | 7+++----
Mtests/unit/components/TargetEditor.spec.js | 2+-
8 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/src/components/TargetEditor.vue b/src/components/TargetEditor.vue @@ -61,7 +61,7 @@ <tr v-if="internalValue.targets.length === 0" class="empty-message"> <td colspan="2"> - There aren't any targets in this set yet + There aren't any targets in this set yet. </td> </tr> </tbody> @@ -204,7 +204,7 @@ function removeTarget(index) { .target-editor th .icon { margin-left: 0.3em; } -.target-editor tbody td:first-child { +.target-editor tbody td:first-child::not(.empty-message) { display: flex; gap: 0.2em; flex-wrap: wrap; diff --git a/src/components/TargetSetSelector.vue b/src/components/TargetSetSelector.vue @@ -7,7 +7,7 @@ <option value="_new">[ Create New Target Set ]</option> </select> - <button class="icon" title="Edit target set" @click="dialogElement.showModal()"> + <button class="icon" title="Edit target set" @click="editTargetSet()"> <vue-feather type="edit" aria-hidden="true"/> </button> @@ -88,6 +88,16 @@ const internalValue = computed({ }); /** + * Open TargetEditor for the current target set + */ +function editTargetSet() { + if (dialogElement.value && dialogElement.value.showModal) { + // Missing in test environments, but is difficult to mock because it may be referenced on mount + dialogElement.value.showModal(); + } +} + +/** * Create and select a new target */ function newTargetSet() { @@ -97,6 +107,7 @@ function newTargetSet() { targets: [], }; model.value = key; + editTargetSet(); } /** diff --git a/tests/e2e/cross-calculator.spec.js b/tests/e2e/cross-calculator.spec.js @@ -15,11 +15,11 @@ test('Save and update state when navigating between calculators', async ({ page // Create custom target set await page.getByText('Advanced Options').click(); await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); - await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); - await expect(page.getByRole('row')).toHaveCount(2); + await expect(page.getByRole('row').nth(4)).toHaveText('There aren\'t any targets in this set yet.'); + await expect(page.getByRole('row')).toHaveCount(5); // Edit new target set - await page.getByRole('button', { name: 'Edit target set' }).click(); + await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('800m Splits'); await page.getByRole('button', { name: 'Add distance target' }).click(); diff --git a/tests/e2e/pace-calculator.spec.js b/tests/e2e/pace-calculator.spec.js @@ -65,11 +65,11 @@ test('Customize target sets', async ({ page }) => { // Create custom target set await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); - await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); - await expect(page.getByRole('row')).toHaveCount(2); + await expect(page.getByRole('row').nth(4)).toHaveText('There aren\'t any targets in this set yet.'); + await expect(page.getByRole('row')).toHaveCount(5); // Edit new target set - await page.getByRole('button', { name: 'Edit target set' }).click(); + await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('800m Splits'); await page.getByRole('button', { name: 'Add distance target' }).click(); @@ -141,7 +141,6 @@ test('Save settings across page reloads', async ({ page }) => { await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); // Edit new target set - await page.getByRole('button', { name: 'Edit target set' }).click(); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('Less-common Pace Targets'); await page.getByRole('button', { name: 'Add distance target' }).click(); diff --git a/tests/e2e/race-calculator.spec.js b/tests/e2e/race-calculator.spec.js @@ -83,11 +83,11 @@ test('Customize target sets', async ({ page }) => { // Create custom target set await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); - await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); - await expect(page.getByRole('row')).toHaveCount(2); + await expect(page.getByRole('row').nth(4)).toHaveText('There aren\'t any targets in this set yet.'); + await expect(page.getByRole('row')).toHaveCount(5); // Edit new target set - await page.getByRole('button', { name: 'Edit target set' }).click(); + await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('XC Race Targets'); await page.getByRole('button', { name: 'Add distance target' }).click(); @@ -160,7 +160,6 @@ test('Save settings across page reloads', async ({ page }) => { await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); // Edit new target set - await page.getByRole('button', { name: 'Edit target set' }).click(); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('Less-common Race Targets'); await page.getByRole('button', { name: 'Add distance target' }).click(); diff --git a/tests/e2e/split-calculator.spec.js b/tests/e2e/split-calculator.spec.js @@ -88,11 +88,11 @@ test('Customize target sets', async ({ page }) => { // Create custom target set await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); - await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); - await expect(page.getByRole('row')).toHaveCount(2); + await expect(page.getByRole('row').nth(4)).toHaveText('There aren\'t any targets in this set yet.'); + await expect(page.getByRole('row')).toHaveCount(5); - // Edit custom target set - await page.getByRole('button', { name: 'Edit target set' }).click(); + // Edit new target set + await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('800m Splits'); await page.getByRole('button', { name: 'Add distance target' }).click(); @@ -134,7 +134,6 @@ test('Save settings and state across page reloads', async ({ page }) => { await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); // Edit new target set - await page.getByRole('button', { name: 'Edit target set' }).click(); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('800m Splits'); await page.getByRole('button', { name: 'Add distance target' }).click(); diff --git a/tests/e2e/workout-calculator.spec.js b/tests/e2e/workout-calculator.spec.js @@ -74,11 +74,11 @@ test('Customize target sets', async ({ page }) => { // Create custom target set await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); - await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); - await expect(page.getByRole('row')).toHaveCount(2); + await expect(page.getByRole('row').nth(4)).toHaveText('There aren\'t any targets in this set yet.'); + await expect(page.getByRole('row')).toHaveCount(5); // Edit new target set - await page.getByRole('button', { name: 'Edit target set' }).click(); + await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('Workout Target Set #2'); await page.getByRole('button', { name: 'Add distance target' }).click(); @@ -155,7 +155,6 @@ test('Save settings across page reloads', async ({ page }) => { await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); // Edit new target set - await page.getByRole('button', { name: 'Edit target set' }).click(); await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); await page.getByLabel('Target set label').fill('Workout Target Set #2'); await page.getByRole('button', { name: 'Add distance target' }).click(); diff --git a/tests/unit/components/TargetEditor.spec.js b/tests/unit/components/TargetEditor.spec.js @@ -618,6 +618,6 @@ test('should display message when target set is empty', async () => { // Assert message correctly rendered const rows = wrapper.findAll('tbody tr'); - expect(rows[0].text()).to.equal('There aren\'t any targets in this set yet'); + expect(rows[0].text()).to.equal('There aren\'t any targets in this set yet.'); expect(rows.length).to.equal(1); });