Skip to content

test(frontend): render the agent panel with its real children - #7629

Open
aglinxinyuan wants to merge 2 commits into
apache:mainfrom
aglinxinyuan:cov/agent-panel-render
Open

test(frontend): render the agent panel with its real children#7629
aglinxinyuan wants to merge 2 commits into
apache:mainfrom
aglinxinyuan:cov/agent-panel-render

Conversation

@aglinxinyuan

Copy link
Copy Markdown
Contributor

What changes were proposed in this PR?

agent-panel.component.html reported 0 of 49 lines while its own .ts sat at 133/133 with nothing missed. That pairing can only be attribution loss — this template is one of the better-tested in the frontend. The cause is #7458: the spec stubs its children out with TestBed.overrideComponent, and any override re-JITs the component from its decorator metadata, leaving the re-compiled template with no source map back to the .html.

Adds a describe block that renders the component with its real children:

Before After
agent-panel.component.html 0/49 49/49
agent-panel.component.ts 133/133 133/133

The block keeps its own TestBed, so the 42 existing tests keep their stubs and assertions untouched. Same remedy as merged PR #7535. Rendering the real children also incidentally lifts the child templates' own coverage.

Verification

18 mutations applied and reverted, production diff empty each time.

Two of my new tests then turned out to claim more than they could observe, and both are fixed:

Test Why it could not fail Fix
"force-renders every tab body: the registration form and one chat per agent" the registration tab is the selected tab, so its body renders whether or not [nzForceRender] is set — flipping it to false left the suite green select an agent tab first, so the registration body is present only if force-rendered; the tautological selectedTabIndex assertion was dropped
"the close button ... deletes that agent without selecting its tab" selectedTabIndex was already 0 and activateAgent already un-called, so both assertions held with event.stopPropagation() deleted start on the first agent's tab and assert the click does not activate the neighbour

Both exposing mutations — the registration tab losing nzForceRender, and the close handler losing stopPropagation — are now red.

That second one is worth spelling out: the mutation did turn the suite red before the fix, but the failure came from a pre-existing test elsewhere in the file, while the new test stayed green. A red suite is not evidence that the test under discussion pins anything.

Deliberately not included

Nothing in this PR pins the child components' internals; the assertions stay on this template's own structure and branches.

No production file is touched.

Any related issues, documentation, discussions?

Closes #7628

How was this PR tested?

npx ng test --watch=false --include="**/agent-panel.component.spec.ts"
 Test Files  1 passed (1)
      Tests  51 passed (51)

9 new on top of the existing 42. Coverage re-measured by reverting the spec, running with --coverage, and restoring. yarn format:ci passes.

Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Opus 5)

agent-panel.component.html reported 0 of 49 lines covered while its own
.ts sat at 133/133 with nothing missed. That pairing can only come from
attribution loss, not from undertesting - this template is one of the
better-tested in the frontend. The cause is apache#7458: the spec stubs its
children out through TestBed.overrideComponent, and any override re-JITs
the component from its decorator metadata, leaving the re-compiled
template with no source map back to the .html.

Adds a describe block that renders the component with its real children,
taking the template from 0/49 to 49/49 lines. The block keeps its own
TestBed so the 42 existing tests keep their stubs untouched.

Two of the new tests claimed more than they could observe and were
rewritten: the force-render test asserted the registration form while its
tab was selected, where it renders either way, and the close-button test
asserted a tab index and a call count that were already at their expected
values before the click. Both now start from a state the behaviour has to
move, and the mutations that exposed them are red.

No production file is touched.
Copilot AI lite review requested due to automatic review settings August 13, 2026 05:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions github-actions Bot added the frontend Changes related to the frontend GUI label Aug 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Automated Reviewer Suggestions

Based on the git blame history of the changed files, we recommend the following reviewers:

  • No candidates found from git blame history.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (2)

frontend/src/app/workspace/component/agent/agent-panel/agent-panel.component.spec.ts:883

  • Avoid mutating the Vitest mock internals via .mock.calls.length = 0; this is brittle and inconsistent with the rest of the file (which uses .mockClear()). Clear the mock using the supported API instead.
      (service.activateAgent as unknown as { mock: { calls: unknown[] } }).mock.calls.length = 0;

frontend/src/app/workspace/component/agent/agent-panel/agent-panel.component.spec.ts:839

  • This test reaches into child-component DOM internals (.agent-chat-container, .model-card) and can become brittle if those templates change. It also starts on the registration tab, so depending on tab-pane retention behavior, the registration assertion may still be non-discriminating for [nzForceRender]. Prefer asserting on the presence of the child components themselves and make the registration tab inactive from the first render.
    it("force-renders every tab body: the registration form and one chat per agent", () => {
      service.agentList = [makeAgent("a"), makeAgent("b")];
      createComponent();

      // The agent tabs are unselected here, so their bodies exist only because they are

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 89.11%. Comparing base (12169c2) to head (66f007b).

Additional details and impacted files
@@             Coverage Diff              @@
##               main    #7629      +/-   ##
============================================
- Coverage     89.65%   89.11%   -0.54%     
+ Complexity     4397     4343      -54     
============================================
  Files          1177     1178       +1     
  Lines         46996    46872     -124     
  Branches       5268     5245      -23     
============================================
- Hits          42136    41772     -364     
- Misses         3094     3352     +258     
+ Partials       1766     1748      -18     
Flag Coverage Δ *Carryforward flag
access-control-service 70.00% <ø> (ø) Carriedforward from f6a8526
agent-service 98.62% <ø> (-0.01%) ⬇️ Carriedforward from f6a8526
amber 84.89% <ø> (-1.46%) ⬇️ Carriedforward from f6a8526
computing-unit-managing-service 60.38% <ø> (-12.08%) ⬇️ Carriedforward from f6a8526
config-service 77.31% <ø> (ø) Carriedforward from f6a8526
file-service 68.90% <ø> (ø) Carriedforward from f6a8526
frontend 90.90% <ø> (+0.23%) ⬆️
notebook-migration-service 78.89% <ø> (ø) Carriedforward from f6a8526
pyamber 97.51% <ø> (-0.06%) ⬇️ Carriedforward from f6a8526
workflow-compiling-service 57.89% <ø> (ø) Carriedforward from f6a8526

*This pull request uses carry forward flags. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

frontend Changes related to the frontend GUI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Recover the agent panel template's coverage by rendering its real children

4 participants