test(assets): e2e coverage for the assets-mode model library sidebar#13574
test(assets): e2e coverage for the assets-mode model library sidebar#13574synap5e wants to merge 10 commits into
Conversation
Mirrors 9e5fb67 verbatim so the stack rebase merges cleanly.
Covers the integration seams the unit suites mock away: settings-driven tab routing (asset browser modal vs sidebar tree, including the cloud defaults), the eager-loaded asset-mode tree rendered from a mocked walk with registration-order folders and extension display filtering, refresh seeding a backend rescan with live tree/search updates on the assets.seed.fast_complete websocket event, and ghost placement filling the loader widget with the category-relative loader_path. All assets endpoints are mocked so the suite does not depend on the CI container backend having the assets API. AssetHelper's route pattern is narrowed to **/api/assets** so navigating after mock() no longer intercepts the built frontend's /assets/*.js chunks.
The active-search scan test now proves the eager load and debounced search pipeline settled (via a hit on existing data) before the mock changes, so it can no longer false-pass off a still-pending load. The bare-tag test forces supports_model_type_tags off instead of inheriting whatever the test backend advertises, which would have broken once CI's backend gained the capability. The seed mock response is typed as SeedAssetsResponse per the typed-mock rule.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughAdds browser-test infrastructure and coverage for model library asset mode, seed rescans, feature flags, routing, model placement, and bare-tag backends. It also updates a graph regression assertion to use branded link IDs. ChangesModel library asset and routing coverage
Graph link assertion alignment
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant Sidebar
participant AssetHelper
participant AppAPI
Sidebar->>AssetHelper: POST /assets/seed
AssetHelper-->>Sidebar: status started
AppAPI-->>Sidebar: assets.seed.fast_complete
Sidebar-->>Sidebar: refresh tree and active search results
Possibly related PRs
Suggested reviewers: Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 inconclusive)
✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
🎭 Playwright: ✅ 1708 passed, 0 failed📊 Browser Reports
📦 Bundle Size
⚡ Performance Report
Absolute values
Raw data{
"timestamp": "2026-07-17T21:38:34.135Z",
"gitSha": "06efd29a335cec3e9d8c757d1fd82ee3b101eb41",
"branch": "synap5e/test/assets-sidebar-e2e",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2075.7520000000227,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.5470000000000015,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 473.048,
"heapDeltaBytes": 34913064,
"heapUsedBytes": 93811312,
"domNodes": 16,
"jsHeapTotalBytes": 46137344,
"scriptDurationMs": 18.645999999999997,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-idle",
"durationMs": 2071.2630000000445,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.425000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 407.909,
"heapDeltaBytes": -7389664,
"heapUsedBytes": 62428064,
"domNodes": -277,
"jsHeapTotalBytes": 18759680,
"scriptDurationMs": 14.992999999999997,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1858.3540000000198,
"styleRecalcs": 72,
"styleRecalcDurationMs": 38.023,
"layouts": 12,
"layoutDurationMs": 3.653,
"taskDurationMs": 821.352,
"heapDeltaBytes": -5153580,
"heapUsedBytes": 46871364,
"domNodes": -277,
"jsHeapTotalBytes": 16904192,
"scriptDurationMs": 121.023,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1791.3689999999747,
"styleRecalcs": 73,
"styleRecalcDurationMs": 34.556000000000004,
"layouts": 12,
"layoutDurationMs": 3.5509999999999997,
"taskDurationMs": 764.815,
"heapDeltaBytes": -2059304,
"heapUsedBytes": 50048872,
"domNodes": -265,
"jsHeapTotalBytes": 16117760,
"scriptDurationMs": 120.834,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1707.809999999995,
"styleRecalcs": 31,
"styleRecalcDurationMs": 16.912999999999997,
"layouts": 6,
"layoutDurationMs": 0.5109999999999999,
"taskDurationMs": 360.94100000000003,
"heapDeltaBytes": -3663580,
"heapUsedBytes": 66163952,
"domNodes": -225,
"jsHeapTotalBytes": 13254656,
"scriptDurationMs": 18.058999999999997,
"eventListeners": -184,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1706.3080000000355,
"styleRecalcs": 31,
"styleRecalcDurationMs": 16.13,
"layouts": 6,
"layoutDurationMs": 0.5569999999999999,
"taskDurationMs": 299.853,
"heapDeltaBytes": 2617652,
"heapUsedBytes": 61530048,
"domNodes": 77,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 17.704000000000004,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 595.9080000000085,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.220000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 333.145,
"heapDeltaBytes": 12636936,
"heapUsedBytes": 70094812,
"domNodes": 18,
"jsHeapTotalBytes": 18350080,
"scriptDurationMs": 56.93,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66666666666665,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 595.8249999999907,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.697999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 381.415,
"heapDeltaBytes": -22485076,
"heapUsedBytes": 47334916,
"domNodes": -279,
"jsHeapTotalBytes": 5652480,
"scriptDurationMs": 55.85999999999999,
"eventListeners": -203,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66666666666665,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2037.3430000000212,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.627,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 560.307,
"heapDeltaBytes": -8892896,
"heapUsedBytes": 58640072,
"domNodes": -266,
"jsHeapTotalBytes": -1847296,
"scriptDurationMs": 101.80699999999999,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-idle",
"durationMs": 2040.4049999999643,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.549000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 537.096,
"heapDeltaBytes": -1310220,
"heapUsedBytes": 58690640,
"domNodes": -273,
"jsHeapTotalBytes": -569344,
"scriptDurationMs": 96.40799999999999,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2121.188000000018,
"styleRecalcs": 68,
"styleRecalcDurationMs": 17.923000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1128.6260000000002,
"heapDeltaBytes": 11467708,
"heapUsedBytes": 84538236,
"domNodes": 14,
"jsHeapTotalBytes": 11329536,
"scriptDurationMs": 406.76,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2120.0900000000047,
"styleRecalcs": 70,
"styleRecalcDurationMs": 19.779999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1033.239,
"heapDeltaBytes": 10159620,
"heapUsedBytes": 83511756,
"domNodes": 18,
"jsHeapTotalBytes": 11067392,
"scriptDurationMs": 395.59299999999996,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3112.482,
"styleRecalcs": 62,
"styleRecalcDurationMs": 15.399,
"layouts": 60,
"layoutDurationMs": 7.2090000000000005,
"taskDurationMs": 1284.32,
"heapDeltaBytes": 13448436,
"heapUsedBytes": 69735396,
"domNodes": 6,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 490.89099999999996,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3084.446000000071,
"styleRecalcs": 63,
"styleRecalcDurationMs": 15.840999999999998,
"layouts": 60,
"layoutDurationMs": 6.978,
"taskDurationMs": 1277.0159999999998,
"heapDeltaBytes": 14335012,
"heapUsedBytes": 68300692,
"domNodes": 8,
"jsHeapTotalBytes": 262144,
"scriptDurationMs": 514.6999999999999,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 1999.2599999999925,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.449999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 499.551,
"heapDeltaBytes": -10528332,
"heapUsedBytes": 66360980,
"domNodes": 18,
"jsHeapTotalBytes": 7745536,
"scriptDurationMs": 92.51499999999999,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2001.0919999999714,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.968999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 475.2420000000001,
"heapDeltaBytes": 10549076,
"heapUsedBytes": 67302056,
"domNodes": 18,
"jsHeapTotalBytes": 6291456,
"scriptDurationMs": 86.32300000000001,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 555.9499999999957,
"styleRecalcs": 47,
"styleRecalcDurationMs": 11.554000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 354.209,
"heapDeltaBytes": 8459708,
"heapUsedBytes": 67415768,
"domNodes": 20,
"jsHeapTotalBytes": 18350080,
"scriptDurationMs": 119.16399999999999,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 576.043000000027,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.819999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 372.933,
"heapDeltaBytes": 11905024,
"heapUsedBytes": 73195488,
"domNodes": 20,
"jsHeapTotalBytes": 22020096,
"scriptDurationMs": 141.289,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-idle",
"durationMs": 2040.7579999999825,
"styleRecalcs": 11,
"styleRecalcDurationMs": 10.490999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 410.07099999999997,
"heapDeltaBytes": -7484344,
"heapUsedBytes": 62470096,
"domNodes": -276,
"jsHeapTotalBytes": 19283968,
"scriptDurationMs": 13.436000000000002,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 2032.8719999999976,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.470999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 389.61400000000003,
"heapDeltaBytes": 12516632,
"heapUsedBytes": 64484020,
"domNodes": -273,
"jsHeapTotalBytes": 15855616,
"scriptDurationMs": 12.943999999999999,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1683.5810000000038,
"styleRecalcs": 76,
"styleRecalcDurationMs": 36.097,
"layouts": 16,
"layoutDurationMs": 3.659,
"taskDurationMs": 653.7330000000001,
"heapDeltaBytes": -9327052,
"heapUsedBytes": 49608440,
"domNodes": 64,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 88.497,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1725.5089999999882,
"styleRecalcs": 76,
"styleRecalcDurationMs": 35.954,
"layouts": 16,
"layoutDurationMs": 4.5840000000000005,
"taskDurationMs": 699.161,
"heapDeltaBytes": 16895100,
"heapUsedBytes": 69783084,
"domNodes": -269,
"jsHeapTotalBytes": 14544896,
"scriptDurationMs": 86.384,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-transition-enter",
"durationMs": 982.3539999999866,
"styleRecalcs": 19,
"styleRecalcDurationMs": 32.45400000000001,
"layouts": 15,
"layoutDurationMs": 15.152000000000003,
"taskDurationMs": 762.6799999999998,
"heapDeltaBytes": 27374424,
"heapUsedBytes": 95374120,
"domNodes": 13682,
"jsHeapTotalBytes": 6291456,
"scriptDurationMs": 28.05400000000001,
"eventListeners": 2531,
"totalBlockingTimeMs": 168,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "viewport-pan-sweep",
"durationMs": 8169.93100000002,
"styleRecalcs": 252,
"styleRecalcDurationMs": 54.274,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3744.2850000000003,
"heapDeltaBytes": -15645432,
"heapUsedBytes": 68991896,
"domNodes": -268,
"jsHeapTotalBytes": 7618560,
"scriptDurationMs": 1290.324,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8155.648999999926,
"styleRecalcs": 250,
"styleRecalcDurationMs": 50.105999999999995,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3607.675,
"heapDeltaBytes": 1038472,
"heapUsedBytes": 68470872,
"domNodes": -273,
"jsHeapTotalBytes": 716800,
"scriptDurationMs": 1265.1589999999999,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 12206.613000000005,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 12189.28,
"heapDeltaBytes": -31090184,
"heapUsedBytes": 174574524,
"domNodes": -8314,
"jsHeapTotalBytes": 22609920,
"scriptDurationMs": 594.1919999999999,
"eventListeners": -16372,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333237,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 11731.387999999924,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 11713.855000000001,
"heapDeltaBytes": -30298856,
"heapUsedBytes": 182635652,
"domNodes": -3300,
"jsHeapTotalBytes": 5476352,
"scriptDurationMs": 510.15,
"eventListeners": -16378,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 15272.03400000002,
"styleRecalcs": 76,
"styleRecalcDurationMs": 18.467000000000013,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15250.284000000001,
"heapDeltaBytes": -58754284,
"heapUsedBytes": 166570692,
"domNodes": -3300,
"jsHeapTotalBytes": 5738496,
"scriptDurationMs": 854.821,
"eventListeners": -16372,
"totalBlockingTimeMs": 12,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 14885.332000000062,
"styleRecalcs": 67,
"styleRecalcDurationMs": 16.297000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 14850.654999999999,
"heapDeltaBytes": -60932856,
"heapUsedBytes": 155058864,
"domNodes": -3300,
"jsHeapTotalBytes": 16777216,
"scriptDurationMs": 818.143,
"eventListeners": -16364,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 130.52399999997988,
"styleRecalcs": 9,
"styleRecalcDurationMs": 17.097,
"layouts": 3,
"layoutDurationMs": 0.6859999999999998,
"taskDurationMs": 86.47300000000001,
"heapDeltaBytes": 3212668,
"heapUsedBytes": 67871616,
"domNodes": 122,
"jsHeapTotalBytes": 2883584,
"scriptDurationMs": 6.325000000000001,
"eventListeners": 33,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.669999999999998,
"p95FrameDurationMs": 16.799999999999727
},
{
"name": "workflow-execution",
"durationMs": 447.5049999999783,
"styleRecalcs": 16,
"styleRecalcDurationMs": 18.376,
"layouts": 4,
"layoutDurationMs": 1.579,
"taskDurationMs": 93.64800000000001,
"heapDeltaBytes": 4771528,
"heapUsedBytes": 56853128,
"domNodes": 141,
"jsHeapTotalBytes": 262144,
"scriptDurationMs": 8.45,
"eventListeners": 67,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
}
]
} |
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
🔍 Cursor Review — Consolidated panel
Triggered by @synap5e.
Found 1 finding(s).
| Severity | Count |
|---|---|
| 🟢 Low | 1 |
Panel: 6/8 reviewers contributed findings.
Reviewers that did not contribute: kimi-k2.5:adversarial (empty), kimi-k2.5:edge-case (empty)
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@browser_tests/tests/sidebar/modelLibraryAssetMode.spec.ts`:
- Around line 103-118: Update the “Refresh seeds a backend rescan” test to
validate the POST mutation’s request body in addition to its method and
endpoint. Use AssetHelper’s recorded mutation.body to assert the seed request
contains the exact payload { roots: ['models'] }, ensuring the correct root and
payload shape are sent.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 7241ae27-81c7-4ce4-abfa-964ae8b03671
📒 Files selected for processing (8)
browser_tests/fixtures/components/SidebarTab.tsbrowser_tests/fixtures/data/assetFixtures.tsbrowser_tests/fixtures/helpers/AssetHelper.tsbrowser_tests/fixtures/helpers/FeatureFlagHelper.tsbrowser_tests/fixtures/utils/dispatchApiEvent.tsbrowser_tests/tests/graph.spec.tsbrowser_tests/tests/sidebar/modelLibraryAssetMode.spec.tsbrowser_tests/tests/sidebar/modelLibraryRouting.spec.ts
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## synap5e/assets-mode-sidebar #13574 +/- ##
===============================================================
- Coverage 77.52% 77.38% -0.14%
===============================================================
Files 1656 1656
Lines 95008 95195 +187
Branches 31560 32266 +706
===============================================================
+ Hits 73656 73671 +15
- Misses 20642 20813 +171
- Partials 710 711 +1
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
The seed test now asserts the request body ({ roots: ['models'] }), not
just the endpoint. The placement test anchors its zero-node check on the
visible ghost preview, so it verifies arming completed without placing
rather than racing a first-poll pass.
christian-byrne
left a comment
There was a problem hiding this comment.
Automated multi-agent review of this PR's delta against its parent branch (concurrent reviewers; B-group tooling and dependency scans skipped since the review checkout has no installed deps). No blocking issues. Findings below, most inline. The route-pattern narrowing (/assets to /api/assets) was verified to regress no existing spec and to fix a latent JS-chunk-intercept bug.
- Fix false docstring guarantee on setServerFlags: replace the "cannot clobber" promise with an accurate note that reconnects will drop injected flags; point readers to mockServerFeatures() for durable overrides. - Use MODEL_TYPE_CHECKPOINT_NESTED.loader_path instead of hardcoded 'SDXL/sd_xl_base_1.0.safetensors' so the assertion tracks the fixture. - Add setting-value assertions to the cloud routing test so it pins the defaults, not just the downstream routing result. - Swap vacuous toBeHidden() calls on v-if elements to toHaveCount(0). - Drop dead export from CoreModelAsset (no spec imports it). - Add inline comments explaining the intentional .gguf extension and the distinct coverage path of the near-duplicate fast_complete search test. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Round 2 review — e2e test completeness Three findings covering test robustness angles not addressed in round 1: 1. Remaining
2. No unhappy-path test for API error (suggestion, non-blocking)
3. Tree node selectors rely on PrimeVue internal class names (nitpick, non-blocking)
|
Summary
E2E coverage for the assets-backed model library sidebar (#13464), testing the integration seams the unit suites mock away.
Stacked on #13464 (
synap5e/assets-mode-sidebar). All assets endpoints are mocked, so the suite passes regardless of whether the CI container backend has the assets API yet.Changes
sidebar/modelLibraryRouting.spec.ts:Comfy.ModelLibrary.UseAssetBrowser+Comfy.Assets.UseAssetAPItab routing (both on → asset browser modal; either off → sidebar tree;@clouddefaults → modal).sidebar/modelLibraryAssetMode.spec.ts: asset-mode tree from a mocked/api/assetswalk +/api/experiment/modelsregistration (folder registration order, eager load with no load-all button, extension allowlists verbatim vs match-all default filtering), refresh →POST /api/assets/seed, live tree/search updates on theassets.seed.fast_completeevent, ghost placement filling the loader widget withloader_path, bare-tag backend fallback.model_type:/loader_pathasset fixtures,AssetHelperseed-endpoint handling,FeatureFlagHelper.setServerFlags(forcesapi.serverFeatureFlags; theff:localStorage override is dev-only and tree-shaken from production builds),dispatchApiCustomEventutil for wire-level events outside the typedApiEventTypesmap,getFolderRowByLabelpage-object locator (ancestor tree rows contain descendant text, so the existing label locator misclicks nested folders).AssetHelperroute pattern narrowed**/assets**→**/api/assets**: the old pattern intercepted the built frontend's/assets/*.jschunks on any navigation aftermock(). No existing consumer is affected (all target/api/assets).graph.spec.ts: mirrors main's branded-LinkIdfix (9e5fb67) verbatim; now superseded by main having been merged through the stack (identical content, resolved cleanly).Review Focus
assets.seed.fast_completeinjection dispatches directly on the api singleton (EventTarget.prototype.dispatchEvent), replicating the socket handler's default case; the real WS frame path above that dispatch is not exercised.supports_model_type_tags: falseexplicitly so the real test backend'sfeature_flagshandshake can't decide which mode is under test.Test plan
pnpm typecheck:browser, eslint, oxlint, knip clean--cpu --multi-user)@cloudrouting test green against the built cloud distsidebar/modelLibrary.spec.ts+assetHelper.spec.ts(34 tests) still green with the shared-fixture changes