Skip to content

Commit c84a8a0

Browse files
committed
Fix e2e test
1 parent 8236042 commit c84a8a0

2 files changed

Lines changed: 151 additions & 11 deletions

File tree

e2e_playwright/pivot_table_interactions_test.py

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,9 @@ def test_date_hierarchy_supports_drill_week_and_original(page_at_app: Page):
282282

283283
menu = open_header_menu(
284284
page,
285-
container.get_by_test_id("header-menu-trigger-order_date").first,
285+
container.locator(
286+
'[data-testid="header-menu-trigger-order_date"]:visible'
287+
).first,
286288
"header-menu-order_date",
287289
)
288290
grain_select = menu.get_by_test_id("header-date-grain")
@@ -295,7 +297,9 @@ def test_date_hierarchy_supports_drill_week_and_original(page_at_app: Page):
295297

296298
menu = open_header_menu(
297299
page,
298-
container.get_by_test_id("header-menu-trigger-order_date").first,
300+
container.locator(
301+
'[data-testid="header-menu-trigger-order_date"]:visible'
302+
).first,
299303
"header-menu-order_date",
300304
)
301305
grain_select = menu.get_by_test_id("header-date-grain")
@@ -306,7 +310,9 @@ def test_date_hierarchy_supports_drill_week_and_original(page_at_app: Page):
306310

307311
menu = open_header_menu(
308312
page,
309-
container.get_by_test_id("header-menu-trigger-order_date").first,
313+
container.locator(
314+
'[data-testid="header-menu-trigger-order_date"]:visible'
315+
).first,
310316
"header-menu-order_date",
311317
)
312318
grain_select = menu.get_by_test_id("header-date-grain")
@@ -347,7 +353,9 @@ def test_temporal_hierarchy_toggle_collapses_and_expands(page_at_app: Page):
347353
expect(container.get_by_text("Q4 2024")).to_be_visible(timeout=5000)
348354

349355
# Collapse 2024 by clicking the +/- toggle button.
350-
toggle_2024 = container.get_by_test_id("temporal-toggle-order-date-2024")
356+
toggle_2024 = container.locator(
357+
'[data-testid="temporal-toggle-order-date-2024"]:visible'
358+
).first
351359
toggle_2024.click()
352360

353361
# After collapse: quarter leaf headers under 2024 should be hidden,
@@ -364,7 +372,9 @@ def test_temporal_hierarchy_toggle_collapses_and_expands(page_at_app: Page):
364372
expect(container.get_by_text("Q1 2025")).to_be_visible(timeout=5000)
365373

366374
# Re-expand 2024.
367-
toggle_2024 = container.get_by_test_id("temporal-toggle-order-date-2024")
375+
toggle_2024 = container.locator(
376+
'[data-testid="temporal-toggle-order-date-2024"]:visible'
377+
).first
368378
toggle_2024.click()
369379

