Fix: Additional permissions call happening in summary components (#20943)

* fix double permissions call happening in summary components

* fix failing unit test case

* removed unnecessary entity details fn call

* address unit test failure
This commit is contained in:
Shrushti Polekar 2025-04-25 14:35:51 +05:30 committed by GitHub
parent e181c50e50
commit 9ef9ae97a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 55 additions and 38 deletions

View File

@ -144,7 +144,6 @@ export const DataAssetSummaryPanel = ({
dataAsset.id
);
setEntityPermissions(permissions);
fetchEntityBasedDetails();
} else {
setEntityPermissions(null);
}
@ -220,7 +219,10 @@ export const DataAssetSummaryPanel = ({
</Row>
{entityType === EntityType.TABLE && (
<TableSummary entityDetails={dataAsset as Table} />
<TableSummary
entityDetails={dataAsset as Table}
permissions={entityPermissions}
/>
)}
<SummaryTagsDescription

View File

@ -25,11 +25,7 @@ import { useTranslation } from 'react-i18next';
import { useHistory } from 'react-router-dom';
import { ROUTES } from '../../../../constants/constants';
import { mockTablePermission } from '../../../../constants/mockTourData.constants';
import { usePermissionProvider } from '../../../../context/PermissionProvider/PermissionProvider';
import {
OperationPermission,
ResourceEntity,
} from '../../../../context/PermissionProvider/PermissionProvider.interface';
import { OperationPermission } from '../../../../context/PermissionProvider/PermissionProvider.interface';
import { EntityTabs, EntityType } from '../../../../enums/entity.enum';
import { TestSummary } from '../../../../generated/tests/testCase';
import useCustomLocation from '../../../../hooks/useCustomLocation/useCustomLocation';
@ -40,21 +36,25 @@ import { TableProfilerTab } from '../../../Database/Profiler/ProfilerDashboard/p
import './table-summary.less';
import { TableSummaryProps } from './TableSummary.interface';
function TableSummary({ entityDetails: tableDetails }: TableSummaryProps) {
function TableSummary({
entityDetails: tableDetails,
permissions,
}: Readonly<TableSummaryProps>) {
const { t } = useTranslation();
const location = useCustomLocation();
const history = useHistory();
const isTourPage = location.pathname.includes(ROUTES.TOUR);
const { getEntityPermission } = usePermissionProvider();
const [testSuiteSummary, setTestSuiteSummary] = useState<TestSummary>();
const [tablePermissions, setTablePermissions] = useState<OperationPermission>(
DEFAULT_ENTITY_PERMISSION
);
useEffect(() => {
setTablePermissions(permissions as OperationPermission);
}, [permissions]);
// Since we are showing test cases summary in the table summary panel, we are using ViewTests permission
const viewTestCasesPermission = useMemo(
() => tablePermissions.ViewAll || tablePermissions.ViewTests,
() => tablePermissions?.ViewAll || tablePermissions?.ViewTests,
[tablePermissions]
);
@ -154,33 +154,21 @@ function TableSummary({ entityDetails: tableDetails }: TableSummaryProps) {
const init = useCallback(async () => {
if (tableDetails.id && !isTourPage) {
const tablePermission = await getEntityPermission(
ResourceEntity.TABLE,
tableDetails.id
);
setTablePermissions(tablePermission);
const shouldFetchTestCaseData =
!isTableDeleted &&
tableDetails.service?.type === 'databaseService' &&
(tablePermission.ViewAll || tablePermission.ViewTests);
(permissions?.ViewAll || permissions?.ViewTests);
if (shouldFetchTestCaseData) {
fetchAllTests();
}
} else {
setTablePermissions(mockTablePermission as OperationPermission);
}
}, [
tableDetails,
isTourPage,
isTableDeleted,
fetchAllTests,
getEntityPermission,
]);
}, [tableDetails, isTourPage, isTableDeleted, fetchAllTests, permissions]);
useEffect(() => {
init();
}, [tableDetails.id]);
}, [tableDetails.id, permissions]);
return (
<Row className="p-md border-radius-card summary-panel-card" gutter={[0, 8]}>

View File

@ -11,10 +11,12 @@
* limitations under the License.
*/
import { OperationPermission } from '../../../../context/PermissionProvider/PermissionProvider.interface';
import { Table } from '../../../../generated/entity/data/table';
export interface TableSummaryProps {
entityDetails: Table;
permissions: OperationPermission | null;
}
export interface TableProfileDetails {

View File

@ -14,6 +14,7 @@
import { act, render, screen } from '@testing-library/react';
import React from 'react';
import { MemoryRouter } from 'react-router-dom';
import { OperationPermission } from '../../../../context/PermissionProvider/PermissionProvider.interface';
import { getTestCaseExecutionSummary } from '../../../../rest/testAPI';
import { mockTableEntityDetails } from '../mocks/TableSummary.mock';
import TableSummary from './TableSummary.component';
@ -69,9 +70,15 @@ jest.mock('../../../../context/PermissionProvider/PermissionProvider', () => ({
describe('TableSummary component tests', () => {
it('Component should render properly, when loaded in the Explore page.', async () => {
await act(async () => {
render(<TableSummary entityDetails={mockTableEntityDetails} />, {
wrapper: MemoryRouter,
});
render(
<TableSummary
entityDetails={mockTableEntityDetails}
permissions={mockEntityPermissions as OperationPermission}
/>,
{
wrapper: MemoryRouter,
}
);
});
const profilerHeader = screen.getByTestId('profiler-header');
@ -89,9 +96,15 @@ describe('TableSummary component tests', () => {
it('Component should render properly, when loaded in the Lineage page.', async () => {
await act(async () => {
render(<TableSummary entityDetails={mockTableEntityDetails} />, {
wrapper: MemoryRouter,
});
render(
<TableSummary
entityDetails={mockTableEntityDetails}
permissions={mockEntityPermissions as OperationPermission}
/>,
{
wrapper: MemoryRouter,
}
);
});
const profilerHeader = screen.getByTestId('profiler-header');
@ -117,9 +130,15 @@ describe('TableSummary component tests', () => {
);
await act(async () => {
render(<TableSummary entityDetails={mockTableEntityDetails} />, {
wrapper: MemoryRouter,
});
render(
<TableSummary
entityDetails={mockTableEntityDetails}
permissions={mockEntityPermissions as OperationPermission}
/>,
{
wrapper: MemoryRouter,
}
);
});
const testsPassedLabel = screen.getByTestId('test-passed');
@ -146,9 +165,15 @@ describe('TableSummary component tests', () => {
})
);
await act(async () => {
render(<TableSummary entityDetails={mockTableEntityDetails} />, {
wrapper: MemoryRouter,
});
render(
<TableSummary
entityDetails={mockTableEntityDetails}
permissions={mockEntityPermissions as OperationPermission}
/>,
{
wrapper: MemoryRouter,
}
);
});
const testsPassedValue = screen.getByTestId('test-passed-value');
const testsAbortedValue = screen.getByTestId('test-aborted-value');