fix(files): review round 1, the page — honest states, the keyboard, the tray's words
- A library past the list's cap is searched and sorted on the server; the count says "the newest". - Each folder and each search opens on its first page (DataTable pageScope, useCardPager scope). - A file dropped where the page takes none never reaches the browser (which would unload the app). - The viewer's arrows wait while a layer opened from it is on top, and scroll a wide text line; a text shows its first 5000 lines and says where the rest is. - Confirms name the file (no more "your downloads"); the asking menu rows end in "…". - The tray names a running step beside its bar, shows a pause mark for paused work, polls slowly while only paused work waits, and forgets a finished file that was deleted. - An unchanged rename sends nothing; a paste opens the download dialog only with nothing on top; the link box never replaces what was typed. - Honest states: folders that failed to load, a file no longer there, the storage figure; the rail says "nothing downloaded" only when there is nothing. - Focus after deleting the open folder and when the format form opens; the format name's label. - ui/Meter (one danger line for both quota bars) and ui/RenameField in the platform layer. - Copy fixes, stale comments and the speculative hub key; a contract test for the list's parameters; e2e: the Files page and the paste intake.
This commit is contained in:
@@ -155,3 +155,31 @@ describe("FilesRail · folders", () => {
|
||||
await waitFor(() => expect(document.activeElement).toBe(entry("Receptek")));
|
||||
});
|
||||
});
|
||||
|
||||
describe("FilesRail · what it says when a part is empty or missing", () => {
|
||||
it("says nothing was downloaded only when nothing is there — not when it all moved into own folders", async () => {
|
||||
await mount([folder(1, { source_key: "youtube", count: 0 }), { ...OWN, count: 3 }]);
|
||||
expect(screen.queryByText("files.rail.noSources")).toBeNull();
|
||||
cleanup();
|
||||
await mount([folder(1, { source_key: "youtube", count: 0 }), { ...OWN, count: 0 }]);
|
||||
expect(screen.getByText("files.rail.noSources")).toBeTruthy();
|
||||
});
|
||||
|
||||
it("a storage figure that failed to load says so, rather than the meter quietly not being there", async () => {
|
||||
vi.spyOn(api, "fileFolders").mockResolvedValue([YT, OWN]);
|
||||
vi.spyOn(api, "filesUsage").mockRejectedValue(new Error("down"));
|
||||
render(
|
||||
<QueryClientProvider
|
||||
client={new QueryClient({ defaultOptions: { queries: { retry: false } } })}
|
||||
>
|
||||
<FilesRail
|
||||
layout={defaultLayout("files")}
|
||||
setLayout={vi.fn()}
|
||||
collapsed={false}
|
||||
onToggleCollapse={vi.fn()}
|
||||
/>
|
||||
</QueryClientProvider>,
|
||||
);
|
||||
expect(await screen.findByText("files.usage.failed")).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user