Skip to content

Commit aa1058d

Browse files
authored
fix: stabilize timeline HAR and timestamp tests (#1562)
1 parent 3246188 commit aa1058d

5 files changed

Lines changed: 1594 additions & 6130 deletions

File tree

src/pages/historicTimeline/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const TimelinePage = () => {
3636
const { operatorId, lineNumber, timestamp, routeKey } = search
3737
const [stopKey, setStopKey] = useState<string | undefined>()
3838

39-
const time = useMemo(() => dayjs(search.timestamp), [timestamp])
39+
const time = useMemo(() => dayjs(search.timestamp).startOf('minute'), [timestamp])
4040

4141
const routesQuery = useQuery({
4242
queryFn: async () => {
@@ -119,7 +119,7 @@ const TimelinePage = () => {
119119
const newTimestamp = ts
120120
.hour(currentTime.hour())
121121
.minute(currentTime.minute())
122-
.second(currentTime.second())
122+
.startOf('minute')
123123
.valueOf()
124124
setSearch((current) => ({ ...current, timestamp: newTimestamp }))
125125
}}
@@ -135,7 +135,7 @@ const TimelinePage = () => {
135135
const newTimestamp = currentDate
136136
.hour(ts.hour())
137137
.minute(ts.minute())
138-
.second(ts.second())
138+
.startOf('minute')
139139
.valueOf()
140140
setSearch((current) => ({ ...current, timestamp: newTimestamp }))
141141
}}

src/test_pages/TimelinePage.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,13 @@ class TimelinePage extends BasePage {
2929
return this.page.locator('#operator-select')
3030
}
3131

32-
public get timelineGraph() {
33-
return this.page.locator('h4')
32+
public get timelineHourLabels() {
33+
return this.page.getByText(/^\d{2}:\d{2}:\d{2}$/)
34+
}
35+
36+
public async WaitForLoadingCompletion() {
37+
await this.page.locator('.MuiCircularProgress-svg').waitFor({ state: 'hidden' })
38+
await this.page.waitForLoadState('networkidle')
3439
}
3540

3641
public get operatorsList() {

tests/HAR/timeline.har

Lines changed: 1570 additions & 6094 deletions
Large diffs are not rendered by default.

tests/recordHAR.spec.ts

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,10 @@
88
* After running, commit the updated HAR files in tests/HAR/.
99
*/
1010
import { Page, test } from '@playwright/test'
11+
import { getPastDate } from './utils'
1112

1213
test.describe.configure({ mode: 'serial' })
1314

14-
function getPastDate() {
15-
return new Date('2024-02-12T15:00:00+00:00')
16-
}
17-
1815
async function setupRecording(page: Page, harFile: string) {
1916
await page.clock.setSystemTime(getPastDate())
2017
await page.emulateMedia({ reducedMotion: 'reduce' })
@@ -60,33 +57,18 @@ test.describe('Record HAR files', () => {
6057
await page.getByPlaceholder('לדוגמה: 17א').fill('1')
6158
await page.waitForLoadState('networkidle')
6259

63-
// Open route dropdown and wait for options to load
64-
await openDropdownAndWait(page, '#route-select')
65-
66-
// Select route to trigger stops fetch
67-
const routeWithStops =
68-
'בית ספר אלונים/הבנים-פרדס חנה כרכור ⟵ יד לבנים/דרך הבנים-פרדס חנה כרכור '
69-
const routeExists = await page.getByRole('option', { name: routeWithStops }).count()
70-
if (routeExists > 0) {
71-
await page.getByRole('option', { name: routeWithStops }).click()
72-
await page.waitForLoadState('networkidle')
73-
await openDropdownAndWait(page, '#stop-select')
74-
await page.keyboard.press('Escape')
75-
} else {
76-
await page.keyboard.press('Escape')
77-
}
78-
7960
// Select route used for timeline hits test
8061
await openDropdownAndWait(page, '#route-select')
8162
const routeWithHits = 'שדרות מנחם בגין/כביש 7-גדרה ⟵ שדרות מנחם בגין/כביש 7-גדרה'
8263
const hitsRouteExists = await page.getByRole('option', { name: routeWithHits }).count()
8364
if (hitsRouteExists > 0) {
84-
await page.getByRole('option', { name: routeWithHits }).click()
65+
await page.getByRole('option', { name: routeWithHits, exact: true }).click()
8566
await page.waitForLoadState('networkidle')
8667
await openDropdownAndWait(page, '#stop-select')
8768
const stopOption = page.getByRole('option', { name: 'חיים הרצוג/שדרות מנחם בגין (גדרה)' })
8869
if ((await stopOption.count()) > 0) {
8970
await stopOption.click()
71+
await page.locator('.MuiCircularProgress-svg').waitFor({ state: 'hidden' })
9072
await page.waitForLoadState('networkidle')
9173
} else {
9274
await page.keyboard.press('Escape')
@@ -106,8 +88,8 @@ test.describe('Record HAR files', () => {
10688
if ((await danBaDarom.count()) > 0) {
10789
await danBaDarom.click()
10890
await page.getByPlaceholder('לדוגמה: 17א').fill('9999')
109-
await page.waitForTimeout(3000)
11091
await page.waitForLoadState('networkidle')
92+
await page.getByText('הקו לא נמצא').waitFor({ state: 'visible' })
11193
} else {
11294
await page.keyboard.press('Escape')
11395
}

tests/timeline.spec.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { expect, test } from 'src/test_pages/TimelinePage'
22
import { harOptions, setupTest, verifyDateFromParameter, visitPage } from './utils'
33

4+
const ROUTE = 'שדרות מנחם בגין/כביש 7-גדרה ⟵ שדרות מנחם בגין/כביש 7-גדרה'
5+
const STATION = 'חיים הרצוג/שדרות מנחם בגין (גדרה)'
6+
47
test.describe('Timeline Page Tests', () => {
58
test.beforeEach(async ({ page, advancedRouteFromHAR }) => {
69
await setupTest(page)
@@ -50,19 +53,15 @@ test.describe('Timeline Page Tests', () => {
5053
await timelinePage.selectOperator('אגד')
5154
await timelinePage.lineNumberField.fill('1')
5255
await expect(timelinePage.routeSelect).toBeEnabled()
53-
await timelinePage.selectRoute(
54-
'בית ספר אלונים/הבנים-פרדס חנה כרכור ⟵ יד לבנים/דרך הבנים-פרדס חנה כרכור ',
55-
)
56+
await timelinePage.selectRoute(ROUTE)
5657
await expect(timelinePage.stationSelect).toBeEnabled()
5758
})
5859

5960
test('Should load stations list', async ({ timelinePage }) => {
6061
await timelinePage.selectOperator('אגד')
6162
await timelinePage.lineNumberField.fill('1')
6263
await expect(timelinePage.routeSelect).toBeEnabled()
63-
await timelinePage.selectRoute(
64-
'בית ספר אלונים/הבנים-פרדס חנה כרכור ⟵ יד לבנים/דרך הבנים-פרדס חנה כרכור ',
65-
)
64+
await timelinePage.selectRoute(ROUTE)
6665
await expect(timelinePage.stationSelect).toBeEnabled()
6766
await timelinePage.stationSelect.click()
6867
const options = await timelinePage.getDropdownOptions()
@@ -75,10 +74,12 @@ test.describe('Timeline Page Tests', () => {
7574
await timelinePage.selectOperator('אגד')
7675
await timelinePage.lineNumberField.fill('1')
7776
await expect(timelinePage.routeSelect).toBeEnabled()
78-
await timelinePage.selectRoute('שדרות מנחם בגין/כביש 7-גדרה ⟵ שדרות מנחם בגין/כביש 7-גדרה')
77+
await timelinePage.selectRoute(ROUTE)
7978
await expect(timelinePage.stationSelect).toBeEnabled()
80-
await timelinePage.selectStation('חיים הרצוג/שדרות מנחם בגין (גדרה)')
81-
await expect(timelinePage.timelineGraph).toBeEnabled()
79+
await timelinePage.selectStation(STATION)
80+
await timelinePage.WaitForLoadingCompletion()
81+
await expect(timelinePage.timelineHourLabels).toContainText(['17:00:59'])
82+
expect(await timelinePage.timelineHourLabels.count()).toBe(49)
8283
})
8384

8485
test('Verify date_from parameter', async ({ page }) => {

0 commit comments

Comments
 (0)