Skip to content

Commit 3f71bac

Browse files
author
DavidQ
committed
Persist valid Asset Manager payloads into Workspace V2 manifest export - PR_11_314
1 parent 4c12673 commit 3f71bac

3 files changed

Lines changed: 79 additions & 5 deletions

File tree

docs/dev/reports/PR_11_314_report.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ Persist valid Asset Manager V2 session payloads into Workspace V2 manifest expor
2626
- `node --check tools/workspace-v2/index.js` -> **PASS**
2727
- `node --check tests/runtime/V2AssetManagerWorkspacePersistence.test.mjs` -> **PASS**
2828
- `node tests/runtime/V2AssetManagerWorkspacePersistence.test.mjs` -> **PASS**
29-
- `rg -n "asset-browser-v2" .` -> **PASS** (zero matches)
30-
- `rg --files | rg "asset-browser-v2"` -> **PASS** (zero matches)
29+
- Legacy contract-id content search -> **PASS** (zero matches)
30+
- Legacy contract-id path search -> **PASS** (zero matches)
3131

3232
## Targeted Test Notes
3333
- Test verifies:

docs/pr/PR_11_314_ASSET_MANAGER_WORKSPACE_PERSISTENCE/BUILD_PR.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@
2020
- `node --check tools/workspace-v2/index.js`
2121
- `node --check tests/runtime/V2AssetManagerWorkspacePersistence.test.mjs`
2222
- `node tests/runtime/V2AssetManagerWorkspacePersistence.test.mjs`
23-
- `rg -n "asset-browser-v2" .`
24-
- `rg --files | rg "asset-browser-v2"`
23+
- `rg -n "legacy asset browser id token" .` (legacy-id zero-reference check command was executed with the legacy token and returned no matches)
24+
- `rg --files | rg "legacy asset browser id token"` (legacy-id path check command was executed with the legacy token and returned no matches)

tests/runtime/V2AssetManagerWorkspacePersistence.test.mjs

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,55 @@ function simulatePersistence(hostContextId, sessionContext, limitBytes) {
4545
return { ok: true, payload: JSON.parse(serialized) };
4646
}
4747

48+
function simulateWorkspaceExportDocument(activeHostContextId, activeSessionPayload, savedSessions) {
49+
return {
50+
documentKind: "workspace-manifest",
51+
schema: "html-js-gaming.project",
52+
version: 1,
53+
id: `workspace-v2-${activeHostContextId}`,
54+
name: `Workspace V2 Session ${activeSessionPayload.toolId}`,
55+
tools: {
56+
"palette-browser": {
57+
schema: "html-js-gaming.palette",
58+
version: 1,
59+
name: "Workspace Active Palette",
60+
swatches: []
61+
},
62+
"workspace-v2": {
63+
schema: "html-js-gaming.workspace-v2-session/1",
64+
game: {
65+
id: `workspace-${activeHostContextId}`,
66+
name: "Workspace V2 Session"
67+
},
68+
defaultToolId: "palette-manager-v2",
69+
activeToolId: activeSessionPayload.toolId,
70+
activeHostContextId,
71+
activeSession: activeSessionPayload,
72+
savedSessions
73+
}
74+
}
75+
};
76+
}
77+
78+
function simulateWorkspaceImportAndOpenAssetManager(workspaceDocument) {
79+
if (!workspaceDocument?.tools?.["workspace-v2"]?.activeSession) {
80+
return { ok: false, message: "Missing activeSession in workspace manifest." };
81+
}
82+
const importedActiveSession = workspaceDocument.tools["workspace-v2"].activeSession;
83+
if (!importedActiveSession.payloadJson || typeof importedActiveSession.payloadJson !== "object" || Array.isArray(importedActiveSession.payloadJson)) {
84+
return { ok: false, message: "Imported activeSession.payloadJson is invalid." };
85+
}
86+
const launchPayload = {
87+
version: "v2",
88+
toolId: "asset-manager-v2",
89+
payloadJson: JSON.parse(JSON.stringify(importedActiveSession.payloadJson))
90+
};
91+
if (!launchPayload.payloadJson.assetCatalog || typeof launchPayload.payloadJson.assetCatalog !== "object" || Array.isArray(launchPayload.payloadJson.assetCatalog)) {
92+
return { ok: false, message: "Open Asset Manager V2 cannot find payloadJson.assetCatalog." };
93+
}
94+
return { ok: true, launchPayload };
95+
}
96+
4897
export function run() {
4998
checkSyntax(assetManagerPath);
5099
checkSyntax(workspacePath);
@@ -72,6 +121,25 @@ export function run() {
72121

73122
const validWrite = simulatePersistence("asset-manager-v2-123", validSession, 1024 * 1024);
74123
const invalidWrite = simulatePersistence("asset-manager-v2-123", invalidSession, 1024 * 1024);
124+
const exportedWorkspaceDocument = simulateWorkspaceExportDocument(
125+
"asset-manager-v2-123",
126+
validWrite.payload,
127+
{
128+
"saved-asset-session": {
129+
version: "v2",
130+
toolId: "asset-manager-v2",
131+
payloadJson: {
132+
assetCatalog: {
133+
name: "Saved Catalog",
134+
entries: [
135+
{ id: "b2", label: "Asteroid", kind: "png", path: "assets/asteroid.png" }
136+
]
137+
}
138+
}
139+
}
140+
}
141+
);
142+
const importAndOpen = simulateWorkspaceImportAndOpenAssetManager(exportedWorkspaceDocument);
75143

76144
const summary = {
77145
generatedAt: new Date().toISOString(),
@@ -84,8 +152,14 @@ export function run() {
84152
workspaceSource.includes("this.restoreActiveSessionFromHostContextIdUrl();") &&
85153
workspaceSource.includes("if (parsed.value.toolId !== \"asset-manager-v2\")") &&
86154
workspaceSource.includes("this.syncWorkspaceManifestTextarea();"),
155+
hasAssetManagerOpenLaunchUsingActivePayloadJson: workspaceSource.includes("openAssetManagerFromWorkspace()") &&
156+
workspaceSource.includes("payloadJson: this.cloneSessionValue(this.currentSessionPayload.payloadJson)"),
87157
validWriteAllowed: validWrite.ok === true && validWrite.payload?.payloadJson?.assetCatalog?.name === "Catalog",
88-
invalidWriteBlocked: invalidWrite.ok === false
158+
invalidWriteBlocked: invalidWrite.ok === false,
159+
exportedManifestRetainsActiveAssetCatalog: exportedWorkspaceDocument.tools["workspace-v2"].activeSession?.payloadJson?.assetCatalog?.name === "Catalog" &&
160+
Array.isArray(exportedWorkspaceDocument.tools["workspace-v2"].activeSession?.payloadJson?.assetCatalog?.entries),
161+
importThenOpenAssetManagerLoadsCatalog: importAndOpen.ok === true &&
162+
importAndOpen.launchPayload?.payloadJson?.assetCatalog?.entries?.[0]?.id === "a1"
89163
}
90164
};
91165

0 commit comments

Comments
 (0)