Last release of Blocknote introduced breaking changes for custom blocks. We adapted our custom blocks to the new implementation. "code-block" is considered as a block now, we update the way to import and use it. The custom blocks should be now more tiptap friendly.
130 lines
3.9 KiB
TypeScript
130 lines
3.9 KiB
TypeScript
import crypto from 'crypto';
|
|
|
|
import { expect, test } from '@playwright/test';
|
|
|
|
import {
|
|
createDoc,
|
|
expectLoginPage,
|
|
keyCloakSignIn,
|
|
mockedDocument,
|
|
verifyDocName,
|
|
} from './utils-common';
|
|
import { writeInEditor } from './utils-editor';
|
|
import { createRootSubPage } from './utils-sub-pages';
|
|
|
|
test.describe('Doc Routing', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/');
|
|
});
|
|
|
|
test('Check the presence of the meta tag noindex', async ({
|
|
page,
|
|
browserName,
|
|
}) => {
|
|
await createDoc(page, 'doc-routing-test', browserName, 1);
|
|
const metaDescription = page.locator('meta[name="robots"]');
|
|
await expect(metaDescription).toHaveAttribute('content', 'noindex');
|
|
});
|
|
|
|
test('checks alias docs url with homepage', async ({ page }) => {
|
|
await expect(page).toHaveURL('/');
|
|
|
|
const buttonCreateHomepage = page.getByRole('button', {
|
|
name: 'New doc',
|
|
});
|
|
|
|
await expect(buttonCreateHomepage).toBeVisible();
|
|
|
|
await page.goto('/docs/');
|
|
await expect(buttonCreateHomepage).toBeVisible();
|
|
await expect(page).toHaveURL(/\/docs\/$/);
|
|
});
|
|
|
|
test('checks 404 on docs/[id] page', async ({ page }) => {
|
|
await page.waitForTimeout(300);
|
|
|
|
await page.goto('/docs/some-unknown-doc');
|
|
await expect(
|
|
page.getByText(
|
|
'It seems that the page you are looking for does not exist or cannot be displayed correctly.',
|
|
),
|
|
).toBeVisible({
|
|
timeout: 15000,
|
|
});
|
|
});
|
|
|
|
test('checks 401 on docs/[id] page', async ({ page, browserName }) => {
|
|
const [docTitle] = await createDoc(page, '401-doc-parent', browserName, 1);
|
|
await verifyDocName(page, docTitle);
|
|
|
|
await createRootSubPage(page, browserName, '401-doc-child');
|
|
|
|
await writeInEditor({ page, text: 'Hello World' });
|
|
|
|
const responsePromise = page.route(
|
|
/.*\/documents\/.*\/$|users\/me\/$/,
|
|
async (route) => {
|
|
const request = route.request();
|
|
|
|
// When we quit a document, a PATCH request is sent to save the document.
|
|
// We intercept this request to simulate a 401 error from the backend.
|
|
// The GET request to users/me is also intercepted to simulate the user
|
|
// being logged out when trying to fetch user info.
|
|
// This way we can test the 401 error handling when saving the document
|
|
if (
|
|
(request.url().includes('/documents/') &&
|
|
request.method().includes('PATCH')) ||
|
|
(request.url().includes('/users/me/') &&
|
|
request.method().includes('GET'))
|
|
) {
|
|
await route.fulfill({
|
|
status: 401,
|
|
json: {
|
|
detail: 'Log in to access the document',
|
|
},
|
|
});
|
|
} else {
|
|
await route.continue();
|
|
}
|
|
},
|
|
);
|
|
|
|
await page.getByRole('link', { name: '401-doc-parent' }).click();
|
|
|
|
await responsePromise;
|
|
|
|
await expect(page.getByText('Log in to access the document.')).toBeVisible({
|
|
timeout: 10000,
|
|
});
|
|
|
|
await expect(page.locator('meta[name="robots"]')).toHaveAttribute(
|
|
'content',
|
|
'noindex',
|
|
);
|
|
await expect(page).toHaveTitle(/401 Unauthorized - Docs/);
|
|
});
|
|
});
|
|
|
|
test.describe('Doc Routing: Not logged', () => {
|
|
test.use({ storageState: { cookies: [], origins: [] } });
|
|
|
|
test('checks redirect to a doc after login', async ({
|
|
page,
|
|
browserName,
|
|
}) => {
|
|
const uuid = crypto.randomUUID();
|
|
await mockedDocument(page, { link_reach: 'public', id: uuid });
|
|
await page.goto(`/docs/${uuid}/`);
|
|
await expect(page.locator('h2').getByText('Mocked document')).toBeVisible();
|
|
await page.getByRole('button', { name: 'Login' }).click();
|
|
await keyCloakSignIn(page, browserName, false);
|
|
await expect(page.locator('h2').getByText('Mocked document')).toBeVisible();
|
|
});
|
|
|
|
// eslint-disable-next-line playwright/expect-expect
|
|
test('The homepage redirects to login.', async ({ page }) => {
|
|
await page.goto('/');
|
|
await expectLoginPage(page);
|
|
});
|
|
});
|