Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data picker #41175

Merged
merged 33 commits into from
May 17, 2024
Merged
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
8c6cdd9
Fix nil schema in /api/table/:id/query_metadata
ranquild Apr 4, 2024
9430478
Fix nil schema in /api/table/:id/query_metadata
ranquild Apr 4, 2024
219506f
Fix nil schema in /api/table/:id/query_metadata
ranquild Apr 4, 2024
2b8fe78
Fix nil schema in /api/table/:id/query_metadata
ranquild Apr 4, 2024
38ac092
Fix nil schema in /api/table/:id/query_metadata
ranquild Apr 4, 2024
cf714ca
Revert "Fix nil schema in /api/table/:id/query_metadata"
kamilmielnik Apr 9, 2024
1630fb2
Revert "Fix nil schema in /api/table/:id/query_metadata"
kamilmielnik Apr 9, 2024
7d639bb
Revert "Fix nil schema in /api/table/:id/query_metadata"
kamilmielnik Apr 9, 2024
253c617
Revert "Fix nil schema in /api/table/:id/query_metadata"
kamilmielnik Apr 9, 2024
f1ed209
Revert "Fix nil schema in /api/table/:id/query_metadata"
kamilmielnik Apr 9, 2024
108c51d
Merge branch 'master' into data-picker
kamilmielnik Apr 9, 2024
5f7f09c
Table Picker (#40509)
kamilmielnik Apr 9, 2024
9e8b15b
Merge branch 'master' into data-picker
kamilmielnik Apr 19, 2024
648161e
Merge branch 'master' into data-picker
kamilmielnik May 6, 2024
7751e08
Post-merge fix
kamilmielnik May 6, 2024
78fef21
Integrate QuestionPicker in DataPicker (#42268)
kamilmielnik May 7, 2024
e56b5cd
Merge branch 'master' into data-picker
kamilmielnik May 7, 2024
424faeb
Do not require `onConfirm` prop in `EntityPickerModal` (#42317)
kamilmielnik May 7, 2024
ff2633c
Merge branch 'master' into data-picker
kamilmielnik May 7, 2024
b5f2b2e
Table does not appear selected in single-schema dbs (#42336)
kamilmielnik May 8, 2024
35efdf2
Merge branch 'master' into data-picker
kamilmielnik May 8, 2024
df8aef3
Merge branch 'master' into data-picker
kamilmielnik May 8, 2024
31f7aaf
Use `DataPicker` in `JoinTablePicker` (#42330)
kamilmielnik May 10, 2024
c468640
Merge branch 'master' into data-picker
kamilmielnik May 13, 2024
58c6e10
Remove NewQuestionView & QuestionDataSelector (#42562)
kamilmielnik May 14, 2024
c15f813
Merge branch 'master' into data-picker
kamilmielnik May 15, 2024
b1a86b0
Temporarily disable recents tab in the data picker
kamilmielnik May 15, 2024
9d16696
Merge branch 'master' into data-picker
kamilmielnik May 17, 2024
818fc88
Update Data Picker tests (#42565)
kamilmielnik May 17, 2024
d7b9c67
Integrate Recents tab in Data Picker (#42821)
kamilmielnik May 17, 2024
ea06615
Merge branch 'master' into data-picker
kamilmielnik May 17, 2024
7be0ce2
Update test
kamilmielnik May 17, 2024
aa2e4d4
Use aria-selected instead of CSS for assertions in notebook-data-sour…
kamilmielnik May 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 9 additions & 3 deletions e2e/support/helpers/e2e-collection-helpers.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
import { entityPickerModal, getFullName, popover } from "e2e/support/helpers";
import {
entityPickerModal,
entityPickerModalLevel,
entityPickerModalTab,
getFullName,
popover,
} from "e2e/support/helpers";

/**
* Clicks the "+" icon on the collection page and selects one of the menu options
Expand Down Expand Up @@ -86,12 +92,12 @@ export const moveOpenedCollectionTo = newParent => {

export function pickEntity({ path, select, tab }) {
if (tab) {
cy.findByRole("tab", { name: tab }).click();
entityPickerModalTab(tab).click();
}
if (path) {
cy.findByTestId("nested-item-picker").within(() => {
for (const [index, name] of path.entries()) {
cy.findByTestId(`item-picker-level-${index}`).findByText(name).click();
entityPickerModalLevel(index).findByText(name).click();
}
});
}
Expand Down
35 changes: 20 additions & 15 deletions e2e/support/helpers/e2e-notebook-helpers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import type { CyHttpMessages } from "cypress/types/net-stubbing";

import { popover } from "e2e/support/helpers/e2e-ui-elements-helpers";
import {
entityPickerModal,
entityPickerModalTab,
popover,
} from "e2e/support/helpers/e2e-ui-elements-helpers";
import type { NotebookStepType } from "metabase/query_builder/components/notebook/types";

/**
Expand Down Expand Up @@ -143,7 +147,11 @@ export function joinTable(
lhsColumnName?: string,
rhsColumnName?: string,
) {
popover().findByText(tableName).click();
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.findByText(tableName).click();
});

if (lhsColumnName && rhsColumnName) {
popover().findByText(lhsColumnName).click();
popover().findByText(rhsColumnName).click();
Expand All @@ -166,25 +174,22 @@ export function selectSavedQuestionsToJoin(
secondQuestionName: string,
) {
cy.intercept("GET", "/api/database/*/schemas").as("loadSchemas");
cy.findAllByTestId("data-bucket-list-item")
.contains("Saved Questions")
.click();
entityPickerModal().within(() => {
entityPickerModalTab("Models").should("exist");
entityPickerModalTab("Tables").should("exist");
entityPickerModalTab("Saved questions").click();
cy.findByText(firstQuestionName).click();
});

cy.findByTestId("select-list")
.findAllByRole("menuitem")
.contains(firstQuestionName)
.click();
cy.wait("@loadSchemas");

// join to question b
cy.icon("join_left_outer").click();

popover().within(() => {
cy.findByText("Sample Database").should("be.visible").click();
cy.findByText("Raw Data").should("be.visible").click();
cy.findAllByTestId("data-bucket-list-item")
.contains("Saved Questions")
.click();
entityPickerModal().within(() => {
entityPickerModalTab("Models").should("exist");
entityPickerModalTab("Tables").should("exist");
entityPickerModalTab("Saved questions").click();
cy.findByText(secondQuestionName).click();
});
}
Expand Down
12 changes: 12 additions & 0 deletions e2e/support/helpers/e2e-ui-elements-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,18 @@ export function entityPickerModal() {
return cy.findByTestId("entity-picker-modal");
}

export function entityPickerModalLevel(level) {
return cy.findByTestId(`item-picker-level-${level}`);
}

export function entityPickerModalItem(level, name) {
return entityPickerModalLevel(level).findByText(name).parents("button");
}

export function entityPickerModalTab(name) {
return cy.findAllByRole("tab").filter(`:contains(${name})`);
}

export function collectionOnTheGoModal() {
return cy.findByTestId("create-collection-on-the-go");
}
Expand Down
33 changes: 19 additions & 14 deletions e2e/test/scenarios/admin/datamodel/editor.cy.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@ import {
import { SAMPLE_DATABASE } from "e2e/support/cypress_sample_database";
import {
describeEE,
entityPickerModal,
entityPickerModalTab,
moveDnDKitElement,
openOrdersTable,
openProductsTable,
openReviewsTable,
openTable,
popover,
restore,
startNewQuestion,
setTokenFeatures,
openTable,
moveDnDKitElement,
startNewQuestion,
} from "e2e/support/helpers";

const { ORDERS, ORDERS_ID, PRODUCTS_ID, REVIEWS, REVIEWS_ID, PEOPLE_ID } =
Expand Down Expand Up @@ -54,8 +56,8 @@ describe("scenarios > admin > datamodel > editor", () => {
cy.findByText("Updated Table display_name").should("be.visible");

startNewQuestion();
popover().within(() => {
cy.findByText("Raw Data").click();
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.findByText("People").should("be.visible");
cy.findByText("New orders").should("be.visible");
});
Expand Down Expand Up @@ -101,8 +103,8 @@ describe("scenarios > admin > datamodel > editor", () => {
cy.findByText("5 Hidden Tables").should("be.visible");

startNewQuestion();
popover().within(() => {
cy.findByText("Raw Data").click();
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.findByText("People").should("be.visible");
cy.findByText("Orders").should("not.exist");
});
Expand All @@ -115,8 +117,8 @@ describe("scenarios > admin > datamodel > editor", () => {
cy.findByText("4 Hidden Tables").should("be.visible");

startNewQuestion();
popover().within(() => {
cy.findByText("Raw Data").click();
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.findByText("People").should("be.visible");
cy.findByText("Orders").should("be.visible");
});
Expand Down Expand Up @@ -227,7 +229,8 @@ describe("scenarios > admin > datamodel > editor", () => {

openTable({ database: SAMPLE_DB_ID, table: ORDERS_ID, mode: "notebook" });
cy.icon("join_left_outer").click();
popover().within(() => {
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.findByText("Products").click();
});
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
Expand Down Expand Up @@ -409,7 +412,8 @@ describe("scenarios > admin > datamodel > editor", () => {

openTable({ database: SAMPLE_DB_ID, table: ORDERS_ID, mode: "notebook" });
cy.icon("join_left_outer").click();
popover().within(() => {
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.findByText("Products").click();
});
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
Expand Down Expand Up @@ -438,8 +442,8 @@ describe("scenarios > admin > datamodel > editor", () => {

cy.signInAsNormalUser();
startNewQuestion();
popover().within(() => {
cy.findByText("Raw Data").click();
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.findByText("People").should("be.visible");
cy.findByText("New orders").should("be.visible");
});
Expand Down Expand Up @@ -507,7 +511,8 @@ describe("scenarios > admin > datamodel > editor", () => {
cy.signInAsNormalUser();
openTable({ database: SAMPLE_DB_ID, table: ORDERS_ID, mode: "notebook" });
cy.icon("join_left_outer").click();
popover().within(() => {
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.findByText("Products").click();
});
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
Expand Down
18 changes: 11 additions & 7 deletions e2e/test/scenarios/admin/datamodel/hide_tables.cy.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import { SAMPLE_DB_ID, SAMPLE_DB_SCHEMA_ID } from "e2e/support/cypress_data";
import { SAMPLE_DATABASE } from "e2e/support/cypress_sample_database";
import { restore, startNewQuestion } from "e2e/support/helpers";
import {
entityPickerModal,
entityPickerModalTab,
restore,
startNewQuestion,
} from "e2e/support/helpers";

const { ORDERS_ID } = SAMPLE_DATABASE;

Expand Down Expand Up @@ -31,12 +36,11 @@ describe("scenarios > admin > datamodel > hidden tables (metabase#9759)", () =>

// It shouldn't show in a new question data picker
startNewQuestion();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.contains("Raw Data").click();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.contains("Products");
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.contains("Orders").should("not.exist");
entityPickerModal().within(() => {
entityPickerModalTab("Tables").click();
cy.contains("Products").should("exist");
cy.contains("Orders").should("not.exist");
});
});
});

Expand Down
30 changes: 16 additions & 14 deletions e2e/test/scenarios/binning/binning-reproductions.cy.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { SAMPLE_DB_ID } from "e2e/support/cypress_data";
import { SAMPLE_DATABASE } from "e2e/support/cypress_sample_database";
import {
entityPickerModal,
restore,
popover,
visualize,
Expand All @@ -14,6 +15,7 @@ import {
rightSidebar,
chartPathWithFillColor,
cartesianChartCircle,
entityPickerModalTab,
} from "e2e/support/helpers";

const { ORDERS, ORDERS_ID } = SAMPLE_DATABASE;
Expand All @@ -31,10 +33,10 @@ describe("binning related reproductions", () => {
});

startNewQuestion();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("Saved Questions").click();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("16327").click();
entityPickerModal().within(() => {
entityPickerModalTab("Saved questions").click();
cy.findByText("16327").click();
});

// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("Pick the metric you want to see").click();
Expand Down Expand Up @@ -103,8 +105,8 @@ describe("binning related reproductions", () => {
);

startNewQuestion();
popover().within(() => {
cy.findByText("Saved Questions").click();
entityPickerModal().within(() => {
entityPickerModalTab("Saved questions").click();
cy.findByText("17975").click();
});

Expand Down Expand Up @@ -143,10 +145,8 @@ describe("binning related reproductions", () => {

cy.icon("join_left_outer").click();

popover().within(() => {
cy.findByTextEnsureVisible("Sample Database").click();
cy.findByTextEnsureVisible("Raw Data").click();
cy.findByTextEnsureVisible("Saved Questions").click();
entityPickerModal().within(() => {
entityPickerModalTab("Saved questions").click();
cy.findByText("18646").click();
});

Expand Down Expand Up @@ -191,8 +191,8 @@ describe("binning related reproductions", () => {
// it is essential for this repro to find question following these exact steps
// (for example, visiting `/collection/root` would yield different result)
startNewQuestion();
popover().within(() => {
cy.findByText("Saved Questions").click();
entityPickerModal().within(() => {
entityPickerModalTab("Saved questions").click();
cy.findByText("11439").click();
});

Expand Down Expand Up @@ -380,8 +380,10 @@ describe("binning related reproductions", () => {

function openSummarizeOptions(questionType) {
startNewQuestion();
cy.findByText("Saved Questions").click();
cy.findByText("16379").click();
entityPickerModal().within(() => {
entityPickerModalTab("Saved questions").click();
cy.findByText("16379").click();
});

if (questionType === "Simple mode") {
visualize();
Expand Down
30 changes: 18 additions & 12 deletions e2e/test/scenarios/binning/qb-explicit-joins.cy.spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { SAMPLE_DATABASE } from "e2e/support/cypress_sample_database";
import {
entityPickerModal,
restore,
visualize,
changeBinningForDimension,
Expand All @@ -8,6 +9,7 @@ import {
echartsContainer,
cartesianChartCircle,
chartPathWithFillColor,
entityPickerModalTab,
} from "e2e/support/helpers";

const { ORDERS_ID, ORDERS, PEOPLE_ID, PEOPLE, PRODUCTS_ID, PRODUCTS } =
Expand Down Expand Up @@ -65,10 +67,11 @@ describe("scenarios > binning > from a saved QB question with explicit joins", (
context("via simple mode", () => {
beforeEach(() => {
startNewQuestion();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("Saved Questions").click();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("QB Binning").click();

entityPickerModal().within(() => {
entityPickerModalTab("Saved questions").click();
cy.findByText("QB Binning").click();
});

visualize();
summarize();
Expand Down Expand Up @@ -130,10 +133,11 @@ describe("scenarios > binning > from a saved QB question with explicit joins", (
context("via notebook mode", () => {
beforeEach(() => {
startNewQuestion();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("Saved Questions").click();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("QB Binning").click();

entityPickerModal().within(() => {
entityPickerModalTab("Saved questions").click();
cy.findByText("QB Binning").click();
});

// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("Pick the metric you want to see").click();
Expand Down Expand Up @@ -202,10 +206,12 @@ describe("scenarios > binning > from a saved QB question with explicit joins", (
context("via column popover", () => {
beforeEach(() => {
startNewQuestion();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("Saved Questions").click();
// eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
cy.findByText("QB Binning").click();

entityPickerModal().within(() => {
entityPickerModalTab("Saved questions").click();
cy.findByText("QB Binning").click();
});

visualize();
});

Expand Down
2 changes: 1 addition & 1 deletion e2e/test/scenarios/collections/collections.cy.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ describe("scenarios > collection defaults", () => {
pickEntity({
path: ["Our analytics", `Collection ${COLLECTIONS_COUNT}`],
select: true,
tab: /Collections/,
tab: "Collections",
});

cy.findByTestId("new-collection-modal").button("Create").click();
Expand Down