mirror of
https://github.com/phantomptr/ps5upload.git
synced 2026-10-22 03:42:55 -05:00
Tasks (/tasks): drop the Telemetry view (a copy of Hardware, mostly blank on retail firmware); fold Timeline into History (same data); Stats becomes a tab (?tab=stats, /stats redirects, nav item removed). The History tab has its own label instead of the changelog's "Full history". Clear history and Clear running act on the console being shown, not every console. A running row's button says what it really does: Cancel for uploads (queue too), FS ops and op-id ops; Stop watching for downloads; none when nothing can stop. Stats: count upload-queue bytes as uploaded, rank only network transfers as fastest (no on-console copies or installs), scope to the shown console, and say the totals cover the last 100 operations. Audit log: also record File System / library deletes, unregisters, uninstalls and installs; describe it truthfully (a 256-entry local ring). Logs: hide the recording level in the browser build (no disk log there); the kernel category explainer described a default-hidden set that is empty. Health: label the engine's network category. Notifications: both texts now say it lists ps5upload's own TV messages. Changelog: the whole file is bundled. About: tiles for the current features, payload sending only where it works. FAQ: Copy link only in the browser build, under the served base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
// Which Browse buttons reach saved servers. A picker that reads a source gets the ▾ server menu
|
|
// (<BrowseButton … remote …>); a picker that chooses where to SAVE stays local until saving to a
|
|
// server exists, because every consumer of its path writes to local disk.
|
|
// Read the screens as raw text at transform time, like browserInvokeCoverage.test.ts does.
|
|
const SOURCES = import.meta.glob("../screens/**/*.tsx", {
|
|
query: "?raw",
|
|
import: "default",
|
|
eager: true,
|
|
}) as Record<string, string>;
|
|
const src = (p: string) => {
|
|
const text = SOURCES[`../${p}`];
|
|
if (text === undefined) throw new Error(`no source ${p}`);
|
|
return text;
|
|
};
|
|
const remoteButtons = (text: string) => (text.match(/<BrowseButton[^>]*?\bremote\b/gs) ?? []).length;
|
|
|
|
describe("source pickers reach saved servers", () => {
|
|
it.each([
|
|
["screens/Upload/index.tsx", 2],
|
|
["screens/InstallPackage/index.tsx", 1],
|
|
["screens/FileSystem/index.tsx", 1],
|
|
["screens/Payloads/SendPanel.tsx", 1],
|
|
["screens/Payloads/PlaylistsPanel.tsx", 1],
|
|
["screens/FpkgConvert/GameCard.tsx", 2],
|
|
])("%s offers servers on its source picker", (file, n) => {
|
|
expect(remoteButtons(src(file))).toBe(n);
|
|
});
|
|
|
|
it.each([
|
|
"screens/Screenshots/index.tsx",
|
|
"screens/Videos/index.tsx",
|
|
"screens/BugReport/index.tsx",
|
|
"screens/Settings/index.tsx",
|
|
"screens/Search/index.tsx",
|
|
"screens/Logs/AppLogsPanel.tsx",
|
|
"screens/Activity/StatsPanel.tsx",
|
|
"screens/Saves/index.tsx",
|
|
"screens/LocalImage/index.tsx",
|
|
"screens/Upload/FfpkgInspectorPanel.tsx",
|
|
])("%s keeps local pickers", (file) => {
|
|
expect(remoteButtons(src(file))).toBe(0);
|
|
});
|
|
});
|