pace-calculator.spec.js (6701B)
1 import { test, expect } from '@playwright/test'; 2 3 test('Pace Calculator', async ({ page }) => { 4 // Go to pace calculator 5 await page.goto('/'); 6 await page.getByRole('button', { name: 'Pace Calculator' }).click(); 7 await expect(page).toHaveTitle('Pace Calculator - Running Tools'); 8 9 // Test standard pace results 10 { 11 // Enter input pace (2 mi in 15:30) 12 await page.getByLabel('Input distance value').fill('2'); 13 await page.getByLabel('Input distance unit').selectOption('Miles'); 14 await page.getByLabel('Input duration hours').fill('0'); 15 await page.getByLabel('Input duration minutes').fill('15'); 16 await page.getByLabel('Input duration seconds').fill('30'); 17 18 // Assert paces are correct 19 await expect(page.getByRole('row').nth(11)).toHaveText('1 mi' + '7:45.00'); 20 await expect(page.getByRole('row').nth(13)).toHaveText('1.29 mi' + '10:00'); 21 await expect(page.getByRole('row')).toHaveCount(31); 22 23 // Change default units 24 await page.getByText('Advanced Options').click(); 25 await page.getByLabel('Default units').selectOption('Kilometers'); 26 27 // Assert paces are correct 28 await expect(page.getByRole('row').nth(11)).toHaveText('1 mi' + '7:45.00'); 29 await expect(page.getByRole('row').nth(13)).toHaveText('2.08 km' + '10:00'); 30 await expect(page.getByRole('row')).toHaveCount(31); 31 } 32 33 // Test modified default target set 34 { 35 // Edit default target set 36 await page.getByRole('button', { name: 'Edit target set' }).click(); 37 await page.getByLabel('Target set label').fill('Less-common Pace Targets'); 38 await page.getByLabel('Target distance value').nth(10).fill('1.01'); 39 await page.getByLabel('Target distance unit').nth(10).selectOption('Miles'); 40 await page.getByLabel('Target duration second').nth(0).fill('1'); 41 await page.getByRole('button', { name: 'Add distance target' }).click(); 42 await page.getByLabel('Target distance value').last().fill('1.5'); 43 await page.getByLabel('Target distance unit').last().selectOption('Miles'); 44 await page.getByRole('button', { name: 'Add time target' }).click(); 45 await page.getByLabel('Target duration minutes').last().fill('19'); 46 await page.getByLabel('Target duration seconds').last().fill('0'); 47 await page.getByRole('button', { name: 'Close' }).click(); 48 49 // Assert paces are correct 50 await expect(page.getByRole('row').nth(11)).toHaveText('1.01 mi' + '7:49.65'); 51 await expect(page.getByRole('row').nth(13)).toHaveText('2.08 km' + '10:01'); 52 await expect(page.getByRole('row').nth(14)).toHaveText('1.5 mi' + '11:37.50'); 53 await expect(page.getByRole('row').nth(18)).toHaveText('3.95 km' + '19:00'); 54 await expect(page.getByRole('row')).toHaveCount(33); 55 } 56 57 // Test custom target set 58 { 59 // Create custom target set 60 await page.getByLabel('Selected target set').selectOption('[ Create New Target Set ]'); 61 await expect(page.getByRole('row').nth(4)).toHaveText('There aren\'t any targets in this set yet.'); 62 await expect(page.getByRole('row')).toHaveCount(5); 63 64 // Edit new target set 65 await expect(page.getByRole('row').nth(1)).toHaveText('There aren\'t any targets in this set yet.'); 66 await expect(page.getByLabel('Target set label')).toHaveValue('New target set'); 67 await page.getByLabel('Target set label').fill('800m Splits'); 68 await page.getByRole('button', { name: 'Add distance target' }).click(); 69 await page.getByLabel('Target distance value').nth(0).fill('0.4'); 70 await page.getByLabel('Target distance unit').nth(0).selectOption('Kilometers'); 71 await page.getByRole('button', { name: 'Add distance target' }).click(); 72 await page.getByLabel('Target distance value').nth(1).fill('800'); 73 await page.getByLabel('Target distance unit').nth(1).selectOption('Meters'); 74 await page.getByRole('button', { name: 'Close' }).click(); 75 76 // Assert paces are correct 77 await expect(page.getByRole('row').nth(1)).toHaveText('0.4 km' + '1:55.58'); 78 await expect(page.getByRole('row').nth(2)).toHaveText('800 m' + '3:51.15'); 79 await expect(page.getByRole('row')).toHaveCount(3); 80 } 81 82 // Reload page 83 await page.reload(); 84 85 // Assert outputs are still the same 86 { 87 // Assert paces are correct (custom targets and default units not reset) 88 await expect(page.getByRole('row').nth(1)).toHaveText('0.4 km' + '1:55.58'); 89 await expect(page.getByRole('row').nth(2)).toHaveText('800 m' + '3:51.15'); 90 await expect(page.getByRole('row')).toHaveCount(3); 91 92 // Switch target set 93 await page.getByText('Advanced Options').click(); 94 await page.getByLabel('Selected target set').selectOption('Less-common Pace Targets'); 95 96 // Assert paces are correct 97 await expect(page.getByRole('row').nth(11)).toHaveText('1.01 mi' + '7:49.65'); 98 await expect(page.getByRole('row').nth(13)).toHaveText('2.08 km' + '10:01'); 99 await expect(page.getByRole('row').nth(14)).toHaveText('1.5 mi' + '11:37.50'); 100 await expect(page.getByRole('row').nth(18)).toHaveText('3.95 km' + '19:00'); 101 await expect(page.getByRole('row')).toHaveCount(33); 102 } 103 104 // Test target set deletion and reversion 105 { 106 // Delete custom target set 107 await page.getByLabel('Selected target set').selectOption('800m Splits'); 108 await page.getByRole('button', { name: 'Edit target set' }).click(); 109 await expect(page.getByLabel('Target set label')).toHaveValue('800m Splits'); 110 await page.getByRole('button', { name: 'Delete target set' }).click(); 111 112 // Assert paces are correct (back to default target set) 113 await expect(page.getByRole('row').nth(11)).toHaveText('1.01 mi' + '7:49.65'); 114 await expect(page.getByRole('row').nth(13)).toHaveText('2.08 km' + '10:01'); 115 await expect(page.getByRole('row').nth(14)).toHaveText('1.5 mi' + '11:37.50'); 116 await expect(page.getByRole('row').nth(18)).toHaveText('3.95 km' + '19:00'); 117 await expect(page.getByRole('row')).toHaveCount(33); 118 119 // Revert target set 120 await page.getByRole('button', { name: 'Edit target set' }).click(); 121 await expect(page.getByLabel('Target set label')).toHaveValue('Less-common Pace Targets'); 122 await page.getByRole('button', { name: 'Revert target set' }).click(); 123 await page.getByRole('button', { name: 'Close' }).click(); 124 125 // Assert paces are correct 126 await expect(page.getByRole('row').nth(11)).toHaveText('1 mi' + '7:45.00'); 127 await expect(page.getByRole('row').nth(13)).toHaveText('2.08 km' + '10:00'); 128 await expect(page.getByRole('row')).toHaveCount(31); 129 130 // Assert title was reset 131 await page.getByRole('button', { name: 'Edit target set' }).click(); 132 await expect(page.getByLabel('Target set label')).toHaveValue('Common Pace Targets'); 133 } 134 });