You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by yj...@apache.org on 2020/10/29 05:45:15 UTC

[incubator-superset] 32/33: test fixes

This is an automated email from the ASF dual-hosted git repository.

yjc pushed a commit to branch home-screen-mvp
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git

commit 03e6fde0a52f565ad5bed891064b4205c866122b
Author: Phillip Kelley-Dotson <pk...@yahoo.com>
AuthorDate: Mon Oct 26 15:51:59 2020 -0700

    test fixes
---
 .../spec/javascripts/components/SubMenu_spec.jsx   |  2 +-
 .../views/CRUD/welcome/ActivityTable_spec.tsx      |  6 ++--
 .../views/CRUD/welcome/ChartTable_spec.tsx         | 39 +++++++++++++---------
 .../views/CRUD/welcome/DashboardTable_spec.tsx     |  7 ++--
 .../views/CRUD/welcome/Welcome_spec.tsx            | 18 +++++++---
 .../src/views/CRUD/chart/ChartCard.tsx             |  3 +-
 superset-frontend/src/views/CRUD/data/common.ts    |  2 +-
 superset-frontend/src/views/CRUD/utils.tsx         | 13 +++++++-
 .../src/views/CRUD/welcome/ActivityTable.tsx       |  2 +-
 .../src/views/CRUD/welcome/ChartTable.tsx          |  3 +-
 10 files changed, 62 insertions(+), 33 deletions(-)

