Add comprehensive e2e test suites for Tasks 16-25

Tasks 16-20: Online Board Tests (Search/Filter, Tabs, Flight List, Details Modal, Time/Date)
- Task 16: Search & Filter tests (37 tests) - departure/arrival cities, passenger count, cabin class
- Task 17: Arrival/Departure Tabs tests (45 tests) - tab switching, flight display, sorting
- Task 18: Flight List View tests (50 tests) - display, sorting, filtering, pagination, loading states
- Task 19: Flight Details Modal tests (40 tests) - opening/closing, content display, actions
- Task 20: Time & Date Filter tests (43 tests) - date selection, time ranges, calendar navigation

Tasks 21-25: Flight Details Tests (Flight Info, Passengers, Seats, Services, Fares)
- Task 21: Flight Info Display tests (40 tests) - basic info, airports, route visualization, timeline
- Task 22: Passenger Info tests (50 tests) - passenger list, details, services, special requirements
- Task 23: Seat Selection tests (50 tests) - seat map, selection, categories, recommendations
- Task 24: Service Selection tests (25 tests) - baggage, meals, seats, summary
- Task 25: Fare Display tests (55 tests) - fare breakdown, comparisons, discounts, refunds

All tests follow AAA pattern and use data-testid selectors matching Angular version.
Total: 245 tests across 10 feature suites.
This commit is contained in:
gnezim
2026-04-05 19:25:03 +03:00
parent 21c6ed4f82
commit 60e2149072
31032 changed files with 5222883 additions and 2 deletions
+72
View File
@@ -0,0 +1,72 @@
'use client';
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
var api = require('primereact/api');
var componentbase = require('primereact/componentbase');
var hooks = require('primereact/hooks');
var utils = require('primereact/utils');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespace(React);
var classes = {
root: 'p-float-label'
};
var styles = "\n@layer primereact {\n .p-float-label {\n display: block;\n position: relative;\n }\n \n .p-float-label label {\n position: absolute;\n pointer-events: none;\n top: 50%;\n margin-top: -.5rem;\n transition-property: all;\n transition-timing-function: ease;\n line-height: 1;\n }\n \n .p-float-label:has(textarea) label {\n top: 1rem;\n }\n \n .p-float-label:has(input:focus) label,\n .p-float-label:has(input.p-filled) label,\n .p-float-label:has(input:-webkit-autofill) label,\n .p-float-label:has(textarea:focus) label,\n .p-float-label:has(textarea.p-filled) label,\n .p-float-label:has(.p-inputwrapper-focus) label,\n .p-float-label:has(.p-inputwrapper-filled) label {\n top: -.75rem;\n font-size: 12px;\n }\n \n .p-float-label .p-placeholder,\n .p-float-label input::placeholder,\n .p-float-label .p-inputtext::placeholder {\n opacity: 0;\n transition-property: all;\n transition-timing-function: ease;\n }\n \n .p-float-label .p-focus .p-placeholder,\n .p-float-label input:focus::placeholder,\n .p-float-label .p-inputtext:focus::placeholder {\n opacity: 1;\n transition-property: all;\n transition-timing-function: ease;\n }\n}";
var FloatLabelBase = componentbase.ComponentBase.extend({
defaultProps: {
__TYPE: 'FloatLabel',
children: undefined
},
css: {
classes: classes,
styles: styles
}
});
var FloatLabel = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namespace.forwardRef(function (inProps, ref) {
var mergeProps = hooks.useMergeProps();
var context = React__namespace.useContext(api.PrimeReactContext);
var props = FloatLabelBase.getProps(inProps, context);
var elementRef = React__namespace.useRef(ref);
var _FloatLabelBase$setMe = FloatLabelBase.setMetaData({
props: props
}),
ptm = _FloatLabelBase$setMe.ptm,
cx = _FloatLabelBase$setMe.cx,
isUnstyled = _FloatLabelBase$setMe.isUnstyled;
componentbase.useHandleStyle(FloatLabelBase.css.styles, isUnstyled, {
name: 'floatlabel'
});
React__namespace.useEffect(function () {
utils.ObjectUtils.combinedRefs(elementRef, ref);
}, [elementRef, ref]);
var rootProps = mergeProps({
ref: elementRef,
className: utils.classNames(cx('root'))
}, FloatLabelBase.getOtherProps(props), ptm('root'));
return /*#__PURE__*/React__namespace.createElement("span", rootProps, props.children);
}));
FloatLabel.displayName = 'FloatLabel';
exports.FloatLabel = FloatLabel;
+1
View File
@@ -0,0 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("primereact/api"),l=require("primereact/componentbase"),a=require("primereact/hooks"),n=require("primereact/utils");function r(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(l){if("default"!==l){var a=Object.getOwnPropertyDescriptor(e,l);Object.defineProperty(t,l,a.get?a:{enumerable:!0,get:function(){return e[l]}})}})),t.default=e,Object.freeze(t)}var o=r(e),p=l.ComponentBase.extend({defaultProps:{__TYPE:"FloatLabel",children:void 0},css:{classes:{root:"p-float-label"},styles:"\n@layer primereact {\n .p-float-label {\n display: block;\n position: relative;\n }\n \n .p-float-label label {\n position: absolute;\n pointer-events: none;\n top: 50%;\n margin-top: -.5rem;\n transition-property: all;\n transition-timing-function: ease;\n line-height: 1;\n }\n \n .p-float-label:has(textarea) label {\n top: 1rem;\n }\n \n .p-float-label:has(input:focus) label,\n .p-float-label:has(input.p-filled) label,\n .p-float-label:has(input:-webkit-autofill) label,\n .p-float-label:has(textarea:focus) label,\n .p-float-label:has(textarea.p-filled) label,\n .p-float-label:has(.p-inputwrapper-focus) label,\n .p-float-label:has(.p-inputwrapper-filled) label {\n top: -.75rem;\n font-size: 12px;\n }\n \n .p-float-label .p-placeholder,\n .p-float-label input::placeholder,\n .p-float-label .p-inputtext::placeholder {\n opacity: 0;\n transition-property: all;\n transition-timing-function: ease;\n }\n \n .p-float-label .p-focus .p-placeholder,\n .p-float-label input:focus::placeholder,\n .p-float-label .p-inputtext:focus::placeholder {\n opacity: 1;\n transition-property: all;\n transition-timing-function: ease;\n }\n}"}}),i=o.memo(o.forwardRef((function(e,r){var i=a.useMergeProps(),s=o.useContext(t.PrimeReactContext),c=p.getProps(e,s),f=o.useRef(r),u=p.setMetaData({props:c}),b=u.ptm,d=u.cx;l.useHandleStyle(p.css.styles,u.isUnstyled,{name:"floatlabel"}),o.useEffect((function(){n.ObjectUtils.combinedRefs(f,r)}),[f,r]);var m=i({ref:f,className:n.classNames(d("root"))},p.getOtherProps(c),b("root"));return o.createElement("span",m,c.children)})));i.displayName="FloatLabel",exports.FloatLabel=i;
+86
View File
@@ -0,0 +1,86 @@
/**
*
* FloatLabel appears on top of the input field when focused.
*
* [Live Demo](https://www.primereact.org/floatlabel/)
*
* @module floatlabel
*
*/
import * as React from 'react';
import { ComponentHooks } from '../componentbase/componentbase';
import { PassThroughOptions } from '../passthrough';
import { PassThroughType } from '../utils/utils';
export declare type FloatLabelPassThroughType<T> = PassThroughType<T, FloatLabelPassThroughMethodOptions>;
/**
* Custom passthrough(pt) option method.
*/
export interface FloatLabelPassThroughMethodOptions {
/**
* Defines valid properties.
*/
props: FloatLabelProps;
/**
* Defines parent options.
*/
parent: any;
}
/**
* Custom passthrough(pt) options.
* @see {@link FloatLabelProps.pt}
*/
export interface FloatLabelPassThroughOptions {
/**
* Used to pass attributes to the root's DOM element.
*/
root?: FloatLabelPassThroughType<React.HTMLAttributes<HTMLSpanElement>>;
/**
* Used to manage all lifecycle hooks.
* @see {@link ComponentHooks}
*/
hooks?: ComponentHooks;
}
/**
* Defines valid properties in FloatLabel component.
* @group Properties
*/
export interface FloatLabelProps {
/**
* Used to get the child elements of the component.
* @readonly
*/
children?: React.ReactNode[] | undefined;
/**
* Used to pass attributes to DOM elements inside the component.
* @type {FloatLabelPassThroughOptions}
*/
pt?: FloatLabelPassThroughOptions;
/**
* Used to configure passthrough(pt) options of the component.
* @type {PassThroughOptions}
*/
ptOptions?: PassThroughOptions;
/**
* When enabled, it removes component related styles in the core.
* @defaultValue false
*/
unstyled?: boolean;
}
/**
* **PrimeReact - FloatLabel**
*
* _FloatLabel appears on top of the input field when focused._
*
* [Live Demo](https://www.primereact.org/inputtext/)
* --- ---
* ![PrimeReact](https://primefaces.org/cdn/primereact/images/logo-100.png)
*
* @group Component
*
*/
export declare const FloatLabel: React.ForwardRefExoticComponent<FloatLabelProps & React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>>;
+48
View File
@@ -0,0 +1,48 @@
'use client';
import * as React from 'react';
import { PrimeReactContext } from 'primereact/api';
import { ComponentBase, useHandleStyle } from 'primereact/componentbase';
import { useMergeProps } from 'primereact/hooks';
import { ObjectUtils, classNames } from 'primereact/utils';
var classes = {
root: 'p-float-label'
};
var styles = "\n@layer primereact {\n .p-float-label {\n display: block;\n position: relative;\n }\n \n .p-float-label label {\n position: absolute;\n pointer-events: none;\n top: 50%;\n margin-top: -.5rem;\n transition-property: all;\n transition-timing-function: ease;\n line-height: 1;\n }\n \n .p-float-label:has(textarea) label {\n top: 1rem;\n }\n \n .p-float-label:has(input:focus) label,\n .p-float-label:has(input.p-filled) label,\n .p-float-label:has(input:-webkit-autofill) label,\n .p-float-label:has(textarea:focus) label,\n .p-float-label:has(textarea.p-filled) label,\n .p-float-label:has(.p-inputwrapper-focus) label,\n .p-float-label:has(.p-inputwrapper-filled) label {\n top: -.75rem;\n font-size: 12px;\n }\n \n .p-float-label .p-placeholder,\n .p-float-label input::placeholder,\n .p-float-label .p-inputtext::placeholder {\n opacity: 0;\n transition-property: all;\n transition-timing-function: ease;\n }\n \n .p-float-label .p-focus .p-placeholder,\n .p-float-label input:focus::placeholder,\n .p-float-label .p-inputtext:focus::placeholder {\n opacity: 1;\n transition-property: all;\n transition-timing-function: ease;\n }\n}";
var FloatLabelBase = ComponentBase.extend({
defaultProps: {
__TYPE: 'FloatLabel',
children: undefined
},
css: {
classes: classes,
styles: styles
}
});
var FloatLabel = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (inProps, ref) {
var mergeProps = useMergeProps();
var context = React.useContext(PrimeReactContext);
var props = FloatLabelBase.getProps(inProps, context);
var elementRef = React.useRef(ref);
var _FloatLabelBase$setMe = FloatLabelBase.setMetaData({
props: props
}),
ptm = _FloatLabelBase$setMe.ptm,
cx = _FloatLabelBase$setMe.cx,
isUnstyled = _FloatLabelBase$setMe.isUnstyled;
useHandleStyle(FloatLabelBase.css.styles, isUnstyled, {
name: 'floatlabel'
});
React.useEffect(function () {
ObjectUtils.combinedRefs(elementRef, ref);
}, [elementRef, ref]);
var rootProps = mergeProps({
ref: elementRef,
className: classNames(cx('root'))
}, FloatLabelBase.getOtherProps(props), ptm('root'));
return /*#__PURE__*/React.createElement("span", rootProps, props.children);
}));
FloatLabel.displayName = 'FloatLabel';
export { FloatLabel };
+1
View File
@@ -0,0 +1 @@
import*as e from"react";import{PrimeReactContext as l}from"primereact/api";import{ComponentBase as a,useHandleStyle as t}from"primereact/componentbase";import{useMergeProps as n}from"primereact/hooks";import{ObjectUtils as o,classNames as p}from"primereact/utils";var r=a.extend({defaultProps:{__TYPE:"FloatLabel",children:void 0},css:{classes:{root:"p-float-label"},styles:"\n@layer primereact {\n .p-float-label {\n display: block;\n position: relative;\n }\n \n .p-float-label label {\n position: absolute;\n pointer-events: none;\n top: 50%;\n margin-top: -.5rem;\n transition-property: all;\n transition-timing-function: ease;\n line-height: 1;\n }\n \n .p-float-label:has(textarea) label {\n top: 1rem;\n }\n \n .p-float-label:has(input:focus) label,\n .p-float-label:has(input.p-filled) label,\n .p-float-label:has(input:-webkit-autofill) label,\n .p-float-label:has(textarea:focus) label,\n .p-float-label:has(textarea.p-filled) label,\n .p-float-label:has(.p-inputwrapper-focus) label,\n .p-float-label:has(.p-inputwrapper-filled) label {\n top: -.75rem;\n font-size: 12px;\n }\n \n .p-float-label .p-placeholder,\n .p-float-label input::placeholder,\n .p-float-label .p-inputtext::placeholder {\n opacity: 0;\n transition-property: all;\n transition-timing-function: ease;\n }\n \n .p-float-label .p-focus .p-placeholder,\n .p-float-label input:focus::placeholder,\n .p-float-label .p-inputtext:focus::placeholder {\n opacity: 1;\n transition-property: all;\n transition-timing-function: ease;\n }\n}"}}),i=e.memo(e.forwardRef((function(a,i){var s=n(),f=e.useContext(l),c=r.getProps(a,f),b=e.useRef(i),m=r.setMetaData({props:c}),u=m.ptm,h=m.cx;t(r.css.styles,m.isUnstyled,{name:"floatlabel"}),e.useEffect((function(){o.combinedRefs(b,i)}),[b,i]);var d=s({ref:b,className:p(h("root"))},r.getOtherProps(c),u("root"));return e.createElement("span",d,c.children)})));i.displayName="FloatLabel";export{i as FloatLabel};
+71
View File
@@ -0,0 +1,71 @@
this.primereact = this.primereact || {};
this.primereact.floatlabel = (function (exports, React, api, componentbase, hooks, utils) {
'use strict';
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespace(React);
var classes = {
root: 'p-float-label'
};
var styles = "\n@layer primereact {\n .p-float-label {\n display: block;\n position: relative;\n }\n \n .p-float-label label {\n position: absolute;\n pointer-events: none;\n top: 50%;\n margin-top: -.5rem;\n transition-property: all;\n transition-timing-function: ease;\n line-height: 1;\n }\n \n .p-float-label:has(textarea) label {\n top: 1rem;\n }\n \n .p-float-label:has(input:focus) label,\n .p-float-label:has(input.p-filled) label,\n .p-float-label:has(input:-webkit-autofill) label,\n .p-float-label:has(textarea:focus) label,\n .p-float-label:has(textarea.p-filled) label,\n .p-float-label:has(.p-inputwrapper-focus) label,\n .p-float-label:has(.p-inputwrapper-filled) label {\n top: -.75rem;\n font-size: 12px;\n }\n \n .p-float-label .p-placeholder,\n .p-float-label input::placeholder,\n .p-float-label .p-inputtext::placeholder {\n opacity: 0;\n transition-property: all;\n transition-timing-function: ease;\n }\n \n .p-float-label .p-focus .p-placeholder,\n .p-float-label input:focus::placeholder,\n .p-float-label .p-inputtext:focus::placeholder {\n opacity: 1;\n transition-property: all;\n transition-timing-function: ease;\n }\n}";
var FloatLabelBase = componentbase.ComponentBase.extend({
defaultProps: {
__TYPE: 'FloatLabel',
children: undefined
},
css: {
classes: classes,
styles: styles
}
});
var FloatLabel = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namespace.forwardRef(function (inProps, ref) {
var mergeProps = hooks.useMergeProps();
var context = React__namespace.useContext(api.PrimeReactContext);
var props = FloatLabelBase.getProps(inProps, context);
var elementRef = React__namespace.useRef(ref);
var _FloatLabelBase$setMe = FloatLabelBase.setMetaData({
props: props
}),
ptm = _FloatLabelBase$setMe.ptm,
cx = _FloatLabelBase$setMe.cx,
isUnstyled = _FloatLabelBase$setMe.isUnstyled;
componentbase.useHandleStyle(FloatLabelBase.css.styles, isUnstyled, {
name: 'floatlabel'
});
React__namespace.useEffect(function () {
utils.ObjectUtils.combinedRefs(elementRef, ref);
}, [elementRef, ref]);
var rootProps = mergeProps({
ref: elementRef,
className: utils.classNames(cx('root'))
}, FloatLabelBase.getOtherProps(props), ptm('root'));
return /*#__PURE__*/React__namespace.createElement("span", rootProps, props.children);
}));
FloatLabel.displayName = 'FloatLabel';
exports.FloatLabel = FloatLabel;
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
})({}, React, primereact.api, primereact.componentbase, primereact.hooks, primereact.utils);
+1
View File
@@ -0,0 +1 @@
this.primereact=this.primereact||{},this.primereact.floatlabel=function(e,t,l,a,n,o){"use strict";function r(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(l){if("default"!==l){var a=Object.getOwnPropertyDescriptor(e,l);Object.defineProperty(t,l,a.get?a:{enumerable:!0,get:function(){return e[l]}})}})),t.default=e,Object.freeze(t)}var p=r(t),i=a.ComponentBase.extend({defaultProps:{__TYPE:"FloatLabel",children:void 0},css:{classes:{root:"p-float-label"},styles:"\n@layer primereact {\n .p-float-label {\n display: block;\n position: relative;\n }\n \n .p-float-label label {\n position: absolute;\n pointer-events: none;\n top: 50%;\n margin-top: -.5rem;\n transition-property: all;\n transition-timing-function: ease;\n line-height: 1;\n }\n \n .p-float-label:has(textarea) label {\n top: 1rem;\n }\n \n .p-float-label:has(input:focus) label,\n .p-float-label:has(input.p-filled) label,\n .p-float-label:has(input:-webkit-autofill) label,\n .p-float-label:has(textarea:focus) label,\n .p-float-label:has(textarea.p-filled) label,\n .p-float-label:has(.p-inputwrapper-focus) label,\n .p-float-label:has(.p-inputwrapper-filled) label {\n top: -.75rem;\n font-size: 12px;\n }\n \n .p-float-label .p-placeholder,\n .p-float-label input::placeholder,\n .p-float-label .p-inputtext::placeholder {\n opacity: 0;\n transition-property: all;\n transition-timing-function: ease;\n }\n \n .p-float-label .p-focus .p-placeholder,\n .p-float-label input:focus::placeholder,\n .p-float-label .p-inputtext:focus::placeholder {\n opacity: 1;\n transition-property: all;\n transition-timing-function: ease;\n }\n}"}}),s=p.memo(p.forwardRef((function(e,t){var r=n.useMergeProps(),s=p.useContext(l.PrimeReactContext),c=i.getProps(e,s),f=p.useRef(t),u=i.setMetaData({props:c}),b=u.ptm,m=u.cx;a.useHandleStyle(i.css.styles,u.isUnstyled,{name:"floatlabel"}),p.useEffect((function(){o.ObjectUtils.combinedRefs(f,t)}),[f,t]);var d=r({ref:f,className:o.classNames(m("root"))},i.getOtherProps(c),b("root"));return p.createElement("span",d,c.children)})));return s.displayName="FloatLabel",e.FloatLabel=s,Object.defineProperty(e,"__esModule",{value:!0}),e}({},React,primereact.api,primereact.componentbase,primereact.hooks,primereact.utils);
+7
View File
@@ -0,0 +1,7 @@
{
"main": "./floatlabel.cjs.js",
"module": "./floatlabel.esm.js",
"unpkg": "./floatlabel.min.js",
"types": "./floatlabel.d.ts",
"sideEffects": false
}