This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 6921d94 fix: show Import button only if has perms (#16763)
6921d94 is described below
commit 6921d948617d7af6b009f3033265bb9f1073f0e6
Author: Beto Dealmeida <[email protected]>
AuthorDate: Thu Sep 23 14:55:21 2021 -0700
fix: show Import button only if has perms (#16763)
* fix: show Import button only if has perms
* Fix tests
---
.../src/views/CRUD/chart/ChartList.test.jsx | 2 +-
.../src/views/CRUD/chart/ChartList.tsx | 31 +++++++++++-----------
.../views/CRUD/dashboard/DashboardList.test.jsx | 2 +-
.../src/views/CRUD/dashboard/DashboardList.tsx | 31 +++++++++++-----------
.../views/CRUD/data/database/DatabaseList.test.jsx | 2 +-
.../views/CRUD/data/dataset/DatasetList.test.jsx | 2 +-
.../src/views/CRUD/data/dataset/DatasetList.tsx | 30 ++++++++++-----------
.../CRUD/data/savedquery/SavedQueryList.test.jsx | 14 +++++-----
.../views/CRUD/data/savedquery/SavedQueryList.tsx | 3 ++-
9 files changed, 60 insertions(+), 57 deletions(-)
diff --git a/superset-frontend/src/views/CRUD/chart/ChartList.test.jsx
b/superset-frontend/src/views/CRUD/chart/ChartList.test.jsx
index 894aa4e..394c8b6 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 547482a..6f3e7b7 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: (
- <Tooltip
- id="import-tooltip"
- title={t('Import charts')}
- placement="bottomRight"
- >
- <Icons.Import data-test="import-button" />
- </Tooltip>
- ),
- buttonStyle: 'link',
- onClick: openChartImportModal,
- });
+
+ if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
+ subMenuButtons.push({
+ name: (
+ <Tooltip
+ id="import-tooltip"
+ title={t('Import charts')}
+ placement="bottomRight"
+ >
+ <Icons.Import data-test="import-button" />
+ </Tooltip>
+ ),
+ 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 4bb2043..3561caf 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 8d6be33..04c0e8c 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: (
- <Tooltip
- id="import-tooltip"
- title={t('Import dashboards')}
- placement="bottomRight"
- >
- <Icons.Import data-test="import-button" />
- </Tooltip>
- ),
- buttonStyle: 'link',
- onClick: openDashboardImportModal,
- });
+
+ if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
+ subMenuButtons.push({
+ name: (
+ <Tooltip
+ id="import-tooltip"
+ title={t('Import dashboards')}
+ placement="bottomRight"
+ >
+ <Icons.Import data-test="import-button" />
+ </Tooltip>
+ ),
+ 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 3f8e619..815ae62 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 11cc3d4..0854f00 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 5b73d54..e8f0583 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<DatasetListProps> =
({
onClick: () => setDatasetAddModalOpen(true),
buttonStyle: 'primary',
});
- }
- if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
- buttonArr.push({
- name: (
- <Tooltip
- id="import-tooltip"
- title={t('Import datasets')}
- placement="bottomRight"
- >
- <Icons.Import data-test="import-button" />
- </Tooltip>
- ),
- buttonStyle: 'link',
- onClick: openDatasetImportModal,
- });
+ if (isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT)) {
+ buttonArr.push({
+ name: (
+ <Tooltip
+ id="import-tooltip"
+ title={t('Import datasets')}
+ placement="bottomRight"
+ >
+ <Icons.Import data-test="import-button" />
+ </Tooltip>
+ ),
+ 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 6bbb384..8e1c60d 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 25eb493..0f6fd5f 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: (
<Tooltip