mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-12-17 10:35:08 +00:00
Fix(UI): Fixed tables from all the services showing on database Schema page (#9202)
* Fixed tables from all the services showing on database Schema page * Removed RequestDescription component from DatabaseSchemaPage as it is not required * Added unit tests for DatabaseSchemaPage * Removed unnecessary mocks in unit test
This commit is contained in:
parent
601b9cd38a
commit
6166d193a3
@ -54,7 +54,6 @@ import TitleBreadcrumb from '../../components/common/title-breadcrumb/title-brea
|
|||||||
import { TitleBreadcrumbProps } from '../../components/common/title-breadcrumb/title-breadcrumb.interface';
|
import { TitleBreadcrumbProps } from '../../components/common/title-breadcrumb/title-breadcrumb.interface';
|
||||||
import PageContainerV1 from '../../components/containers/PageContainerV1';
|
import PageContainerV1 from '../../components/containers/PageContainerV1';
|
||||||
import Loader from '../../components/Loader/Loader';
|
import Loader from '../../components/Loader/Loader';
|
||||||
import RequestDescriptionModal from '../../components/Modals/RequestDescriptionModal/RequestDescriptionModal';
|
|
||||||
import { usePermissionProvider } from '../../components/PermissionProvider/PermissionProvider';
|
import { usePermissionProvider } from '../../components/PermissionProvider/PermissionProvider';
|
||||||
import {
|
import {
|
||||||
OperationPermission,
|
OperationPermission,
|
||||||
@ -80,7 +79,6 @@ import { CreateThread } from '../../generated/api/feed/createThread';
|
|||||||
import { DatabaseSchema } from '../../generated/entity/data/databaseSchema';
|
import { DatabaseSchema } from '../../generated/entity/data/databaseSchema';
|
||||||
import { Table } from '../../generated/entity/data/table';
|
import { Table } from '../../generated/entity/data/table';
|
||||||
import { Post, Thread } from '../../generated/entity/feed/thread';
|
import { Post, Thread } from '../../generated/entity/feed/thread';
|
||||||
import { EntityReference } from '../../generated/entity/teams/user';
|
|
||||||
import { Paging } from '../../generated/type/paging';
|
import { Paging } from '../../generated/type/paging';
|
||||||
import { useInfiniteScroll } from '../../hooks/useInfiniteScroll';
|
import { useInfiniteScroll } from '../../hooks/useInfiniteScroll';
|
||||||
import jsonData from '../../jsons/en';
|
import jsonData from '../../jsons/en';
|
||||||
@ -91,10 +89,10 @@ import {
|
|||||||
import {
|
import {
|
||||||
databaseSchemaDetailsTabs,
|
databaseSchemaDetailsTabs,
|
||||||
getCurrentDatabaseSchemaDetailsTab,
|
getCurrentDatabaseSchemaDetailsTab,
|
||||||
|
getQueryStringForSchemaTables,
|
||||||
getTablesFromSearchResponse,
|
getTablesFromSearchResponse,
|
||||||
} from '../../utils/DatabaseSchemaDetailsUtils';
|
} from '../../utils/DatabaseSchemaDetailsUtils';
|
||||||
import { getEntityFeedLink } from '../../utils/EntityUtils';
|
import { getEntityFeedLink } from '../../utils/EntityUtils';
|
||||||
import { getDefaultValue } from '../../utils/FeedElementUtils';
|
|
||||||
import {
|
import {
|
||||||
deletePost,
|
deletePost,
|
||||||
getEntityFieldThreadCounts,
|
getEntityFieldThreadCounts,
|
||||||
@ -144,7 +142,6 @@ const DatabaseSchemaPage: FunctionComponent = () => {
|
|||||||
>([]);
|
>([]);
|
||||||
|
|
||||||
const [threadLink, setThreadLink] = useState<string>('');
|
const [threadLink, setThreadLink] = useState<string>('');
|
||||||
const [selectedField, setSelectedField] = useState<string>('');
|
|
||||||
const [paging, setPaging] = useState<Paging>({} as Paging);
|
const [paging, setPaging] = useState<Paging>({} as Paging);
|
||||||
const [currentTablesPage, setCurrentTablesPage] =
|
const [currentTablesPage, setCurrentTablesPage] =
|
||||||
useState<number>(INITIAL_PAGING_VALUE);
|
useState<number>(INITIAL_PAGING_VALUE);
|
||||||
@ -230,13 +227,6 @@ const DatabaseSchemaPage: FunctionComponent = () => {
|
|||||||
setThreadLink('');
|
setThreadLink('');
|
||||||
};
|
};
|
||||||
|
|
||||||
const onEntityFieldSelect = (value: string) => {
|
|
||||||
setSelectedField(value);
|
|
||||||
};
|
|
||||||
const closeRequestModal = () => {
|
|
||||||
setSelectedField('');
|
|
||||||
};
|
|
||||||
|
|
||||||
const getEntityFeedCount = () => {
|
const getEntityFeedCount = () => {
|
||||||
getFeedCount(
|
getFeedCount(
|
||||||
getEntityFeedLink(EntityType.DATABASE_SCHEMA, databaseSchemaFQN)
|
getEntityFeedLink(EntityType.DATABASE_SCHEMA, databaseSchemaFQN)
|
||||||
@ -330,9 +320,13 @@ const DatabaseSchemaPage: FunctionComponent = () => {
|
|||||||
try {
|
try {
|
||||||
setCurrentTablesPage(pageNumber);
|
setCurrentTablesPage(pageNumber);
|
||||||
const res = await searchQuery({
|
const res = await searchQuery({
|
||||||
|
query: getQueryStringForSchemaTables(
|
||||||
|
databaseSchema.service,
|
||||||
|
databaseSchema.database,
|
||||||
|
databaseSchema
|
||||||
|
),
|
||||||
pageNumber,
|
pageNumber,
|
||||||
pageSize: PAGE_SIZE,
|
pageSize: PAGE_SIZE,
|
||||||
queryFilter: { 'databaseSchema.name': databaseSchema.name },
|
|
||||||
searchIndex: SearchIndex.TABLE,
|
searchIndex: SearchIndex.TABLE,
|
||||||
includeDeleted: false,
|
includeDeleted: false,
|
||||||
});
|
});
|
||||||
@ -741,7 +735,6 @@ const DatabaseSchemaPage: FunctionComponent = () => {
|
|||||||
onCancel={onCancel}
|
onCancel={onCancel}
|
||||||
onDescriptionEdit={onDescriptionEdit}
|
onDescriptionEdit={onDescriptionEdit}
|
||||||
onDescriptionUpdate={onDescriptionUpdate}
|
onDescriptionUpdate={onDescriptionUpdate}
|
||||||
onEntityFieldSelect={onEntityFieldSelect}
|
|
||||||
onThreadLinkSelect={onThreadLinkSelect}
|
onThreadLinkSelect={onThreadLinkSelect}
|
||||||
/>
|
/>
|
||||||
</Col>
|
</Col>
|
||||||
@ -802,23 +795,6 @@ const DatabaseSchemaPage: FunctionComponent = () => {
|
|||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={24}>
|
|
||||||
{selectedField ? (
|
|
||||||
<RequestDescriptionModal
|
|
||||||
createThread={createThread}
|
|
||||||
defaultValue={getDefaultValue(
|
|
||||||
databaseSchema?.owner as EntityReference
|
|
||||||
)}
|
|
||||||
header="Request description"
|
|
||||||
threadLink={getEntityFeedLink(
|
|
||||||
EntityType.DATABASE_SCHEMA,
|
|
||||||
databaseSchemaFQN,
|
|
||||||
selectedField
|
|
||||||
)}
|
|
||||||
onCancel={closeRequestModal}
|
|
||||||
/>
|
|
||||||
) : null}
|
|
||||||
</Col>
|
|
||||||
</Row>
|
</Row>
|
||||||
</PageContainerV1>
|
</PageContainerV1>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@ -0,0 +1,325 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2022 Collate
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { act, fireEvent, render, screen } from '@testing-library/react';
|
||||||
|
import React from 'react';
|
||||||
|
import { MemoryRouter, useParams } from 'react-router-dom';
|
||||||
|
import { getDatabaseSchemaDetailsByFQN } from '../../axiosAPIs/databaseAPI';
|
||||||
|
import { usePermissionProvider } from '../../components/PermissionProvider/PermissionProvider';
|
||||||
|
import DatabaseSchemaPageComponent from './DatabaseSchemaPage.component';
|
||||||
|
import {
|
||||||
|
mockEntityPermissions,
|
||||||
|
mockGetAllFeedsData,
|
||||||
|
mockGetDatabaseSchemaDetailsByFQNData,
|
||||||
|
mockGetFeedCountData,
|
||||||
|
mockPatchDatabaseSchemaDetailsData,
|
||||||
|
mockPostFeedByIdData,
|
||||||
|
mockPostThreadData,
|
||||||
|
mockSearchQueryData,
|
||||||
|
} from './mocks/DatabaseSchemaPage.mock';
|
||||||
|
|
||||||
|
jest.mock('../../utils/ToastUtils', () => ({
|
||||||
|
showErrorToast: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(({ children }) => <div>{children}</div>),
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock('../../components/Loader/Loader', () =>
|
||||||
|
jest.fn().mockImplementation(() => <div data-testid="Loader">Loader</div>)
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock('../../components/containers/PageContainerV1', () =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(({ children }) => (
|
||||||
|
<div data-testid="PageContainer">{children}</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock(
|
||||||
|
'../../components/common/title-breadcrumb/title-breadcrumb.component',
|
||||||
|
() =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => (
|
||||||
|
<div data-testid="TitleBreadcrumb">titleBreadcrumb</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock('../../components/common/TabsPane/TabsPane', () =>
|
||||||
|
jest.fn().mockImplementation(() => <div data-testid="TabsPane">TabsPane</div>)
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock(
|
||||||
|
'../../components/common/rich-text-editor/RichTextEditorPreviewer',
|
||||||
|
() =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => (
|
||||||
|
<div data-testid="RichTextEditorPreviewer">RichTextEditorPreviewer</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock('../../components/common/next-previous/NextPrevious', () =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => (
|
||||||
|
<div data-testid="NextPrevious">NextPrevious</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock(
|
||||||
|
'../../components/common/error-with-placeholder/ErrorPlaceHolder',
|
||||||
|
() =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(({ children }) => (
|
||||||
|
<div data-testid="ErrorPlaceHolder">{children}</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
jest.mock(
|
||||||
|
'../../components/common/EntitySummaryDetails/EntitySummaryDetails',
|
||||||
|
() =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => (
|
||||||
|
<div data-testid="EntitySummaryDetails">EntitySummaryDetails</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock(
|
||||||
|
'../../components/common/entityPageInfo/ManageButton/ManageButton',
|
||||||
|
() =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => (
|
||||||
|
<div data-testid="ManageButton">ManageButton</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock('../../components/common/description/Description', () =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(
|
||||||
|
({ onThreadLinkSelect, onDescriptionEdit, onDescriptionUpdate }) => (
|
||||||
|
<div
|
||||||
|
data-testid="Description"
|
||||||
|
onClick={() => {
|
||||||
|
onThreadLinkSelect('threadLink');
|
||||||
|
onDescriptionEdit();
|
||||||
|
onDescriptionUpdate('Updated Description');
|
||||||
|
}}>
|
||||||
|
Description
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock(
|
||||||
|
'../../components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel',
|
||||||
|
() =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => (
|
||||||
|
<div data-testid="ActivityThreadPanel">ActivityThreadPanel</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock(
|
||||||
|
'../../components/ActivityFeed/ActivityFeedList/ActivityFeedList',
|
||||||
|
() =>
|
||||||
|
jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => (
|
||||||
|
<div data-testid="ActivityFeedList">ActivityFeedList</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
jest.mock('../../components/PermissionProvider/PermissionProvider', () => ({
|
||||||
|
usePermissionProvider: jest.fn().mockImplementation(() => ({
|
||||||
|
getEntityPermissionByFqn: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => Promise.resolve(mockEntityPermissions)),
|
||||||
|
})),
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock('../../axiosAPIs/searchAPI', () => ({
|
||||||
|
searchQuery: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => Promise.resolve(mockSearchQueryData)),
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock('../../axiosAPIs/feedsAPI', () => ({
|
||||||
|
getAllFeeds: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => Promise.resolve(mockGetAllFeedsData)),
|
||||||
|
getFeedCount: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => Promise.resolve(mockGetFeedCountData)),
|
||||||
|
postFeedById: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => Promise.resolve(mockPostFeedByIdData)),
|
||||||
|
postThread: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() => Promise.resolve(mockPostThreadData)),
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock('../../axiosAPIs/databaseAPI', () => ({
|
||||||
|
getDatabaseSchemaDetailsByFQN: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() =>
|
||||||
|
Promise.resolve(mockGetDatabaseSchemaDetailsByFQNData)
|
||||||
|
),
|
||||||
|
patchDatabaseSchemaDetails: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(() =>
|
||||||
|
Promise.resolve(mockPatchDatabaseSchemaDetailsData)
|
||||||
|
),
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock('../../AppState', () => ({
|
||||||
|
inPageSearchText: '',
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock('react-router-dom', () => ({
|
||||||
|
Link: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(({ children }) => (
|
||||||
|
<div data-testid="link">{children}</div>
|
||||||
|
)),
|
||||||
|
useHistory: jest.fn().mockImplementation(() => ({
|
||||||
|
history: {
|
||||||
|
push: jest.fn(),
|
||||||
|
},
|
||||||
|
})),
|
||||||
|
useParams: jest.fn().mockImplementation(() => ({
|
||||||
|
databaseSchemaFQN: 'sample_data.ecommerce_db.shopify',
|
||||||
|
tab: 'tables',
|
||||||
|
})),
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('Tests for DatabaseSchemaPage', () => {
|
||||||
|
it('Page should render properly for "Tables" tab', async () => {
|
||||||
|
act(() => {
|
||||||
|
render(<DatabaseSchemaPageComponent />, {
|
||||||
|
wrapper: MemoryRouter,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const pageContainer = await screen.findByTestId('PageContainer');
|
||||||
|
const titleBreadcrumb = await screen.findByTestId('TitleBreadcrumb');
|
||||||
|
const tabsPane = await screen.findByTestId('TabsPane');
|
||||||
|
const richTextEditorPreviewer = await screen.findAllByTestId(
|
||||||
|
'RichTextEditorPreviewer'
|
||||||
|
);
|
||||||
|
const entitySummaryDetails = await screen.findByTestId(
|
||||||
|
'EntitySummaryDetails'
|
||||||
|
);
|
||||||
|
const manageButton = await screen.findByTestId('ManageButton');
|
||||||
|
const description = await screen.findByTestId('Description');
|
||||||
|
const nextPrevious = await screen.findByTestId('NextPrevious');
|
||||||
|
const databaseSchemaTable = await screen.findByTestId(
|
||||||
|
'databaseSchema-tables'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(pageContainer).toBeInTheDocument();
|
||||||
|
expect(titleBreadcrumb).toBeInTheDocument();
|
||||||
|
expect(tabsPane).toBeInTheDocument();
|
||||||
|
expect(richTextEditorPreviewer).toHaveLength(10);
|
||||||
|
expect(entitySummaryDetails).toBeInTheDocument();
|
||||||
|
expect(manageButton).toBeInTheDocument();
|
||||||
|
expect(description).toBeInTheDocument();
|
||||||
|
expect(nextPrevious).toBeInTheDocument();
|
||||||
|
expect(databaseSchemaTable).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Activity Feed List should render properly for "Activity Feeds" tab', async () => {
|
||||||
|
(useParams as jest.Mock).mockImplementationOnce(() => ({
|
||||||
|
databaseSchemaFQN: 'sample_data.ecommerce_db.shopify',
|
||||||
|
tab: 'activity_feed',
|
||||||
|
}));
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
render(<DatabaseSchemaPageComponent />, {
|
||||||
|
wrapper: MemoryRouter,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const activityFeedList = await screen.findByTestId('ActivityFeedList');
|
||||||
|
|
||||||
|
expect(activityFeedList).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('AcivityThreadPanel should render properly after clicked on thread panel button', async () => {
|
||||||
|
await act(async () => {
|
||||||
|
render(<DatabaseSchemaPageComponent />, {
|
||||||
|
wrapper: MemoryRouter,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const description = await screen.findByTestId('Description');
|
||||||
|
|
||||||
|
expect(description).toBeInTheDocument();
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
fireEvent.click(description);
|
||||||
|
});
|
||||||
|
|
||||||
|
const activityThreadPanel = await screen.findByTestId(
|
||||||
|
'ActivityThreadPanel'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(activityThreadPanel).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('ErrorPlaceholder should be displayed in case error occurs while fetching database schema details', async () => {
|
||||||
|
(getDatabaseSchemaDetailsByFQN as jest.Mock).mockImplementationOnce(() =>
|
||||||
|
Promise.reject('An error occurred')
|
||||||
|
);
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
render(<DatabaseSchemaPageComponent />, {
|
||||||
|
wrapper: MemoryRouter,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const errorPlaceHolder = await screen.findByTestId('ErrorPlaceHolder');
|
||||||
|
const errorMessage = await screen.findByTestId('error-message');
|
||||||
|
|
||||||
|
expect(errorPlaceHolder).toBeInTheDocument();
|
||||||
|
expect(errorMessage).toHaveTextContent('An error occurred');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('ErrorPlaceholder should be shown in case of not viewing permissions', async () => {
|
||||||
|
(usePermissionProvider as jest.Mock).mockImplementationOnce(() => ({
|
||||||
|
getEntityPermissionByFqn: jest.fn().mockImplementation(() =>
|
||||||
|
Promise.resolve({
|
||||||
|
...mockEntityPermissions,
|
||||||
|
ViewAll: false,
|
||||||
|
ViewBasic: false,
|
||||||
|
})
|
||||||
|
),
|
||||||
|
}));
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
render(<DatabaseSchemaPageComponent />, {
|
||||||
|
wrapper: MemoryRouter,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const errorPlaceHolder = await screen.findByTestId('ErrorPlaceHolder');
|
||||||
|
|
||||||
|
expect(errorPlaceHolder).toBeInTheDocument();
|
||||||
|
expect(errorPlaceHolder).toHaveTextContent('message.no-permission-to-view');
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,256 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2022 Collate
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const mockSearchQueryData = {
|
||||||
|
hits: {
|
||||||
|
total: {
|
||||||
|
value: 18,
|
||||||
|
relation: 'eq',
|
||||||
|
},
|
||||||
|
hits: [
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: '0e8ec01e-a57f-4173-8d30-deda453174d0',
|
||||||
|
name: 'dim.api/client',
|
||||||
|
fullyQualifiedName:
|
||||||
|
'sample_data.ecommerce_db.shopify."dim.api/client"',
|
||||||
|
description: 'Description',
|
||||||
|
displayName: 'dim.api/client',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: '2bcadace-b42b-4f86-b865-72fd1bc0338f',
|
||||||
|
name: 'dim.product',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify."dim.product"',
|
||||||
|
description: 'Description',
|
||||||
|
displayName: 'dim.product',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: '3a39a1ef-0ef4-44ca-ad01-abe389b69a7c',
|
||||||
|
name: 'dim.shop',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify."dim.shop"',
|
||||||
|
description:
|
||||||
|
'This dimension table contains online shop information. This table contains one shop per row.',
|
||||||
|
displayName: 'dim.shop',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: '06d629d7-6d38-4e57-83d2-c9c4235a7f66',
|
||||||
|
name: 'dim_address',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify.dim_address',
|
||||||
|
description: 'Description',
|
||||||
|
displayName: 'dim_address',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: 'a3bbcfef-9704-4cc5-b4ab-f5356afb9c79',
|
||||||
|
name: 'dim_address_clean',
|
||||||
|
fullyQualifiedName:
|
||||||
|
'sample_data.ecommerce_db.shopify.dim_address_clean',
|
||||||
|
description: 'Created from dim_address after a small cleanup.',
|
||||||
|
displayName: 'dim_address_clean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: 'a6d06d44-32f0-491a-99e9-5c319dd8ff23',
|
||||||
|
name: 'dim_customer',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify.dim_customer',
|
||||||
|
description: 'Description',
|
||||||
|
displayName: 'dim_customer',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: '86076923-2365-454c-897f-36be6ca02ef2',
|
||||||
|
name: 'dim_location',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify.dim_location',
|
||||||
|
description: 'Description',
|
||||||
|
displayName: 'dim_location',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: 'eba81b7a-d086-4daf-ab88-041d4703a2e7',
|
||||||
|
name: 'dim_staff',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify.dim_staff',
|
||||||
|
description: 'Description',
|
||||||
|
displayName: 'dim_staff',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: 'bc4c7a5f-2964-4582-adb1-2b523d6035b8',
|
||||||
|
name: 'fact_line_item',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify.fact_line_item',
|
||||||
|
description: 'Description',
|
||||||
|
displayName: 'fact_line_item',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_source: {
|
||||||
|
id: '833438ab-a267-4331-9f9e-be1d9399bda6',
|
||||||
|
name: 'fact_order',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify.fact_order',
|
||||||
|
description: 'Description',
|
||||||
|
displayName: 'fact_order',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
aggregations: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const mockGetFeedCountData = {
|
||||||
|
totalCount: 0,
|
||||||
|
counts: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
export const mockGetDatabaseSchemaDetailsByFQNData = {
|
||||||
|
id: '06f0c9ef-708a-47e1-a36e-0a2b864c9e5d',
|
||||||
|
name: 'shopify',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify',
|
||||||
|
description:
|
||||||
|
'This **mock** database contains schema related to shopify sales and orders with related dimension tables.',
|
||||||
|
href: 'http://localhost:8585/api/v1/databaseSchemas/06f0c9ef-708a-47e1-a36e-0a2b864c9e5d',
|
||||||
|
service: {
|
||||||
|
id: '0e736c54-0c2b-41bc-a877-6df3cdb5a2dd',
|
||||||
|
type: 'databaseService',
|
||||||
|
name: 'sample_data',
|
||||||
|
fullyQualifiedName: 'sample_data',
|
||||||
|
deleted: false,
|
||||||
|
href: 'http://localhost:8585/api/v1/services/databaseServices/0e736c54-0c2b-41bc-a877-6df3cdb5a2dd',
|
||||||
|
},
|
||||||
|
serviceType: 'BigQuery',
|
||||||
|
database: {
|
||||||
|
id: '2e45b3a0-6cfa-470a-862e-4b89f28965c3',
|
||||||
|
type: 'database',
|
||||||
|
name: 'ecommerce_db',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db',
|
||||||
|
description:
|
||||||
|
'This **mock** database contains schemas related to shopify sales and orders with related dimension tables.',
|
||||||
|
deleted: false,
|
||||||
|
href: 'http://localhost:8585/api/v1/databases/2e45b3a0-6cfa-470a-862e-4b89f28965c3',
|
||||||
|
},
|
||||||
|
deleted: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const mockGetAllFeedsData = {
|
||||||
|
data: [],
|
||||||
|
paging: {
|
||||||
|
total: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const mockPostThreadData = {
|
||||||
|
id: 'f5d62891-3381-4adc-91dc-0a886b9cd751',
|
||||||
|
type: 'Conversation',
|
||||||
|
href: 'http://localhost:8585/api/v1/feed/f5d62891-3381-4adc-91dc-0a886b9cd751',
|
||||||
|
threadTs: 1670412439695,
|
||||||
|
about: '<#E::databaseSchema::sample_data.ecommerce_db.shopify::description>',
|
||||||
|
entityId: '06f0c9ef-708a-47e1-a36e-0a2b864c9e5d',
|
||||||
|
createdBy: 'admin',
|
||||||
|
updatedAt: 1670412439696,
|
||||||
|
updatedBy: 'admin',
|
||||||
|
resolved: false,
|
||||||
|
message: 'Testing Conversation',
|
||||||
|
postsCount: 0,
|
||||||
|
posts: [],
|
||||||
|
reactions: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
export const mockPostFeedByIdData = {
|
||||||
|
id: 'f5d62891-3381-4adc-91dc-0a886b9cd751',
|
||||||
|
type: 'Conversation',
|
||||||
|
href: 'http://localhost:8585/api/v1/feed/f5d62891-3381-4adc-91dc-0a886b9cd751',
|
||||||
|
threadTs: 1670412439695,
|
||||||
|
about: '<#E::databaseSchema::sample_data.ecommerce_db.shopify::description>',
|
||||||
|
entityId: '06f0c9ef-708a-47e1-a36e-0a2b864c9e5d',
|
||||||
|
createdBy: 'admin',
|
||||||
|
updatedAt: 1670414002766,
|
||||||
|
updatedBy: 'admin',
|
||||||
|
resolved: false,
|
||||||
|
message: 'Testing Conversation',
|
||||||
|
postsCount: 2,
|
||||||
|
posts: [
|
||||||
|
{
|
||||||
|
id: '943f793a-35be-4942-adfe-6b5457f95978',
|
||||||
|
message: 'Testing',
|
||||||
|
postTs: 1670414002762,
|
||||||
|
from: 'admin',
|
||||||
|
reactions: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
reactions: [],
|
||||||
|
};
|
||||||
|
export const mockPatchDatabaseSchemaDetailsData = {
|
||||||
|
id: '06f0c9ef-708a-47e1-a36e-0a2b864c9e5d',
|
||||||
|
name: 'shopify',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db.shopify',
|
||||||
|
description:
|
||||||
|
'This **mock** database contains schema related to shopify sales and orders with related dimension tables. updated',
|
||||||
|
version: 0.3,
|
||||||
|
updatedAt: 1670414195234,
|
||||||
|
updatedBy: 'admin',
|
||||||
|
href: 'http://localhost:8585/api/v1/databaseSchemas/06f0c9ef-708a-47e1-a36e-0a2b864c9e5d',
|
||||||
|
service: {
|
||||||
|
id: '0e736c54-0c2b-41bc-a877-6df3cdb5a2dd',
|
||||||
|
type: 'databaseService',
|
||||||
|
name: 'sample_data',
|
||||||
|
fullyQualifiedName: 'sample_data',
|
||||||
|
deleted: false,
|
||||||
|
href: 'http://localhost:8585/api/v1/services/databaseServices/0e736c54-0c2b-41bc-a877-6df3cdb5a2dd',
|
||||||
|
},
|
||||||
|
serviceType: 'BigQuery',
|
||||||
|
database: {
|
||||||
|
id: '2e45b3a0-6cfa-470a-862e-4b89f28965c3',
|
||||||
|
type: 'database',
|
||||||
|
name: 'ecommerce_db',
|
||||||
|
fullyQualifiedName: 'sample_data.ecommerce_db',
|
||||||
|
description:
|
||||||
|
'This **mock** database contains schemas related to shopify sales and orders with related dimension tables.',
|
||||||
|
deleted: false,
|
||||||
|
href: 'http://localhost:8585/api/v1/databases/2e45b3a0-6cfa-470a-862e-4b89f28965c3',
|
||||||
|
},
|
||||||
|
changeDescription: {
|
||||||
|
fieldsAdded: [],
|
||||||
|
fieldsUpdated: [
|
||||||
|
{
|
||||||
|
name: 'description',
|
||||||
|
oldValue:
|
||||||
|
'This **mock** database contains schema related to shopify sales and orders with related dimension tables. ',
|
||||||
|
newValue:
|
||||||
|
'This **mock** database contains schema related to shopify sales and orders with related dimension tables. updated',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
fieldsDeleted: [],
|
||||||
|
previousVersion: 0.2,
|
||||||
|
},
|
||||||
|
deleted: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const mockEntityPermissions = {
|
||||||
|
Create: true,
|
||||||
|
Delete: true,
|
||||||
|
ViewAll: true,
|
||||||
|
ViewBasic: true,
|
||||||
|
EditAll: true,
|
||||||
|
EditDescription: true,
|
||||||
|
EditDisplayName: true,
|
||||||
|
EditCustomFields: true,
|
||||||
|
};
|
||||||
@ -1,5 +1,7 @@
|
|||||||
import { TabSpecificField } from '../enums/entity.enum';
|
import { TabSpecificField } from '../enums/entity.enum';
|
||||||
import { SearchIndex } from '../enums/search.enum';
|
import { SearchIndex } from '../enums/search.enum';
|
||||||
|
import { DatabaseSchema } from '../generated/entity/data/databaseSchema';
|
||||||
|
import { EntityReference } from '../generated/type/entityReference';
|
||||||
import {
|
import {
|
||||||
SearchResponse,
|
SearchResponse,
|
||||||
TableSearchSource,
|
TableSearchSource,
|
||||||
@ -38,3 +40,10 @@ export const getCurrentDatabaseSchemaDetailsTab = (tab: string) => {
|
|||||||
export const getTablesFromSearchResponse = (
|
export const getTablesFromSearchResponse = (
|
||||||
res: SearchResponse<SearchIndex.TABLE, keyof TableSearchSource>
|
res: SearchResponse<SearchIndex.TABLE, keyof TableSearchSource>
|
||||||
) => res.hits.hits.map((hit) => hit._source);
|
) => res.hits.hits.map((hit) => hit._source);
|
||||||
|
|
||||||
|
export const getQueryStringForSchemaTables = (
|
||||||
|
serviceName: EntityReference,
|
||||||
|
databaseName: EntityReference,
|
||||||
|
schemaName: DatabaseSchema
|
||||||
|
) =>
|
||||||
|
`(service.name:${serviceName.name}) AND (database.name:${databaseName.name}) AND (databaseSchema.name:${schemaName.name})`;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user