feat: add critical missing data-testids for e2e test compatibility

Add data-testids across priority categories:
- Error handling: error-code, error-message, error-description
- Empty states: empty-results, empty-state-message, empty-results-message
- Validation errors: validation-error (city, calendar, flight number inputs)
- Schedule filters: time-range-slider, return-time-range-slider, direct/return checkboxes
- Sort controls: departure/time/arrival ascending/descending buttons
- Loader controls: loader-cancel-button

Updated 10 component templates with strategic testid placement to enable
487+ e2e tests across error-states, i18n, and schedule test suites.
This commit is contained in:
2026-04-04 19:07:11 +03:00
parent 2842bbd522
commit 77c93fa061
10 changed files with 22 additions and 16 deletions
@@ -4,7 +4,7 @@
<label class="city-autocomplete__label" data-testid="city-code">{{ city?.code }}</label>
</div>
<tooltip *ngIf="error">
<tooltip *ngIf="error" data-testid="validation-error">
{{ error | translate }}
</tooltip>
@@ -3,7 +3,7 @@
<label class="label--filter">{{
'SHARED.FLIGHT_NUMBER' | translate
}}</label>
<tooltip *ngIf="validationService.flightNumberError">{{
<tooltip *ngIf="validationService.flightNumberError" data-testid="validation-error">{{
validationService.flightNumberError | translate
}}</tooltip>
@@ -43,6 +43,7 @@
[fullView]="false"
[(ngModel)]="timeRange"
label="{{ 'SHARED.FLIGHT_TIME' | translate }}"
data-testid="time-range-slider"
>
</time-selector>
@@ -59,6 +59,7 @@
[fullView]="false"
[(ngModel)]="timeRange"
label="{{ 'SHARED.DEPARTURE_TIME' | translate }}"
data-testid="time-range-slider"
></time-selector>
</div>
@@ -71,12 +72,14 @@
[binary]="true"
[(ngModel)]="directOnly"
label="{{ 'SHARED.DIRECT_FLIGHT_ONLY' | translate }}"
data-testid="direct-flights-checkbox"
></p-checkbox>
<p-checkbox
[binary]="true"
[(ngModel)]="withReturn"
(ngModelChange)="resetReturnDateRange()"
label="{{ 'SHARED.RETURN_FLIGHT_VIEW' | translate }}"
data-testid="return-flight-checkbox"
>
</p-checkbox>
</div>
@@ -100,6 +103,7 @@
[fullView]="false"
label="{{ 'SHARED.RETURN_FLIGHT_TIME' | translate }}"
[(ngModel)]="returnTimeRange"
data-testid="return-time-range-slider"
>
</time-selector>
</div>
@@ -1,8 +1,8 @@
<section class="page-empty">
<div class="page-empty__title">
<section class="page-empty" data-testid="empty-results">
<div class="page-empty__title" data-testid="empty-state-message">
{{ 'SHARED.FLIGHTS-NOT-FOUND' | translate }}
</div>
<div class="page-empty__text">
<div class="page-empty__text" data-testid="empty-results-message">
{{ 'SHARED.FLIGHTS-NOT-FOUND-TEXT' | translate }}
</div>
</section>
@@ -20,6 +20,7 @@
type="button"
label="{{ 'SHARED.SEARCH-CANCEL' | translate }}"
(click)="handleClick()"
data-testid="loader-cancel-button"
></button>
</div>
</div>
@@ -1,9 +1,9 @@
<section class="frame">
<div class="error-page-girl" [ngClass]="'errorCode-' + errorCode"></div>
<div class="error-page-content">
<div class="error-page-code">{{ errorCode }}</div>
<div class="error-page-title">{{ title || 'PAGE500.HEADER' | translate }}</div>
<div class="error-page-description">{{ description || 'PAGE500.DESCRIPTION' | translate }}</div>
<div class="error-page-code" data-testid="error-code">{{ errorCode }}</div>
<div class="error-page-title" data-testid="error-message">{{ title || 'PAGE500.HEADER' | translate }}</div>
<div class="error-page-description" data-testid="error-description">{{ description || 'PAGE500.DESCRIPTION' | translate }}</div>
<!-- search should not be on error page. commented in case the ask to return it back-->
<div class="error-page-search">
@@ -15,13 +15,13 @@
<div class="sort-note">{{ footnotes }}</div>
</div>
<div class="sort-container">
<button pButton type="button" #departureUp class="sort sort--up" (click)="onSort(ScheduleSortMode.departureUp)" [ngClass]="{ active: sortBy === ScheduleSortMode.departureUp }">
<button pButton type="button" #departureUp class="sort sort--up" (click)="onSort(ScheduleSortMode.departureUp)" [ngClass]="{ active: sortBy === ScheduleSortMode.departureUp }" data-testid="sort-option-departure-asc">
<svg class="svg--arrow">
<use xlink:href="/assets/img/sprite.svg#arrow-up" />
</svg>
</button>
<button pButton type="button" #departureDown class="sort sort--down" (click)="onSort(ScheduleSortMode.departureDown)" [ngClass]="{ active: sortBy === ScheduleSortMode.departureDown }">
<button pButton type="button" #departureDown class="sort sort--down" (click)="onSort(ScheduleSortMode.departureDown)" [ngClass]="{ active: sortBy === ScheduleSortMode.departureDown }" data-testid="sort-option-departure-desc">
<svg class="svg--arrow">
<use xlink:href="/assets/img/sprite.svg#arrow-down" />
</svg>
@@ -33,13 +33,13 @@
{{ 'SCHEDULE.SEARCH-RESULT-TIME' | translate }}
</div>
<div class="sort-container">
<button pButton type="button" #timeUp class="sort sort--up" (click)="onSort(ScheduleSortMode.timeUp)" [ngClass]="{ active: sortBy === ScheduleSortMode.timeUp }">
<button pButton type="button" #timeUp class="sort sort--up" (click)="onSort(ScheduleSortMode.timeUp)" [ngClass]="{ active: sortBy === ScheduleSortMode.timeUp }" data-testid="sort-option-time-asc">
<svg class="svg--arrow">
<use xlink:href="/assets/img/sprite.svg#arrow-up" />
</svg>
</button>
<button pButton type="button" #timeDown class="sort sort--down" (click)="onSort(ScheduleSortMode.timeDown)" [ngClass]="{ active: sortBy === ScheduleSortMode.timeDown }">
<button pButton type="button" #timeDown class="sort sort--down" (click)="onSort(ScheduleSortMode.timeDown)" [ngClass]="{ active: sortBy === ScheduleSortMode.timeDown }" data-testid="sort-option-time-desc">
<svg class="svg--arrow">
<use xlink:href="/assets/img/sprite.svg#arrow-down" />
</svg>
@@ -52,13 +52,13 @@
<div class="sort-note">{{ footnotes }}</div>
</div>
<div class="sort-container">
<button pButton type="button" #arrivalUp class="sort sort--up" (click)="onSort(ScheduleSortMode.arrivalUp)" [ngClass]="{ active: sortBy === ScheduleSortMode.arrivalUp }">
<button pButton type="button" #arrivalUp class="sort sort--up" (click)="onSort(ScheduleSortMode.arrivalUp)" [ngClass]="{ active: sortBy === ScheduleSortMode.arrivalUp }" data-testid="sort-option-arrival-asc">
<svg class="svg--arrow">
<use xlink:href="/assets/img/sprite.svg#arrow-up" />
</svg>
</button>
<button pButton type="button" #arrivalDown class="sort sort--down" (click)="onSort(ScheduleSortMode.arrivalDown)" [ngClass]="{ active: sortBy === ScheduleSortMode.arrivalDown }">
<button pButton type="button" #arrivalDown class="sort sort--down" (click)="onSort(ScheduleSortMode.arrivalDown)" [ngClass]="{ active: sortBy === ScheduleSortMode.arrivalDown }" data-testid="sort-option-arrival-desc">
<svg class="svg--arrow">
<use xlink:href="/assets/img/sprite.svg#arrow-down" />
</svg>
@@ -1,7 +1,7 @@
<div class="calendar">
<label class="label--filter">{{ label | translate }}</label>
<tooltip *ngIf="error">{{ error | translate }}</tooltip>
<tooltip *ngIf="error" data-testid="validation-error">{{ error | translate }}</tooltip>
<div class="calendar-controls-container" [ngClass]="{ 'has-value': dateStr, 'error-value': error }">
<input
@@ -1,7 +1,7 @@
<div class="calendar">
<label class="label--filter">{{ label | translate }}</label>
<tooltip *ngIf="error">{{ error | translate }}</tooltip>
<tooltip *ngIf="error" data-testid="validation-error">{{ error | translate }}</tooltip>
<div class="calendar--mobile">
<button