Skip to content

Commit 3c540b3

Browse files
committed
refactor & extend datepicker-component, code documentation
1 parent 808edcd commit 3c540b3

File tree

1 file changed

+56
-6
lines changed

1 file changed

+56
-6
lines changed

e2e/lib/components/date-picker/date-picker.component.ts

+56-6
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@ class DatePickerComponent extends BaseComponent {
55
private readonly calendarSelector = 'nb-calendar';
66
private readonly calendarViewModeSelector = 'nb-calendar-view-mode';
77
private readonly navChevronSelector = 'nb-calendar-pageable-navigation [data-name="chevron-right"]';
8-
98
private readonly commonDayCellSelector = 'nb-calendar-day-cell.day-cell.ng-star-inserted:not(.bounding-month)';
10-
119
private readonly rangeDayCellSelector = 'nb-calendar-range-day-cell.day-cell.ng-star-inserted';
10+
private readonly currentMonthRangeDayCellSelector = 'nb-calendar-range-day-cell.day-cell.ng-star-inserted:not(.bounding-month)';
1211

1312
constructor(page: Page) {
1413
super(page, 'DatePickerComponent');
1514
}
1615

17-
//TODO: Rethink the implementation
18-
16+
/**
17+
* Selects a date in the calendar by navigating to the correct month and clicking the day
18+
* @param daysFromToday Number of days from today to select
19+
* @param isRangePicker Whether this is being used in a range picker context
20+
* @returns The formatted date string for assertion
21+
*/
1922
private async selectDateInCalendar(
2023
daysFromToday: number,
2124
isRangePicker: boolean = false
@@ -30,23 +33,62 @@ class DatePickerComponent extends BaseComponent {
3033
const dateToAssert = `${expectedMonthShort} ${expectedDay}, ${expectedYear}`;
3134
const expectedMonthAndYear = `${expectedMonthLong} ${expectedYear}`;
3235

36+
// Navigate to the correct month/year using the next button if needed
3337
let calendarMonthYear = await this.getText(this.calendarViewModeSelector);
3438
while (calendarMonthYear && !calendarMonthYear.includes(expectedMonthAndYear)) {
3539
await this.click(this.navChevronSelector);
3640
calendarMonthYear = await this.getText(this.calendarViewModeSelector);
3741
}
3842

39-
const dayCellSelector = isRangePicker ? this.rangeDayCellSelector : this.commonDayCellSelector;
40-
await this.click(dayCellSelector, { text: expectedDay, exact: true });
43+
if (isRangePicker) {
44+
45+
const calendarContainer = await this.page.locator('nb-calendar-range').first();
46+
const cells = await calendarContainer
47+
.locator(this.currentMonthRangeDayCellSelector)
48+
.filter({ hasText: new RegExp(`^${expectedDay}$`) })
49+
.all();
50+
51+
if (cells.length > 0) {
52+
await cells[0].click();
53+
} else {
54+
const anyCells = await calendarContainer
55+
.locator(this.rangeDayCellSelector)
56+
.filter({ hasText: new RegExp(`^${expectedDay}$`) })
57+
.all();
58+
59+
if (anyCells.length > 0) {
60+
await anyCells[0].click();
61+
} else {
62+
throw new Error(`Could not find any date cell with text "${expectedDay}" in range picker`);
63+
}
64+
}
65+
} else {
66+
await this.click(this.commonDayCellSelector, {
67+
text: expectedDay,
68+
exact: true,
69+
useFirst: true
70+
});
71+
}
72+
4173
return dateToAssert;
4274
}
4375

76+
/**
77+
* Selects a date in the common datepicker that is a specified number of days from today
78+
* @param daysFromToday Number of days from today to select
79+
*/
4480
async selectCommonDatepickerDateFromToday(daysFromToday: number): Promise<void> {
4581
const calendarInputField = this.getByPlaceholder('Form Picker');
4682
await calendarInputField.click();
4783
await this.selectDateInCalendar(daysFromToday, false);
4884
}
4985

86+
/**
87+
* Selects a date range in the range picker
88+
* @param daysFromToday Number of days from today for the start date
89+
* @param daysAfter Number of days from today for the end date
90+
* @returns Object containing formatted start and end dates for assertion
91+
*/
5092
async selectDatePickerRangeFromToday(
5193
daysFromToday: number,
5294
daysAfter: number
@@ -55,10 +97,18 @@ class DatePickerComponent extends BaseComponent {
5597
await calendarInputField.click();
5698

5799
const dateFrom = await this.selectDateInCalendar(daysFromToday, true);
100+
58101
const dateTo = await this.selectDateInCalendar(daysAfter, true);
102+
59103
return { dateFrom, dateTo };
60104
}
61105

106+
/**
107+
* Generates formatted date strings for assertions
108+
* @param daysFromToday Number of days from today
109+
* @param daysAfter Optional number of days after for range assertions
110+
* @returns Formatted date string(s) for assertion
111+
*/
62112
async getDateToAssert(
63113
daysFromToday: number,
64114
daysAfter?: number

0 commit comments

Comments
 (0)