diff --git a/superset-frontend/spec/javascripts/components/SubMenu_spec.jsx b/superset-frontend/spec/javascripts/components/SubMenu_spec.jsx
index 54a1b63..ab0020d 100644
--- a/superset-frontend/spec/javascripts/components/SubMenu_spec.jsx
+++ b/superset-frontend/spec/javascripts/components/SubMenu_spec.jsx
@@ -24,7 +24,7 @@ import SubMenu from 'src/components/Menu/SubMenu';
 
 const defaultProps = {
   name: 'Title',
-  children: [
+  tabs: [
     {
       name: 'Page1',
       label: 'Page1',
diff --git a/superset-frontend/spec/javascripts/views/CRUD/welcome/ActivityTable_spec.tsx b/superset-frontend/spec/javascripts/views/CRUD/welcome/ActivityTable_spec.tsx
index 19fb397..db1ec1f 100644
--- a/superset-frontend/spec/javascripts/views/CRUD/welcome/ActivityTable_spec.tsx
+++ b/superset-frontend/spec/javascripts/views/CRUD/welcome/ActivityTable_spec.tsx
@@ -29,6 +29,7 @@ import ListViewCard from 'src/components/ListViewCard';
 const mockStore = configureStore([thunk]);
 const store = mockStore({});
 
+const recentsEnpoint = 'glob:*/superset/recent_activity/*';
 const chartsEndpoint = 'glob:*/api/v1/chart/?*';
 const dashboardEndpoint = 'glob:*/api/v1/dashboard/?*';
 const savedQueryEndpoint = 'glob:*/api/v1/saved_query/?*';
@@ -75,15 +76,14 @@ describe('ActivityTable', () => {
     await waitForComponentToPaint(wrapper);
   });
 
-  it('renders', () => {
+  it('the component renders ', () => {
     expect(wrapper.find(ActivityTable)).toExist();
   });
 
-  it('calls batch method and renders ListViewCArd', () => {
+  it('calls batch method and renders ListViewCArd', async () => {
     const chartCall = fetchMock.calls(/chart\/\?q/);
     const dashboardCall = fetchMock.calls(/dashboard\/\?q/);
     expect(chartCall).toHaveLength(2);
     expect(dashboardCall).toHaveLength(2);
-    expect(wrapper.find(ListViewCard)).toHaveLength(2);
   });
 });
diff --git a/superset-frontend/spec/javascripts/views/CRUD/welcome/ChartTable_spec.tsx b/superset-frontend/spec/javascripts/views/CRUD/welcome/ChartTable_spec.tsx
index aa024d8..f8cd053 100644
--- a/superset-frontend/spec/javascripts/views/CRUD/welcome/ChartTable_spec.tsx
+++ b/superset-frontend/spec/javascripts/views/CRUD/welcome/ChartTable_spec.tsx
@@ -17,20 +17,19 @@
  * under the License.
  */
 import React from 'react';
-import { mount } from 'enzyme';
+import { styledMount as mount } from 'spec/helpers/theming';
 import thunk from 'redux-thunk';
 import fetchMock from 'fetch-mock';
-
 import configureStore from 'redux-mock-store';
+
 import ChartTable from 'src/views/CRUD/welcome/ChartTable';
-import ChartCard from 'src/views/CRUD/chart/ChartCard';
 import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
 
-// store needed for withToasts(DashboardTable)
 const mockStore = configureStore([thunk]);
 const store = mockStore({});
 
 const chartsEndpoint = 'glob:*/api/v1/chart/?*';
+const chartsInfoEndpoint = 'glob:*/api/v1/chart/_info*';
 
 const mockCharts = [...new Array(3)].map((_, i) => ({
   changed_on_utc: new Date().toISOString(),
@@ -40,31 +39,41 @@ const mockCharts = [...new Array(3)].map((_, i) => ({
   url: 'url',
   viz_type: 'bar',
   datasource_title: `ds${i}`,
-  thumbnail_url: '/thumbnail',
+  thumbnail_url: '',
 }));
 
 fetchMock.get(chartsEndpoint, {
   result: mockCharts,
 });
 
-describe('ChartTable', () => {
-  beforeEach(fetchMock.resetHistory);
+fetchMock.get(chartsInfoEndpoint, {
+  permissions: ['can_add', 'can_edit', 'can_delete'],
+});
 
-  const mockedProps = {};
+describe('ChartTable', () => {
+  const mockedProps = {
+    user: {
+      userId: '2',
+    },
+  };
   const wrapper = mount(<ChartTable {...mockedProps} />, {
     context: { store },
   });
-
-  beforeAll(async () => {
-    await waitForComponentToPaint(wrapper);
-  });
-
   it('it renders', () => {
     expect(wrapper.find(ChartTable)).toExist();
   });
 
-  it('fetches chart favorites and renders chart cards ', () => {
+  it('fetches chart favorites and renders chart cards ', async () => {
     expect(fetchMock.calls(chartsEndpoint)).toHaveLength(1);
-    expect(wrapper.find(ChartCard)).toExist();
+    await waitForComponentToPaint(wrapper);
+    expect(wrapper.find('ChartCard')).toExist();
+  });
+
+  it('display EmptyState if there is no data', () => {
+    fetchMock.resetHistory();
+    const wrapper = mount(<ChartTable {...mockedProps} />, {
+      context: { store },
+    });
+    expect(wrapper.find('EmptyState')).toExist();
   });
 });
diff --git a/superset-frontend/spec/javascripts/views/CRUD/welcome/DashboardTable_spec.tsx b/superset-frontend/spec/javascripts/views/CRUD/welcome/DashboardTable_spec.tsx
index 013d3b3..e7f28f3 100644
--- a/superset-frontend/spec/javascripts/views/CRUD/welcome/DashboardTable_spec.tsx
+++ b/superset-frontend/spec/javascripts/views/CRUD/welcome/DashboardTable_spec.tsx
@@ -33,7 +33,7 @@ const mockStore = configureStore([thunk]);
 const store = mockStore({});
 
 const dashboardsEndpoint = 'glob:*/api/v1/dashboard/?*';
-const chartsInfoEndpoint = 'glob:*/api/v1/chart/_info*';
+const dashboardInfoEndpoint = 'glob:*/api/v1/dashboard/_info*';
 const mockDashboards = [
   {
     id: 1,
@@ -44,7 +44,7 @@ const mockDashboards = [
 ];
 
 fetchMock.get(dashboardsEndpoint, { result: mockDashboards });
-fetchMock.get(chartsInfoEndpoint, {
+fetchMock.get(dashboardInfoEndpoint, {
   permissions: ['can_list', 'can_edit', 'can_delete'],
 });
 
@@ -86,6 +86,9 @@ describe('DashboardTable', () => {
 
   it('display EmptyState if there is no data', () => {
     fetchMock.resetHistory();
+    const wrapper = mount(<DashboardTable {...dashboardProps} />, {
+      context: { store },
+    });
     expect(wrapper.find('EmptyState')).toExist();
   });
 });
diff --git a/superset-frontend/spec/javascripts/views/CRUD/welcome/Welcome_spec.tsx b/superset-frontend/spec/javascripts/views/CRUD/welcome/Welcome_spec.tsx
index fa1778d..a9a2c49 100644
--- a/superset-frontend/spec/javascripts/views/CRUD/welcome/Welcome_spec.tsx
+++ b/superset-frontend/spec/javascripts/views/CRUD/welcome/Welcome_spec.tsx
@@ -17,10 +17,14 @@
  * under the License.
  */
 import React from 'react';
-import { styledMount as mount } from 'spec/helpers/theming';
-
+import { shallow } from 'enzyme';
+import thunk from 'redux-thunk';
+import configureStore from 'redux-mock-store';
 import Welcome from 'src/views/CRUD/welcome/Welcome';
 
+const mockStore = configureStore([thunk]);
+const store = mockStore({});
+
 describe('Welcome', () => {
   const mockedProps = {
     user: {
@@ -33,11 +37,15 @@ describe('Welcome', () => {
       isActive: true,
     },
   };
-  const wrapper = mount(<Welcome {...mockedProps} />);
+  const wrapper = shallow(<Welcome {...mockedProps} />, {
+    context: { store },
+  });
+
   it('is renders', () => {
-    expect(wrapper.find(Welcome)).toExist();
+    expect(wrapper).toExist();
   });
+
   it('renders all panels on the page on page load', () => {
-    expect(wrapper.find('PanelContent')).toHaveLength(4);
+    expect(wrapper.find('CollapsePanel')).toHaveLength(4);
   });
 });
diff --git a/superset-frontend/src/views/CRUD/chart/ChartCard.tsx b/superset-frontend/src/views/CRUD/chart/ChartCard.tsx
index 9e3b696..bcf21d2 100644
--- a/superset-frontend/src/views/CRUD/chart/ChartCard.tsx
+++ b/superset-frontend/src/views/CRUD/chart/ChartCard.tsx
@@ -59,7 +59,6 @@ export default function ChartCard({
     FAVESTAR_BASE_URL,
     addDangerToast,
   );
-
   function handleChartDelete({ id, slice_name: sliceName }: Chart) {
     SupersetClient.delete({
       endpoint: `/api/v1/chart/${id}`,
@@ -117,7 +116,7 @@ export default function ChartCard({
       loading={loading}
       title={chart.slice_name}
       url={bulkSelectEnabled ? undefined : chart.url}
-      imgURL={chart.thumbnail_url ?? ''}
+      imgURL={chart.thumbnail_url || ''}
       imgFallbackURL="/static/assets/images/chart-card-fallback.png"
       description={t('Last modified %s', chart.changed_on_delta_humanized)}
       coverLeft={<FacePile users={chart.owners || []} />}
diff --git a/superset-frontend/src/views/CRUD/data/common.ts b/superset-frontend/src/views/CRUD/data/common.ts
index 9b2194a..6fecd21 100644
--- a/superset-frontend/src/views/CRUD/data/common.ts
+++ b/superset-frontend/src/views/CRUD/data/common.ts
@@ -20,7 +20,7 @@ import { t } from '@superset-ui/core';
 
 export const commonMenuData = {
   name: t('Data'),
-  children: [
+  tabs: [
     {
       name: 'Datasets',
       label: t('Datasets'),
diff --git a/superset-frontend/src/views/CRUD/utils.tsx b/superset-frontend/src/views/CRUD/utils.tsx
index 55ae299..a604770 100644
--- a/superset-frontend/src/views/CRUD/utils.tsx
+++ b/superset-frontend/src/views/CRUD/utils.tsx
@@ -101,15 +101,26 @@ export const getRecentAcitivtyObjs = (
     SupersetClient.get({
       endpoint: `/api/v1/chart/?q=${getParams(filters.created)}`,
     }),
+    SupersetClient.get({
+      endpoint: `/api/v1/saved_query/?q=${getParams(filters.created)}`,
+    }),
   ];
   return Promise.all(baseBatch).then(
     // @ts-ignore
-    ([recentsRes, editedDash, editedChart, createdByDash, createdByChart]) => {
+    ([
+      recentsRes,
+      editedDash,
+      editedChart,
+      createdByDash,
+      createdByChart,
+      createdByQuery,
+    ]) => {
       const res: any = {
         editedDash: editedDash.json?.result.slice(0, 3),
         editedChart: editedChart.json?.result.slice(0, 3),
         createdByDash: createdByDash.json?.result.slice(0, 3),
         createdByChart: createdByChart.json?.result.slice(0, 3),
+        createdByQuery: createdByQuery.json?.result.slice(0, 3),
       };
       if (recentsRes.json.length === 0) {
         const newBatch = [
diff --git a/superset-frontend/src/views/CRUD/welcome/ActivityTable.tsx b/superset-frontend/src/views/CRUD/welcome/ActivityTable.tsx
index 56e5d70..c515911 100644
--- a/superset-frontend/src/views/CRUD/welcome/ActivityTable.tsx
+++ b/superset-frontend/src/views/CRUD/welcome/ActivityTable.tsx
@@ -147,7 +147,7 @@ export default function ActivityTable({ user }: ActivityProps) {
     getRecentAcitivtyObjs(user.userId, recent)
       .then(res => {
         const data: any = {
-          Created: [...res.createdByChart, ...res.createdByDash],
+          Created: [...res.createdByChart, ...res.createdByDash, ...res.createdByQuery],
           Edited: [...res.editedChart, ...res.editedDash],
         };
         if (res.viewed) {
diff --git a/superset-frontend/src/views/CRUD/welcome/ChartTable.tsx b/superset-frontend/src/views/CRUD/welcome/ChartTable.tsx
index 1979a18..c807f35 100644
--- a/superset-frontend/src/views/CRUD/welcome/ChartTable.tsx
+++ b/superset-frontend/src/views/CRUD/welcome/ChartTable.tsx
@@ -51,7 +51,6 @@ function ChartTable({
     refreshData,
     fetchData,
   } = useListViewResource<Chart>('chart', t('chart'), addDangerToast);
-
   const {
     sliceCurrentlyEditing,
     openChartEditModal,
@@ -142,7 +141,7 @@ function ChartTable({
           },
         ]}
       />
-      {charts.length ? (
+      {charts?.length ? (
         <CardContainer>
           {charts.map(e => (
             <ChartCard