Files
actual/packages/desktop-client/e2e/page-models/schedules-page.js
Joel Jeremy Marquez 30bcfedc86 React Aria Button as base of Button component (#2904)
* React Aria Button as base of Button component

* Release notes

* AmountInput sign button

* Fix tests

* Comment

* Fix disabled/pressed style

* Update react-aria-components version

* yarn.lock

* Apply defaultStyle

* Fix button props type
2024-07-03 09:33:57 -07:00

94 lines
2.4 KiB
JavaScript

export class SchedulesPage {
constructor(page) {
this.page = page;
this.addNewScheduleButton = this.page.getByRole('button', {
name: 'Add new schedule',
});
this.schedulesTableRow = this.page.getByTestId('table').getByTestId('row');
}
/**
* Add a new schedule
*/
async addNewSchedule(data) {
await this.addNewScheduleButton.click();
await this._fillScheduleFields(data);
await this.page.getByRole('button', { name: 'Add' }).click();
}
/**
* Retrieve the row element for the nth-schedule.
* 0-based index
*/
getNthScheduleRow(index) {
return this.schedulesTableRow.nth(index);
}
/**
* Retrieve the data for the nth-schedule.
* 0-based index
*/
getNthSchedule(index) {
const row = this.getNthScheduleRow(index);
return {
payee: row.getByTestId('payee'),
account: row.getByTestId('account'),
date: row.getByTestId('date'),
status: row.getByTestId('status'),
amount: row.getByTestId('amount'),
};
}
/**
* Create a transaction for the nth-schedule.
* 0-based index
*/
async postNthSchedule(index) {
await this._performNthAction(index, 'Post transaction');
await this.page.waitForTimeout(1000);
}
/**
* Complete the nth-schedule.
* 0-based index
*/
async completeNthSchedule(index) {
await this._performNthAction(index, 'Complete');
await this.page.waitForTimeout(1000);
}
async _performNthAction(index, actionName) {
const row = this.getNthScheduleRow(index);
const actions = row.getByTestId('actions');
await actions.getByRole('button').click();
await this.page.getByRole('button', { name: actionName }).click();
}
async _fillScheduleFields(data) {
if (data.payee) {
await this.page.getByRole('textbox', { name: 'Payee' }).fill(data.payee);
await this.page.keyboard.press('Enter');
}
if (data.account) {
await this.page
.getByRole('textbox', { name: 'Account' })
.fill(data.account);
await this.page.keyboard.press('Enter');
}
if (data.amount) {
await this.page.getByLabel('Amount').fill(String(data.amount));
// For some readon, the input field does not trigger the change event on tests
// but it works on the browser. We can revisit this once migration to
// react aria components is complete.
await this.page.keyboard.press('Enter');
}
}
}