70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
import { readFileSync } from 'node:fs';
|
|
|
|
const basisFixture = readFileSync(
|
|
new URL('../fixtures/viewer3d/BasisTexture.gltf', import.meta.url),
|
|
);
|
|
const basisTexture = readFileSync(
|
|
new URL('../fixtures/viewer3d/BasisTexture.ktx2', import.meta.url),
|
|
);
|
|
|
|
test('viewer3d resolves bundled model decoders under a production subpath', async ({
|
|
page,
|
|
}) => {
|
|
const failedRequests: string[] = [];
|
|
const responseUrls: string[] = [];
|
|
page.on('requestfailed', (request) => failedRequests.push(request.url()));
|
|
page.on('response', (response) => responseUrls.push(response.url()));
|
|
await page.route(
|
|
/^https?:\/\/[^/?]+\/viewer-3d\/e2e-fixtures\/BasisTexture\.gltf(?:\?.*)?$/,
|
|
(route) =>
|
|
route.fulfill({
|
|
body: basisFixture,
|
|
contentType: 'model/gltf+json',
|
|
}),
|
|
);
|
|
await page.route(
|
|
/^https?:\/\/[^/?]+\/viewer-3d\/e2e-fixtures\/BasisTexture\.ktx2(?:\?.*)?$/,
|
|
(route) =>
|
|
route.fulfill({
|
|
body: basisTexture,
|
|
contentType: 'image/ktx2',
|
|
}),
|
|
);
|
|
|
|
for (const fixture of [
|
|
'samples/Duck.optimized.glb',
|
|
'e2e-fixtures/BasisTexture.gltf',
|
|
'samples/Cube.ifc',
|
|
]) {
|
|
await page.goto(
|
|
`http://127.0.0.1:43174/viewer-3d/?model=/viewer-3d/${fixture}`,
|
|
);
|
|
await page.waitForFunction(
|
|
() =>
|
|
Boolean(
|
|
(
|
|
window as Window & {
|
|
__viewer?: { current?: object };
|
|
}
|
|
).__viewer?.current,
|
|
),
|
|
undefined,
|
|
{ timeout: 20_000 },
|
|
);
|
|
}
|
|
|
|
expect(
|
|
responseUrls.some((url) =>
|
|
/\/viewer-3d\/assets\/draco_decoder-.+\.wasm$/.test(new URL(url).pathname),
|
|
),
|
|
).toBe(true);
|
|
expect(
|
|
responseUrls.some((url) =>
|
|
/\/viewer-3d\/assets\/basis_transcoder-.+\.wasm$/.test(new URL(url).pathname),
|
|
),
|
|
).toBe(true);
|
|
expect(responseUrls.some((url) => url.endsWith('/viewer-3d/web-ifc/web-ifc.wasm'))).toBe(true);
|
|
expect(failedRequests).toEqual([]);
|
|
});
|