90 lines
2.8 KiB
JavaScript
90 lines
2.8 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
|
import test from 'node:test';
|
|
import { createServer } from 'vite';
|
|
|
|
test('components render root, browse, upload, delete, resume, notice, and error states', async () => {
|
|
const server = await createServer({
|
|
appType: 'custom',
|
|
configFile: false,
|
|
plugins: [svelte()],
|
|
server: { hmr: false, middlewareMode: true }
|
|
});
|
|
try {
|
|
const { render } = await server.ssrLoadModule('svelte/server');
|
|
const WorkspaceHeader = await component(server, 'WorkspaceHeader');
|
|
const workspace = render(WorkspaceHeader, {
|
|
props: { root: 'shared', busy: false, onselect: async () => {} }
|
|
}).body;
|
|
assert.match(workspace, /Shared files/);
|
|
assert.match(workspace, /Shared root/);
|
|
assert.match(workspace, /Personal/);
|
|
|
|
const UploadPanel = await component(server, 'UploadPanel');
|
|
assert.match(
|
|
render(UploadPanel, {
|
|
props: { busy: false, onfile: async () => {} }
|
|
}).body,
|
|
/Drop a file here/
|
|
);
|
|
|
|
const ObjectBrowser = await component(server, 'ObjectBrowser');
|
|
const browser = render(ObjectBrowser, {
|
|
props: {
|
|
root: 'shared',
|
|
entries: [
|
|
{ name: 'folder', is_prefix: true, size: null, path: 'folder' }
|
|
],
|
|
continuation: 'next',
|
|
partial: true,
|
|
busy: false,
|
|
query: 'fold',
|
|
onquery: () => {},
|
|
onbrowse: async () => {},
|
|
onopen: async () => {},
|
|
ondelete: async () => {}
|
|
}
|
|
}).body;
|
|
assert.match(browser, /Search this root/);
|
|
assert.match(browser, /Partial search results/);
|
|
assert.match(browser, /folder\//);
|
|
assert.match(browser, /Delete/);
|
|
assert.match(browser, /Clear/);
|
|
|
|
const ResumeDelete = await component(server, 'ResumeDelete');
|
|
assert.match(
|
|
render(ResumeDelete, {
|
|
props: {
|
|
pending: { root: 'personal', prefix: 'tree', items: [] },
|
|
busy: false,
|
|
onresume: async () => {}
|
|
}
|
|
}).body,
|
|
/Resume deletion/
|
|
);
|
|
|
|
const Feedback = await component(server, 'Feedback');
|
|
const feedback = render(Feedback, {
|
|
props: {
|
|
notice: 'Uploaded file.txt',
|
|
error: 'Delete is pending',
|
|
uploadPending: true,
|
|
uploadFollowup: 'replay',
|
|
deletePending: true,
|
|
deleteFollowup: 'restart',
|
|
onuploadretry: async () => {},
|
|
ondeleteretry: async () => {}
|
|
}
|
|
}).body;
|
|
assert.match(feedback, /Uploaded file\.txt/);
|
|
assert.match(feedback, /Retry same upload/);
|
|
assert.match(feedback, /Start new delete operation/);
|
|
} finally {
|
|
await server.close();
|
|
}
|
|
});
|
|
|
|
async function component(server, name) {
|
|
const loaded = await server.ssrLoadModule(`/src/components/${name}.svelte`);
|
|
return loaded.default;
|
|
}
|