first commit
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
import type { Locator } from '@playwright/test';
|
||||
|
||||
import { BasePage } from './BasePage';
|
||||
import { AddResource } from './components/AddResource';
|
||||
import { ResourceCards } from './components/ResourceCards';
|
||||
|
||||
export class WorkflowsPage extends BasePage {
|
||||
readonly addResource = new AddResource(this.page);
|
||||
readonly cards = new ResourceCards(this.page);
|
||||
|
||||
/**
|
||||
* This is the new workflow button on the workflows page, visible when there are no workflows.
|
||||
*/
|
||||
async clickNewWorkflowButtonFromOverview() {
|
||||
await this.clickByTestId('new-workflow-card');
|
||||
}
|
||||
|
||||
async clickNewWorkflowButtonFromProject() {
|
||||
await this.clickByTestId('add-resource-workflow');
|
||||
}
|
||||
|
||||
async clearSearch() {
|
||||
await this.clickByTestId('resources-list-search');
|
||||
await this.page.getByTestId('resources-list-search').clear();
|
||||
}
|
||||
|
||||
getProjectName() {
|
||||
return this.page.getByTestId('project-name');
|
||||
}
|
||||
|
||||
getSearchBar() {
|
||||
return this.page.getByTestId('resources-list-search');
|
||||
}
|
||||
|
||||
async unarchiveWorkflow(workflowItem: Locator) {
|
||||
await workflowItem.getByTestId('workflow-card-actions').click();
|
||||
await this.page.getByRole('menuitem', { name: 'Unarchive' }).click();
|
||||
}
|
||||
|
||||
async deleteWorkflow(workflowItem: Locator) {
|
||||
await workflowItem.getByTestId('workflow-card-actions').click();
|
||||
await this.page.getByTestId('action-delete').click();
|
||||
await this.page.getByRole('button', { name: 'delete' }).click();
|
||||
}
|
||||
|
||||
async search(searchTerm: string) {
|
||||
await this.clickByTestId('resources-list-search');
|
||||
await this.fillByTestId('resources-list-search', searchTerm);
|
||||
}
|
||||
|
||||
getNoWorkflowsFoundMessage() {
|
||||
return this.page.getByText('No workflows found');
|
||||
}
|
||||
|
||||
async shareWorkflow(workflowName: string) {
|
||||
const workflow = this.cards.getWorkflow(workflowName);
|
||||
await workflow.getByTestId('workflow-card-actions').click();
|
||||
await this.page.getByRole('menuitem', { name: 'Share...' }).click();
|
||||
}
|
||||
|
||||
getArchiveMenuItem() {
|
||||
return this.page.getByRole('menuitem', { name: 'Archive' });
|
||||
}
|
||||
|
||||
async archiveWorkflow(workflowItem: Locator) {
|
||||
await workflowItem.getByTestId('workflow-card-actions').click();
|
||||
await this.getArchiveMenuItem().click();
|
||||
}
|
||||
|
||||
async unpublishWorkflow(workflowItem: Locator) {
|
||||
await workflowItem.getByTestId('workflow-card-actions').click();
|
||||
await this.page.getByRole('menuitem', { name: 'Unpublish' }).click();
|
||||
await this.page.getByRole('button', { name: 'Unpublish' }).click();
|
||||
}
|
||||
|
||||
async openFilters() {
|
||||
await this.clickByTestId('resources-list-filters-trigger');
|
||||
}
|
||||
|
||||
async closeFilters() {
|
||||
await this.clickByTestId('resources-list-filters-trigger');
|
||||
}
|
||||
|
||||
getShowArchivedCheckbox() {
|
||||
return this.page.getByTestId('show-archived-checkbox');
|
||||
}
|
||||
|
||||
async toggleShowArchived() {
|
||||
await this.openFilters();
|
||||
await this.getShowArchivedCheckbox().click();
|
||||
await this.closeFilters();
|
||||
}
|
||||
|
||||
async filterByTags(tags: string[]) {
|
||||
await this.openFilters();
|
||||
await this.clickByTestId('tags-dropdown');
|
||||
|
||||
for (const tag of tags) {
|
||||
await this.page.getByRole('option', { name: tag }).locator('span').click();
|
||||
}
|
||||
|
||||
await this.closeFilters();
|
||||
}
|
||||
|
||||
async filterByTag(tag: string) {
|
||||
await this.filterByTags([tag]);
|
||||
}
|
||||
getFolderBreadcrumbsActions() {
|
||||
return this.page.getByTestId('folder-breadcrumbs-actions');
|
||||
}
|
||||
|
||||
getFolderBreadcrumbsActionToggle() {
|
||||
return this.page.getByTestId('action-toggle-dropdown');
|
||||
}
|
||||
|
||||
getFolderBreadcrumbsAction(actionName: string) {
|
||||
return this.getFolderBreadcrumbsActionToggle().getByTestId(`action-${actionName}`);
|
||||
}
|
||||
|
||||
addFolderButton() {
|
||||
return this.page.getByTestId('add-folder-button');
|
||||
}
|
||||
|
||||
// Add region for actions
|
||||
|
||||
/**
|
||||
* Add a folder from the add resource dropdown
|
||||
* @returns The name of the folder
|
||||
*/
|
||||
async addFolder() {
|
||||
const folderName = 'My Test Folder';
|
||||
await this.addResource.folder();
|
||||
await this.fillFolderModal(folderName);
|
||||
return folderName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill the folder modal
|
||||
* @param folderName - The name of the folder
|
||||
* @param buttonText - The text of the button to click (default: 'Create')
|
||||
*/
|
||||
async fillFolderModal(folderName: string, buttonText: string = 'Create') {
|
||||
await this.baseModal.fillInput(folderName);
|
||||
await this.baseModal.clickButton(buttonText);
|
||||
}
|
||||
|
||||
deleteFolderModal() {
|
||||
return this.page.getByTestId('deleteFolder-modal');
|
||||
}
|
||||
|
||||
deleteModalTransferRadioButton() {
|
||||
return this.deleteFolderModal().getByTestId('transfer-content-radio');
|
||||
}
|
||||
|
||||
deleteModalConfirmButton() {
|
||||
return this.deleteFolderModal().getByTestId('confirm-delete-folder-button');
|
||||
}
|
||||
|
||||
transferFolderDropdown() {
|
||||
return this.deleteFolderModal().getByRole('combobox', { name: 'Select a folder' });
|
||||
}
|
||||
|
||||
transferFolderOption(folderName: string) {
|
||||
return this.page.getByTestId('move-to-folder-option').filter({ hasText: folderName });
|
||||
}
|
||||
|
||||
// Move folder modal methods
|
||||
moveFolderModal() {
|
||||
return this.page.getByTestId('moveFolder-modal');
|
||||
}
|
||||
|
||||
moveFolderDropdown() {
|
||||
return this.moveFolderModal().getByTestId('move-to-folder-dropdown').getByRole('combobox');
|
||||
}
|
||||
|
||||
moveFolderOption(folderName: string) {
|
||||
return this.page.getByTestId('move-to-folder-option').filter({ hasText: folderName });
|
||||
}
|
||||
|
||||
moveFolderConfirmButton() {
|
||||
return this.moveFolderModal().getByTestId('confirm-move-folder-button');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user