Skip to content

Commit 5073ad1

Browse files
fix: Apply global filter across all Inspect tabs and align e2e selectors with TabBar
- Make the global filter on the Inspect page apply on every tab (previously it only worked on the "all" tab); per-column filters still layer on top - Update inspect and options e2e tests to target the new TabBar markup (li[role='tab'][data-aspect=...], .slds-tabs_scoped__nav) and the renamed "Global Filter" input - Extend the Filter Fields test to assert the global filter remains effective after switching to the Fields tab
1 parent a23ac8e commit 5073ad1

3 files changed

Lines changed: 56 additions & 47 deletions

File tree

addon/inspect.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,15 +1091,13 @@ class TableRow {
10911091
let s = this.sortKey(col.name);
10921092
return s != null && ("" + s).toLowerCase().includes(term);
10931093
};
1094-
if (this.rowList.model.useTab != "all") {
1095-
return selectedColumns.every(col =>
1096-
!col.columnFilter || split(col.columnFilter).every(term => search(term, col))
1097-
);
1098-
} else {
1099-
return split(this.rowList.model.rowsFilter).every(term =>
1100-
!term || selectedColumns.some(col => search(term, col))
1101-
);
1102-
}
1094+
let globalMatch = split(this.rowList.model.rowsFilter).every(term =>
1095+
!term || selectedColumns.some(col => search(term, col))
1096+
);
1097+
let columnMatch = selectedColumns.every(col =>
1098+
!col.columnFilter || split(col.columnFilter).every(term => search(term, col))
1099+
);
1100+
return globalMatch && columnMatch;
11031101
}
11041102
}
11051103

tests/e2e/inspect.spec.js

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ test.describe("Inspect", () => {
6464
await expect(page.locator("span.slds-truncate:has-text('Account')").first()).toBeVisible();
6565

6666
// Verify tabs are visible
67-
await expect(page.locator("button:has-text('All')")).toBeVisible();
68-
await expect(page.locator("button:has-text('Fields')")).toBeVisible();
69-
await expect(page.locator("button:has-text('Relationships')")).toBeVisible();
67+
await expect(page.locator("li[role='tab'][data-aspect='all']")).toBeVisible();
68+
await expect(page.locator("li[role='tab'][data-aspect='fields']")).toBeVisible();
69+
await expect(page.locator("li[role='tab'][data-aspect='childs']")).toBeVisible();
7070
});
7171

