mirror of
https://github.com/n8n-io/n8n.git
synced 2026-05-30 16:26:59 +02:00
66 lines
2.8 KiB
TypeScript
66 lines
2.8 KiB
TypeScript
import { expect } from '@playwright/test';
|
|
|
|
import type { n8nPage } from '../pages/n8nPage';
|
|
|
|
/**
|
|
* A class for user interactions with templates that go across multiple pages.
|
|
*/
|
|
export class TemplatesComposer {
|
|
constructor(private readonly n8n: n8nPage) {}
|
|
|
|
/**
|
|
* Navigates to templates page, waits for loading to complete,
|
|
* selects the first available template, and imports it to a new workflow
|
|
* @returns Promise that resolves when the template has been imported
|
|
*/
|
|
async importFirstTemplate(): Promise<void> {
|
|
await this.n8n.navigate.toTemplates();
|
|
await expect(this.n8n.templates.getSkeletonLoader()).toBeHidden();
|
|
await expect(this.n8n.templates.getFirstTemplateCard()).toBeVisible();
|
|
await expect(this.n8n.templates.getTemplatesLoadingContainer()).toBeHidden();
|
|
|
|
await this.n8n.templates.clickFirstTemplateCard();
|
|
await expect(this.n8n.templates.getUseTemplateButton()).toBeVisible();
|
|
|
|
await this.n8n.templates.clickUseTemplateButton();
|
|
// New workflows redirect to /workflow/<id>?new=true with optional templateId
|
|
await expect(this.n8n.page).toHaveURL(/\/workflow\/[a-zA-Z0-9_-]+\?.*new=true/);
|
|
}
|
|
|
|
/**
|
|
* Fill in dummy credentials for an app in the template credential setup flow
|
|
* Opens credential creation, fills name, saves, and closes modal
|
|
* @param appName - The name of the app (e.g. 'Shopify', 'X (Formerly Twitter)')
|
|
*/
|
|
async fillDummyCredentialForApp(
|
|
appName: string,
|
|
{ fields }: { fields: Record<string, string> } = { fields: {} },
|
|
): Promise<void> {
|
|
await this.n8n.templateCredentialSetup.openCredentialCreation(appName);
|
|
await this.n8n.templateCredentialSetup.credentialModal.getCredentialName().click();
|
|
await this.n8n.templateCredentialSetup.credentialModal.getNameInput().fill('test');
|
|
await this.n8n.templateCredentialSetup.credentialModal.fillAllFields(fields);
|
|
await this.n8n.templateCredentialSetup.credentialModal.save();
|
|
await this.n8n.templateCredentialSetup.credentialModal.close();
|
|
}
|
|
|
|
/**
|
|
* Fill in dummy credentials for an OAuth app.
|
|
* OAuth credentials have no Save button — clicking Connect implicitly saves.
|
|
* @param appName - The name of the app (e.g. 'X (Formerly Twitter)')
|
|
*/
|
|
async fillDummyCredentialForOAuthApp(
|
|
appName: string,
|
|
{ fields }: { fields: Record<string, string> } = { fields: {} },
|
|
): Promise<void> {
|
|
await this.n8n.templateCredentialSetup.openCredentialCreation(appName);
|
|
await this.n8n.templateCredentialSetup.credentialModal.getCredentialName().click();
|
|
await this.n8n.templateCredentialSetup.credentialModal.getNameInput().fill('test');
|
|
await this.n8n.templateCredentialSetup.credentialModal.fillAllFields(fields);
|
|
|
|
await this.n8n.templateCredentialSetup.credentialModal.oauthConnectButton.click();
|
|
await this.n8n.templateCredentialSetup.credentialModal.close();
|
|
await this.n8n.templateCredentialSetup.dismissMessageBox();
|
|
}
|
|
}
|