Files
LangBot/web/tests/e2e/bot-save-errors.spec.ts
T

56 lines
2.0 KiB
TypeScript

import { expect, test } from '@playwright/test';
import { installLangBotApiMocks } from './fixtures/langbot-api';
for (const failure of [
{
status: 400,
code: 'invalid_bot_config',
msg: 'Lark missing required config: app_id, app_secret, bot_name',
},
{
status: 400,
code: 'bot_apply_failed',
msg: 'Lark missing required config: app_id, app_secret, bot_name',
},
{
status: 500,
code: 'internal_error',
msg: 'Internal server error',
request_id: 'bot-save-test-reference',
},
]) {
test(`bot save displays actionable ${failure.code}`, async ({ page }) => {
await installLangBotApiMocks(page, { authenticated: true });
await page.goto('/home/bots?id=new');
await page.getByRole('combobox').click();
await page.getByRole('option', { name: 'Playwright Adapter' }).click();
await page.locator('input[name="name"]').fill('Error Test Bot');
await page.getByRole('button', { name: /^Submit$/ }).click();
await expect(page).toHaveURL(/\/home\/bots\?id=bot-1$/);
await page.route('**/api/v1/platform/bots/bot-1', async (route) => {
if (route.request().method() !== 'PUT') return route.fallback();
await route.fulfill({
status: failure.status,
contentType: 'application/json',
body: JSON.stringify(failure),
});
});
await page.getByRole('button', { name: 'Edit basic information' }).click();
const dialog = page.getByRole('dialog');
await dialog.getByLabel('Name', { exact: true }).fill('Edited Bot');
await dialog.getByRole('button', { name: /^Save$/ }).click();
if (failure.code === 'internal_error') {
await expect(
page.getByText('Error reference: bot-save-test-reference'),
).toBeVisible();
} else {
await expect(page.getByText(failure.msg, { exact: true })).toBeVisible();
}
if (failure.code === 'bot_apply_failed') {
await expect(
page.getByText('Configuration saved, but could not be applied'),
).toBeVisible();
}
});
}