370380
# All quarter columns should be visible again.
@@ -391,7 +401,9 @@ def test_temporal_hierarchy_collapsed_cells_suppress_comparison(page_at_app: Pag
391401
expect(data_cells.first).to_be_visible(timeout=5000)
392402

393403
# Collapse 2024.
394-
toggle_2024 = container.get_by_test_id("temporal-toggle-order-date-2024")
404+
toggle_2024 = container.locator(
405+
'[data-testid="temporal-toggle-order-date-2024"]:visible'
406+
).first
395407
toggle_2024.click()
396408

397409
# The collapsed aggregate cells should NOT contain comparison indicators.
@@ -410,7 +422,9 @@ def test_temporal_hierarchy_collapsed_cells_suppress_comparison(page_at_app: Pag
410422
), f"Collapsed cell should not show comparison indicator, got: {first_collapse_text}"
411423

412424
# Re-expand to restore state for other tests.
413-
toggle_2024 = container.get_by_test_id("temporal-toggle-order-date-2024")
425+
toggle_2024 = container.locator(
426+
'[data-testid="temporal-toggle-order-date-2024"]:visible'
427+
).first
414428
toggle_2024.click()
415429
expect(container.get_by_text("Q1 2024")).to_be_visible(timeout=5000)
416430

@@ -433,7 +447,9 @@ def test_temporal_hierarchy_multidim_per_instance_collapse(page_at_app: Page):
433447
expect(eu_header).to_be_visible(timeout=5000)
434448

435449
# Collapse the first 2024 instance (should be one region only).
436-
first_toggle = container.get_by_test_id("temporal-toggle-order-date-2024").first
450+
first_toggle = container.locator(
451+
'[data-testid="temporal-toggle-order-date-2024"]:visible'
452+
).first
437453
first_toggle.click()
438454

439455
# At least one collapsed cell should appear.
@@ -450,7 +466,9 @@ def test_temporal_hierarchy_multidim_per_instance_collapse(page_at_app: Page):
450466
expect(second_header).to_have_attribute("aria-expanded", "true", timeout=5000)
451467

452468
# Re-expand.
453-
first_toggle = container.get_by_test_id("temporal-toggle-order-date-2024").first
469+
first_toggle = container.locator(
470+
'[data-testid="temporal-toggle-order-date-2024"]:visible'
471+
).first
454472
first_toggle.click()
455473
expect(container.get_by_test_id("pivot-temporal-collapse-cell")).to_have_count(
456474
0, timeout=5000
@@ -517,13 +535,22 @@ def test_mixed_row_dimension_collapse_preserves_temporal_state(page_at_app: Page
517535
1, timeout=10000
518536
)
519537

520-
container.get_by_test_id("pivot-group-toggle-US").click()
538+
us_total_row = container.locator("tr").filter(has_text="US Total")
539+
expect(us_total_row).to_have_count(1, timeout=5000)
540+
us_group_toggle = us_total_row.get_by_test_id("pivot-group-toggle-US")
541+
us_group_toggle.dispatch_event("click")
542+
expect(us_group_toggle).to_have_attribute("aria-expanded", "false", timeout=5000)
521543
expect(container.get_by_text("US Total")).to_be_visible(timeout=5000)
522544
expect(container.get_by_test_id("pivot-temporal-parent-row")).to_have_count(
523545
0, timeout=5000
524546
)
525547

526-
container.get_by_test_id("pivot-group-toggle-US").click()
548+
us_total_row = container.locator("tr").filter(has_text="US Total")
549+
expect(us_total_row).to_have_count(1, timeout=5000)
550+
us_group_toggle = us_total_row.get_by_test_id("pivot-group-toggle-US")
551+
expect(us_group_toggle).to_have_attribute("aria-expanded", "false", timeout=5000)
552+
us_group_toggle.dispatch_event("click")
553+
expect(us_group_toggle).to_have_attribute("aria-expanded", "true", timeout=5000)
527554
expect(container.get_by_test_id("pivot-temporal-parent-row")).to_have_count(
528555
1, timeout=10000
529556
)

streamlit_pivot/frontend/src/renderers/TableRenderer.test.tsx

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import { describe, expect, it, vi } from "vitest";
1919
import { render, screen, fireEvent, act } from "@testing-library/react";
20+
import { useState } from "react";
2021
import TableRenderer, {
2122
computeRowHeaderSpans,
2223
computeColSlots,
@@ -294,6 +295,118 @@ describe("TableRenderer - rendering", () => {
294295
).toBeGreaterThan(0);
295296
});
296297

298+
it("preserves collapsed temporal row groups across outer subtotal collapse cycles", () => {
299+
const data: DataRecord[] = [
300+
{ region: "US", order_date: "2024-01-03", revenue: 100 },
301+
{ region: "US", order_date: "2024-02-10", revenue: 150 },
302+
{ region: "US", order_date: "2025-01-12", revenue: 200 },
303+
{ region: "EU", order_date: "2024-01-08", revenue: 80 },
304+
];
305+
const collapseKey = makeKeyString(
306+
buildModifiedRowKey(["US", "2024-01"], 1, "order_date", "2024").slice(
307+
0,
308+
2,
309+
),
310+
);
311+
const initialConfig = makeConfig({
312+
rows: ["region", "order_date"],
313+
values: ["revenue"],
314+
show_subtotals: ["region"],
315+
collapsed_temporal_row_groups: { order_date: [collapseKey] },
316+
});
317+
318+
function Harness() {
319+
const [config, setConfig] = useState(initialConfig);
320+
const pd = new PivotData(data, config, {
321+
columnTypes: new Map([["order_date", "date"]]),
322+
});
323+
324+
return (
325+
<TableRenderer
326+
pivotData={pd}
327+
config={config}
328+
onConfigChange={(next) => setConfig(next)}
329+
onCollapseChange={(axis, collapsed) =>
330+
setConfig((prev) => ({
331+
...prev,
332+
[axis === "row" ? "collapsed_groups" : "collapsed_col_groups"]:
333+
collapsed,
334+
}))
335+
}
336+
/>
337+
);
338+
}
339+
340+
render(<Harness />);
341+
342+
expect(screen.getByTestId("pivot-temporal-parent-row")).toBeInTheDocument();
343+
344+
const usSubtotalToggle = screen.getByTestId("pivot-group-toggle-US");
345+
expect(usSubtotalToggle).toHaveAttribute("aria-expanded", "true");
346+
fireEvent.click(usSubtotalToggle);
347+
expect(usSubtotalToggle).toHaveAttribute("aria-expanded", "false");
348+
expect(
349+
screen.queryByTestId("pivot-temporal-parent-row"),
350+
).not.toBeInTheDocument();
351+
352+
fireEvent.click(usSubtotalToggle);
353+
expect(usSubtotalToggle).toHaveAttribute("aria-expanded", "true");
354+
expect(screen.getByTestId("pivot-temporal-parent-row")).toBeInTheDocument();
355+
});
356+
357+
it("preserves temporal collapse after collapsing and re-expanding outer row group", () => {
358+
const data: DataRecord[] = [
359+
{ region: "US", order_date: "2024-01-03", revenue: 100 },
360+
{ region: "US", order_date: "2024-02-10", revenue: 150 },
361+
{ region: "US", order_date: "2025-01-12", revenue: 200 },
362+
{ region: "EU", order_date: "2024-01-08", revenue: 80 },
363+
];
364+
const initialConfig = makeConfig({
365+
rows: ["region", "order_date"],
366+
values: ["revenue"],
367+
show_subtotals: ["region"],
368+
});
369+
370+
function Harness() {
371+
const [config, setConfig] = useState(initialConfig);
372+
const pd = new PivotData(data, config, {
373+
columnTypes: new Map([["order_date", "date"]]),
374+
});
375+
376+
return (
377+
<TableRenderer
378+
pivotData={pd}
379+
config={config}
380+
onConfigChange={(next) => setConfig(next)}
381+
onCollapseChange={(axis, collapsed) =>
382+
setConfig((prev) => ({
383+
...prev,
384+
[axis === "row" ? "collapsed_groups" : "collapsed_col_groups"]:
385+
collapsed,
386+
}))
387+
}
388+
/>
389+
);
390+
}
391+
392+
render(<Harness />);
393+
394+
const usTemporalToggle = screen.getByTestId(
395+
"pivot-temporal-row-toggle-order_date-2024",
396+
);
397+
fireEvent.click(usTemporalToggle);
398+
expect(screen.getByTestId("pivot-temporal-parent-row")).toBeInTheDocument();
399+
400+
const usSubtotalToggle = screen.getByTestId("pivot-group-toggle-US");
401+
fireEvent.click(usSubtotalToggle);
402+
expect(
403+
screen.queryByTestId("pivot-temporal-parent-row"),
404+
).not.toBeInTheDocument();
405+
406+
fireEvent.click(usSubtotalToggle);
407+
expect(screen.getByTestId("pivot-temporal-parent-row")).toBeInTheDocument();
408+
});
409+
297410
it("renders data cells with correct values", () => {
298411
const pd = createPivotData();
299412
render(<TableRenderer pivotData={pd} config={makeConfig()} />);

0 commit comments

Comments
 (0)