diff --git a/superset-frontend/src/views/CRUD/chart/ChartList.test.jsx b/superset-frontend/src/views/CRUD/chart/ChartList.test.jsx
index 894aa4ec6147d..394c8b6028a8c 100644
--- a/superset-frontend/src/views/CRUD/chart/ChartList.test.jsx
+++ b/superset-frontend/src/views/CRUD/chart/ChartList.test.jsx
@@ -190,7 +190,7 @@ describe('RTL', () => {
});
it('renders an "Import Chart" tooltip under import button', async () => {
- const importButton = screen.getByTestId('import-button');
+ const importButton = await screen.findByTestId('import-button');
userEvent.hover(importButton);
await screen.findByRole('tooltip');
diff --git a/superset-frontend/src/views/CRUD/chart/ChartList.tsx b/superset-frontend/src/views/CRUD/chart/ChartList.tsx
index 547482a7f28b2..6f3e7b7d5b966 100644
--- a/superset-frontend/src/views/CRUD/chart/ChartList.tsx
+++ b/superset-frontend/src/views/CRUD/chart/ChartList.tsx
@@ -586,21 +586,22 @@ function ChartList(props: ChartListProps) {
window.location.assign('/chart/add');
},
});
- }
- if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
- subMenuButtons.push({
- name: (
-
-
-
- ),
- buttonStyle: 'link',
- onClick: openChartImportModal,
- });
+
+ if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
+ subMenuButtons.push({
+ name: (
+
+
+
+ ),
+ buttonStyle: 'link',
+ onClick: openChartImportModal,
+ });
+ }
}
return (
<>
diff --git a/superset-frontend/src/views/CRUD/dashboard/DashboardList.test.jsx b/superset-frontend/src/views/CRUD/dashboard/DashboardList.test.jsx
index 4bb2043bc7db8..3561cafdbce6c 100644
--- a/superset-frontend/src/views/CRUD/dashboard/DashboardList.test.jsx
+++ b/superset-frontend/src/views/CRUD/dashboard/DashboardList.test.jsx
@@ -211,7 +211,7 @@ describe('RTL', () => {
});
it('renders an "Import Dashboard" tooltip under import button', async () => {
- const importButton = screen.getByTestId('import-button');
+ const importButton = await screen.findByTestId('import-button');
userEvent.hover(importButton);
await screen.findByRole('tooltip');
diff --git a/superset-frontend/src/views/CRUD/dashboard/DashboardList.tsx b/superset-frontend/src/views/CRUD/dashboard/DashboardList.tsx
index 8d6be338e0a33..04c0e8c764022 100644
--- a/superset-frontend/src/views/CRUD/dashboard/DashboardList.tsx
+++ b/superset-frontend/src/views/CRUD/dashboard/DashboardList.tsx
@@ -553,21 +553,22 @@ function DashboardList(props: DashboardListProps) {
window.location.assign('/dashboard/new');
},
});
- }
- if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
- subMenuButtons.push({
- name: (
-
-
-
- ),
- buttonStyle: 'link',
- onClick: openDashboardImportModal,
- });
+
+ if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
+ subMenuButtons.push({
+ name: (
+
+
+
+ ),
+ buttonStyle: 'link',
+ onClick: openDashboardImportModal,
+ });
+ }
}
return (
<>
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseList.test.jsx b/superset-frontend/src/views/CRUD/data/database/DatabaseList.test.jsx
index 3f8e619cb24e3..815ae628fca06 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseList.test.jsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseList.test.jsx
@@ -211,7 +211,7 @@ describe('RTL', () => {
});
it('renders an "Import Database" tooltip under import button', async () => {
- const importButton = screen.getByTestId('import-button');
+ const importButton = await screen.findByTestId('import-button');
userEvent.hover(importButton);
await screen.findByRole('tooltip');
diff --git a/superset-frontend/src/views/CRUD/data/dataset/DatasetList.test.jsx b/superset-frontend/src/views/CRUD/data/dataset/DatasetList.test.jsx
index 11cc3d4033a2f..0854f006de517 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/DatasetList.test.jsx
+++ b/superset-frontend/src/views/CRUD/data/dataset/DatasetList.test.jsx
@@ -211,7 +211,7 @@ describe('RTL', () => {
});
it('renders an "Import Dataset" tooltip under import button', async () => {
- const importButton = screen.getByTestId('import-button');
+ const importButton = await screen.findByTestId('import-button');
userEvent.hover(importButton);
await screen.findByRole('tooltip');
diff --git a/superset-frontend/src/views/CRUD/data/dataset/DatasetList.tsx b/superset-frontend/src/views/CRUD/data/dataset/DatasetList.tsx
index 5b73d545b87c4..e8f05830bb97c 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/DatasetList.tsx
+++ b/superset-frontend/src/views/CRUD/data/dataset/DatasetList.tsx
@@ -512,22 +512,22 @@ const DatasetList: FunctionComponent = ({
onClick: () => setDatasetAddModalOpen(true),
buttonStyle: 'primary',
});
- }
- if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
- buttonArr.push({
- name: (
-
-
-
- ),
- buttonStyle: 'link',
- onClick: openDatasetImportModal,
- });
+ if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
+ buttonArr.push({
+ name: (
+
+
+
+ ),
+ buttonStyle: 'link',
+ onClick: openDatasetImportModal,
+ });
+ }
}
menuData.buttons = buttonArr;
diff --git a/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryList.test.jsx b/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryList.test.jsx
index 6bbb384111c76..8e1c60d6690c4 100644
--- a/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryList.test.jsx
+++ b/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryList.test.jsx
@@ -284,14 +284,14 @@ describe('RTL', () => {
expect(exportTooltip).toBeInTheDocument();
});
- it('renders an import button in the submenu', () => {
+ it('renders an import button in the submenu', async () => {
// Grab and assert that import saved query button is visible
- const importButton = screen.getByTestId('import-button');
+ const importButton = await screen.findByTestId('import-button');
expect(importButton).toBeVisible();
});
it('renders an "Import Saved Query" tooltip under import button', async () => {
- const importButton = screen.getByTestId('import-button');
+ const importButton = await screen.findByTestId('import-button');
userEvent.hover(importButton);
waitFor(() => {
expect(importButton).toHaveClass('ant-tooltip-open');
@@ -303,9 +303,9 @@ describe('RTL', () => {
});
});
- it('renders an import model when import button is clicked', async () => {
+ it('renders an import modal when import button is clicked', async () => {
// Grab and click import saved query button to reveal modal
- const importButton = screen.getByTestId('import-button');
+ const importButton = await screen.findByTestId('import-button');
userEvent.click(importButton);
// Grab and assert that saved query import modal's heading is visible
@@ -315,9 +315,9 @@ describe('RTL', () => {
expect(importSavedQueryModalHeading).toBeVisible();
});
- it('imports a saved query', () => {
+ it('imports a saved query', async () => {
// Grab and click import saved query button to reveal modal
- const importButton = screen.getByTestId('import-button');
+ const importButton = await screen.findByTestId('import-button');
userEvent.click(importButton);
// Grab "Choose File" input from import modal
diff --git a/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryList.tsx b/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryList.tsx
index 25eb4933eddd1..0f6fd5f16b9a9 100644
--- a/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryList.tsx
+++ b/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryList.tsx
@@ -133,6 +133,7 @@ function SavedQueryList({
refreshData();
};
+ const canCreate = hasPerm('can_write');
const canEdit = hasPerm('can_write');
const canDelete = hasPerm('can_write');
const canExport =
@@ -185,7 +186,7 @@ function SavedQueryList({
buttonStyle: 'primary',
});
- if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
+ if (canCreate && isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
subMenuButtons.push({
name: (