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-7469-114a6100b53c1191a77b23b9b11221fd6607fef1
in repository https://gitbox.apache.org/repos/asf/texera.git

commit 3ef7a52b65544cd61b79f9521d3e34191ca4a7cf
Author: Meng Wang <[email protected]>
AuthorDate: Sun Aug 9 16:06:38 2026 -0700

    test(frontend): render the TypeCastingDisplay schema table for coverage 
(#7469)
    
    ### What changes were proposed in this PR?
    
    Extends the existing `TypeCastingDisplayComponent` spec so the schema
    table
    actually renders, covering the template that was previously never
    executed
    
    
(`frontend/src/app/workspace/component/property-editor/typecasting-display/type-casting-display.component.html`).
    No production code was changed.
    
    4 tests cover every branch of the template:
    
    - the outer `*ngIf` — no `nz-table` is rendered while the type-casting
      information is hidden;
    - the header cells (`Attribute Name` / `Attribute Type`);
    - the table's no-data arm for an empty schema;
    - the `*ngFor` row — one row per attribute, asserting each row's name
    and type
    cell text against the seeded schema (mixed `long` / `string` /
    `double`).
    
    One note on the empty-schema case: `nz-table` renders a single
    placeholder row
    rather than no rows at all. The test asserts the *shape* of that arm
    (one row
    with one spanning cell) instead of the placeholder's text, which comes
    from the
    active locale bundle and would make the assertion brittle.
    
    Per the usual constraints: no fake timers, and no layout or geometry
    assertions.
    
    ### Any related issues, documentation, discussions?
    
    Closes #7465
    
    ### 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/property-editor/typecasting-display/type-casting-display.component.spec.ts
    # Test Files 1 passed (1) | Tests 16 passed (16)
    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])
---
 .../type-casting-display.component.spec.ts         | 61 +++++++++++++++++++++-
 1 file changed, 60 insertions(+), 1 deletion(-)

diff --git 
a/frontend/src/app/workspace/component/property-editor/typecasting-display/type-casting-display.component.spec.ts
 
b/frontend/src/app/workspace/component/property-editor/typecasting-display/type-casting-display.component.spec.ts
index d8680311db..68a2c4e935 100644
--- 
a/frontend/src/app/workspace/component/property-editor/typecasting-display/type-casting-display.component.spec.ts
+++ 
b/frontend/src/app/workspace/component/property-editor/typecasting-display/type-casting-display.component.spec.ts
@@ -18,6 +18,7 @@
  */
 
 import { ComponentFixture, TestBed } from "@angular/core/testing";
+import { By } from "@angular/platform-browser";
 import { HttpClientTestingModule } from "@angular/common/http/testing";
 import { Subject } from "rxjs";
 import { WorkflowCompilingService } from 
"../../../service/compile-workflow/workflow-compiling.service";
@@ -32,7 +33,12 @@ import { WorkflowUtilService } from 
"../../../service/workflow-graph/util/workfl
 import { commonTestProviders } from "../../../../common/testing/test-utils";
 import { OperatorPredicate } from "../../../types/workflow-common.interface";
 import { WorkflowGraph, WorkflowGraphReadonly } from 
"../../../service/workflow-graph/model/workflow-graph";
-import { AttributeType, CompilationState, OperatorPortSchemaMap } from 
"../../../types/workflow-compiling.interface";
+import {
+  AttributeType,
+  CompilationState,
+  OperatorPortSchemaMap,
+  SchemaAttribute,
+} from "../../../types/workflow-compiling.interface";
 import { ValidationWorkflowService } from 
"../../../service/validation/validation-workflow.service";
 
 describe("TypecastingDisplayComponent", () => {
@@ -265,4 +271,57 @@ describe("TypecastingDisplayComponent", () => {
       expect(rerenderSpy).toHaveBeenCalled();
     });
   });
+
+  // ─── template rendering 
────────────────────────────────────────────────────
+  // The schema table is only rendered once the component decides to display 
the
+  // type-casting information, so these drive that state and assert the markup.
+  describe("template rendering", () => {
+    const renderSchema = (schema: Partial<SchemaAttribute>[], display = true): 
void => {
+      component.schemaToDisplay = schema;
+      component.displayTypeCastingSchemaInformation = display;
+      fixture.detectChanges();
+    };
+
+    const rowCells = (): string[][] =>
+      fixture.debugElement
+        .queryAll(By.css("tbody tr"))
+        .map(row => row.queryAll(By.css("td")).map(cell => 
(cell.nativeElement.textContent ?? "").trim()));
+
+    it("renders no table while the type-casting information is hidden", () => {
+      renderSchema([{ attributeName: "a", attributeType: "string" as 
AttributeType }], false);
+
+      expect(fixture.debugElement.query(By.css("nz-table"))).toBeNull();
+    });
+
+    it("renders the header cells once the table is displayed", () => {
+      renderSchema([]);
+
+      const headers = fixture.debugElement.queryAll(By.css("thead th")).map(th 
=> th.nativeElement.textContent.trim());
+      expect(headers).toEqual(["Attribute Name", "Attribute Type"]);
+    });
+
+    it("renders the table's no-data arm for an empty schema", () => {
+      renderSchema([]);
+
+      // nz-table renders a single placeholder row instead of attribute rows; 
assert on
+      // the shape (one row, one spanning cell) rather than the localized 
placeholder text.
+      const rows = rowCells();
+      expect(rows).toHaveLength(1);
+      expect(rows[0]).toHaveLength(1);
+    });
+
+    it("renders one row per attribute with its name and type", () => {
+      renderSchema([
+        { attributeName: "id", attributeType: "long" as AttributeType },
+        { attributeName: "label", attributeType: "string" as AttributeType },
+        { attributeName: "score", attributeType: "double" as AttributeType },
+      ]);
+
+      expect(rowCells()).toEqual([
+        ["id", "long"],
+        ["label", "string"],
+        ["score", "double"],
+      ]);
+    });
+  });
 });

Reply via email to