7272
test("Load Inspect Page - With Record ID", async ({page, extensionId}) => {
@@ -79,48 +79,59 @@ test.describe("Inspect", () => {
7979
test("Switch Tabs", async ({page, extensionId}) => {
8080
await initInspectPage(page, extensionId);
8181

82-
await page.waitForSelector(".slds-builder-header_container li span[title=Fields]", {timeout: 1000});
82+
await page.waitForSelector("li[role='tab'][data-aspect='fields']", {timeout: 1000});
8383

8484
// Click Fields tab
85-
await page.locator(".slds-builder-header_container li span[title=Fields]").click();
85+
await page.locator("li[role='tab'][data-aspect='fields']").click();
8686

8787
// Click Relationships tab
88-
await page.locator(".slds-builder-header_container li span[title=Relationships]").click();
88+
await page.locator("li[role='tab'][data-aspect='childs']").click();
8989

9090
// Click All tab
91-
await page.locator(".slds-builder-header_container li span[title=All]").click();
91+
await page.locator("li[role='tab'][data-aspect='all']").click();
9292
});
9393

9494
test("Filter Fields", async ({page, extensionId}) => {
9595
await initInspectPage(page, extensionId);
9696

9797
// Wait for table first so the page is fully loaded (filter is in header, same render)
9898
await page.waitForSelector("table.slds-table", {timeout: 2000});
99-
await page.waitForSelector("input[placeholder='Filter']", {timeout: 2000});
99+
await page.waitForSelector("input[placeholder='Global Filter']", {timeout: 2000});
100100

101-
// Type in filter
102-
const filterInput = page.locator("input[placeholder='Filter']");
101+
// Type in filter on All tab
102+
const filterInput = page.locator("input[placeholder='Global Filter']");
103103
await filterInput.fill("Name");
104104

105105
// Wait for filtering to take effect
106106
await page.waitForTimeout(500);
107107

108108
// Verify Name field is visible
109109
await expect(page.locator("text=Name").first()).toBeVisible();
110+
111+
// Switch to Fields tab and confirm global filter still applies there
112+
await page.locator("li[role='tab'][data-aspect='fields']").click();
113+
await page.waitForTimeout(250);
114+
115+
const visibleRows = page.locator("tbody tr:not([hidden])");
116+
const rowCount = await visibleRows.count();
117+
expect(rowCount).toBeGreaterThan(0);
118+
for (let i = 0; i < rowCount; i++) {
119+
await expect(visibleRows.nth(i)).toContainText(/name/i);
120+
}
110121
});
111122

112123
test("Toggle Column Visibility", async ({page, extensionId}) => {
113124
await initInspectPage(page, extensionId);
114125

115-
await page.waitForSelector(".slds-builder-header_container li span[title=Fields]", {timeout: 1000});
126+
await page.waitForSelector("li[role='tab'][data-aspect='fields']", {timeout: 1000});
116127

117128
// Click Fields tab to open column visibility menu
118-
await page.locator(".slds-builder-header_container li span[title=Fields]").click();
129+
await page.locator("li[role='tab'][data-aspect='fields']").click();
119130
await page.waitForTimeout(250);
120131

121-
// Click the chevron to open column visibility menu
122-
const chevron = page.locator(".slds-builder-header_container li span[title=Fields]").locator("..").locator("svg").first();
123-
await chevron.click();
132+
// Click the column control button to open column visibility menu
133+
const columnControl = page.locator(".sfir-column-control-group button").first();
134+
await columnControl.click();
124135
await page.waitForTimeout(250);
125136

126137
// Find and toggle a column checkbox (e.g., Label)
@@ -138,10 +149,10 @@ test.describe("Inspect", () => {
138149
test("Calculate Field Usage", async ({page, extensionId}) => {
139150
await initInspectPage(page, extensionId);
140151

141-
await page.waitForSelector(".slds-builder-header_container li span[title=Fields]", {timeout: 1000});
152+
await page.waitForSelector("li[role='tab'][data-aspect='fields']", {timeout: 1000});
142153

143154
// Click Fields tab
144-
await page.locator(".slds-builder-header_container li span[title=Fields]").click();
155+
await page.locator("li[role='tab'][data-aspect='fields']").click();
145156

146157
// Wait for Usage column header with action button
147158
await page.waitForSelector("text=Usage (%)", {timeout: 1000});
@@ -417,10 +428,10 @@ test.describe("Inspect", () => {
417428
test("Column Filtering", async ({page, extensionId}) => {
418429
await initInspectPage(page, extensionId);
419430

420-
await page.waitForSelector(".slds-builder-header_container li span[title=Fields]", {timeout: 1000});
431+
await page.waitForSelector("li[role='tab'][data-aspect='fields']", {timeout: 1000});
421432

422433
// Switch to Fields tab (enables column filtering)
423-
await page.locator(".slds-builder-header_container li span[title=Fields]").click();
434+
await page.locator("li[role='tab'][data-aspect='fields']").click();
424435
await page.waitForTimeout(250);
425436

426437
// Find a column filter input

tests/e2e/options.spec.js

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ test.describe("Options", () => {
3131

3232
async function initOptionsPage(page, extensionId, selectedTab = null, gotoTab = null) {
3333
await page.goto(`chrome-extension://${extensionId}/options.html?host=${mockHost}${selectedTab ? `&selectedTab=${selectedTab}` : ""}`);
34-
await page.waitForSelector(".sfir-options-tab-container", {timeout: 1000});
34+
await page.waitForSelector(".slds-tabs_scoped__nav", {timeout: 1000});
3535
if (gotoTab) {
36-
await page.locator(`a[role='tab']:has-text('${gotoTab}')`).click();
36+
await page.locator(`li[role='tab']:has-text('${gotoTab}')`).click();
3737
}
3838

3939
// Ensure we're on the gotoTab / selectedTab or User Experience tab (default)
40-
await page.waitForSelector("a[role='tab']:has-text('" + (gotoTab || selectedTab || "User Experience") + "')", {timeout: 1000});
40+
await page.waitForSelector("li[role='tab']:has-text('" + (gotoTab || selectedTab || "User Experience") + "')", {timeout: 1000});
4141
//check if the related tab is active
42-
await expect(page.locator(".options-tab:has-text('" + (gotoTab || selectedTab || "User Experience") + "')")).toHaveClass(/slds-is-active/);
42+
await expect(page.locator("li[role='tab']:has-text('" + (gotoTab || selectedTab || "User Experience") + "')")).toHaveClass(/slds-is-active/);
4343
}
4444

4545
test.describe("User Experience", () => {
@@ -68,15 +68,15 @@ test.describe("Options", () => {
6868
await initOptionsPage(page, extensionId);
6969

7070
// Verify all main tabs are present (use role="tab" to be specific)
71-
await expect(page.locator("a[role='tab']:has-text('User Experience')")).toBeVisible();
72-
await expect(page.locator("a[role='tab']:has-text('API')")).toBeVisible();
73-
await expect(page.locator("a[role='tab']:has-text('Data Export')")).toBeVisible();
74-
await expect(page.locator("a[role='tab']:has-text('Data Import')")).toBeVisible();
75-
await expect(page.locator("a[role='tab']:has-text('Field Creator')")).toBeVisible();
76-
await expect(page.locator("a[role='tab']:has-text('Enable Logs')")).toBeVisible();
77-
await expect(page.locator("a[role='tab']:has-text('Metadata')")).toBeVisible();
78-
await expect(page.locator("a[role='tab']:has-text('Flow Scanner')")).toBeVisible();
79-
await expect(page.locator("a[role='tab']:has-text('Custom Shortcuts')")).toBeVisible();
71+
await expect(page.locator("li[role='tab']:has-text('User Experience')")).toBeVisible();
72+
await expect(page.locator("li[role='tab']:has-text('API')")).toBeVisible();
73+
await expect(page.locator("li[role='tab']:has-text('Data Export')")).toBeVisible();
74+
await expect(page.locator("li[role='tab']:has-text('Data Import')")).toBeVisible();
75+
await expect(page.locator("li[role='tab']:has-text('Field Creator')")).toBeVisible();
76+
await expect(page.locator("li[role='tab']:has-text('Enable Logs')")).toBeVisible();
77+
await expect(page.locator("li[role='tab']:has-text('Metadata')")).toBeVisible();
78+
await expect(page.locator("li[role='tab']:has-text('Flow Scanner')")).toBeVisible();
79+
await expect(page.locator("li[role='tab']:has-text('Custom Shortcuts')")).toBeVisible();
8080
});
8181

8282
test("Toggle Option - Popup Dark Theme", async ({page, extensionId}) => {
@@ -188,7 +188,7 @@ test.describe("Options", () => {
188188
await initOptionsPage(page, extensionId, null, "API");
189189

190190
// Verify API tab is active
191-
await expect(page.locator(".options-tab:has-text('API')")).toHaveClass(/slds-is-active/);
191+
await expect(page.locator("li[role='tab']:has-text('API')")).toHaveClass(/slds-is-active/);
192192

193193
// Verify API version input is visible (use more specific selector)
194194
await expect(page.locator("span:has-text('API Version')").first()).toBeVisible();
@@ -220,7 +220,7 @@ test.describe("Options", () => {
220220
await initOptionsPage(page, extensionId, "api");
221221

222222
// Verify API tab is active by default
223-
await expect(page.locator(".options-tab:has-text('API')")).toHaveClass(/slds-is-active/);
223+
await expect(page.locator("li[role='tab']:has-text('API')")).toHaveClass(/slds-is-active/);
224224
});
225225

226226
test("Restore Default API Version", async ({page, extensionId}) => {
@@ -560,13 +560,13 @@ test.describe("Options", () => {
560560
const optionsUrl = `chrome-extension://${extensionId}/options.html?host=${mockHost}`;
561561
await page.goto(optionsUrl);
562562

563-
await page.waitForSelector(".sfir-options-tab-container", {timeout: 1000});
563+
await page.waitForSelector(".slds-tabs_scoped__nav", {timeout: 1000});
564564

565565
// Click Metadata tab (use role="tab" to be specific)
566-
await page.locator("a[role='tab']:has-text('Metadata')").click();
566+
await page.locator("li[role='tab']:has-text('Metadata')").click();
567567

568568
// Verify Metadata tab is active
569-
await expect(page.locator(".options-tab:has-text('Metadata')")).toHaveClass(/slds-is-active/);
569+
await expect(page.locator("li[role='tab']:has-text('Metadata')")).toHaveClass(/slds-is-active/);
570570

571571
// Verify Include managed packages metadata option is visible
572572
await expect(page.locator("text=Include managed packages metadata")).toBeVisible();
@@ -619,7 +619,7 @@ test.describe("Options", () => {
619619
await initOptionsPage(page, extensionId, null, "Enable Logs");
620620

621621
// Verify Enable Logs tab is active
622-
await expect(page.locator(".options-tab:has-text('Enable Logs')")).toHaveClass(/slds-is-active/);
622+
await expect(page.locator("li[role='tab']:has-text('Enable Logs')")).toHaveClass(/slds-is-active/);
623623

624624
// Verify Debug Level option is visible
625625
await expect(page.locator("text=Debug Level (DeveloperName)")).toBeVisible();

0 commit comments

Comments
 (0)