This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch 
gh-readonly-queue/main/pr-6757-8f1c56f03e65a9ca4e7a0d4fa6be64164b9468ee
in repository https://gitbox.apache.org/repos/asf/texera.git

commit 195af303be7912e1536ef99b1f92ce584868b2b1
Author: Meng Wang <[email protected]>
AuthorDate: Tue Jul 21 22:40:49 2026 -0700

    test(frontend): cover MenuComponent grid/worker toggles, report generation, 
and name sizing (#6757)
    
    ### What changes were proposed in this PR?
    
    Extends the existing `MenuComponent` spec to cover the toolbar methods
    it had
    left untested
    (`frontend/src/app/workspace/component/menu/menu.component.ts`).
    
    > Note: the existing spec already covers most of the methods the issue
    lists
    > (`getRunButtonBehavior`, `applyRunButtonBehavior`, `hasOperators`, the
    other
    > toggles/handlers, name change). The remaining gaps were the four
    below.
    
    5 tests cover:
    
    - `toggleGrid` — sets the joint paper grid size from the `showGrid`
    flag.
    - `toggleNumWorkers` — toggles the `hide-worker-count` class from the
    flag.
    - `onClickGenerateReport` — shows the blocking notification and builds
    the report HTML from the snapshot + operator results.
    - `adjustWorkflowNameWidth` — no-op without the name input; sizes the
    input in px otherwise.
    
    The joint-graph wrapper, notification, and report services are stubbed.
    No
    production code was changed.
    
    ### Any related issues, documentation, discussions?
    
    Closes #6746
    
    ### How was this PR tested?
    
    Extended unit tests, run locally in `frontend/` (all green; the failure
    path was
    verified by breaking an assertion to confirm the suite goes red):
    
    ```
    ng test --watch=false --include 
src/app/workspace/component/menu/menu.component.spec.ts
    # Test Files 1 passed (1) | Tests 55 passed (55)
    prettier --write <spec>   # clean
    eslint  <spec>            # clean
    ```
    
    ### Was this PR authored or co-authored using generative AI tooling?
    
    Generated-by: Claude Code (Opus 4.8 [1M context])
---
 .../component/menu/menu.component.spec.ts          | 59 ++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/frontend/src/app/workspace/component/menu/menu.component.spec.ts 
b/frontend/src/app/workspace/component/menu/menu.component.spec.ts
index ebec65bb10..caa86bf614 100644
--- a/frontend/src/app/workspace/component/menu/menu.component.spec.ts
+++ b/frontend/src/app/workspace/component/menu/menu.component.spec.ts
@@ -48,6 +48,7 @@ import type { ModalOptions } from "ng-zorro-antd/modal";
 import type { ComputingUnitSelectionComponent } from 
"../power-button/computing-unit-selection.component";
 import { WorkflowContent } from "../../../common/type/workflow";
 import { Router } from "@angular/router";
+import { ReportGenerationService } from 
"../../service/report-generation/report-generation.service";
 import { USER_WORKFLOW } from "../../../app-routing.constant";
 import type { Mocked } from "vitest";
 
@@ -785,4 +786,62 @@ describe("MenuComponent", () => {
       expect(cuComponent.computingUnitStatus).toBe(ComputingUnitState.Running);
     });
   });
+
+  describe("grid / worker-count toggles, report, and name sizing", () => {
+    it("toggleGrid sets the joint paper grid size from the flag", () => {
+      const setGridSize = vi.fn();
+      vi.spyOn(workflowActionService, 
"getJointGraphWrapper").mockReturnValue({ mainPaper: { setGridSize } } as any);
+
+      component.showGrid = true;
+      component.toggleGrid();
+      expect(setGridSize).toHaveBeenCalledWith(2);
+
+      component.showGrid = false;
+      component.toggleGrid();
+      expect(setGridSize).toHaveBeenCalledWith(1);
+    });
+
+    it("toggleNumWorkers toggles the hide-worker-count class from the flag", 
() => {
+      const el = document.createElement("div");
+      vi.spyOn(workflowActionService, "getJointGraphWrapper").mockReturnValue({
+        mainPaper: { el, model: { getElements: () => [] } },
+      } as any);
+
+      component.showNumWorkers = false;
+      component.toggleNumWorkers();
+      expect(el.classList.contains("hide-worker-count")).toBe(true);
+
+      component.showNumWorkers = true;
+      component.toggleNumWorkers();
+      expect(el.classList.contains("hide-worker-count")).toBe(false);
+    });
+
+    it("onClickGenerateReport shows a blocking notification and builds the 
report html", () => {
+      const reportService = TestBed.inject(ReportGenerationService);
+      const blankSpy = vi.spyOn(notificationService, "blank");
+      vi.spyOn(reportService, 
"generateWorkflowSnapshot").mockReturnValue(of("snap-url"));
+      vi.spyOn(reportService, "getAllOperatorResults").mockReturnValue(of([]));
+      const htmlSpy = vi.spyOn(reportService, 
"generateReportAsHtml").mockImplementation(() => {});
+
+      component.onClickGenerateReport();
+
+      expect(blankSpy).toHaveBeenCalled();
+      expect(htmlSpy).toHaveBeenCalledWith("snap-url", [], expect.any(String));
+    });
+
+    it("adjustWorkflowNameWidth is a no-op when the name input is absent", () 
=> {
+      component.workflowNameInput = undefined;
+      expect(() => component.adjustWorkflowNameWidth()).not.toThrow();
+    });
+
+    it("adjustWorkflowNameWidth sizes the input in px to fit its text", () => {
+      const input = document.createElement("input");
+      input.value = "my workflow";
+      component.workflowNameInput = { nativeElement: input } as typeof 
component.workflowNameInput;
+
+      component.adjustWorkflowNameWidth();
+
+      expect(input.style.width).toMatch(/^\d+px$/);
+    });
+  });
 });

Reply via email to