Skip to content

Commit a9daffb

Browse files
Merge branch 'main' into fix-glossary-import-export-permissions-27487
2 parents f18d0bf + 8194dd7 commit a9daffb

28 files changed

Lines changed: 110 additions & 26 deletions

openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/DataQuality/Profiler.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,10 @@ const validateProfilerAccessForRole = async (
7474

7575
expect(profilerResponse.status()).toBe(200);
7676

77+
// TODO: Reduce timeout once the latency issue is fixed
7778
const listColumnApiCall = page.waitForResponse(
78-
'/api/v1/tables/name/*/columns?*'
79+
'/api/v1/tables/name/*/columns?*',
80+
{ timeout: 150_000 }
7981
);
8082
await page
8183
.getByRole('tab', {

openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/Table.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ test.describe('Large Table Column Search & Copy Link', () => {
725725
) &&
726726
response.url().includes('profile') &&
727727
response.request().method() === 'GET',
728-
{ timeout: 90_000 }
728+
{ timeout: 150_000 } // TODO: Reduce timeout once the latency issue is fixed
729729
),
730730
page.goto(clipboardText),
731731
]);

openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Entity.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2046,7 +2046,8 @@ Object.entries(entities).forEach(([key, EntityClass]) => {
20462046
// Since the test iterates through all 17 types of custom property and
20472047
// performs multiple actions for each, we need to increase the timeout
20482048
// to avoid premature test failure
2049-
test.setTimeout(600000);
2049+
// TODO: Reduce timeout once the latency issue is fixed
2050+
test.setTimeout(960000);
20502051
const { apiContext, afterAction } = await getApiContext(page);
20512052

20522053
await prepareCustomProperty(apiContext);

openmetadata-ui/src/main/resources/ui/playwright/e2e/VersionPages/EntityVersionPages.spec.ts

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -39,25 +39,26 @@ import {
3939
} from '../../utils/common';
4040
import { getEntityDataTypeDisplayPatch } from '../../utils/entity';
4141

42-
const entities = [
43-
new ApiEndpointClass(),
44-
new TableClass(),
45-
new StoredProcedureClass(),
46-
new DashboardClass(),
47-
new PipelineClass(),
48-
new TopicClass(),
49-
new MlModelClass(),
50-
new ContainerClass(),
51-
new SearchIndexClass(),
52-
new DashboardDataModelClass(),
53-
new DirectoryClass(),
54-
new FileClass(),
55-
new SpreadsheetClass(),
56-
new WorksheetClass(),
42+
let adminUser: UserClass;
43+
44+
const entityClasses = [
45+
ApiEndpointClass,
46+
TableClass,
47+
StoredProcedureClass,
48+
DashboardClass,
49+
PipelineClass,
50+
TopicClass,
51+
MlModelClass,
52+
ContainerClass,
53+
SearchIndexClass,
54+
DashboardDataModelClass,
55+
DirectoryClass,
56+
FileClass,
57+
SpreadsheetClass,
58+
WorksheetClass,
5759
];
5860

59-
// use the admin user to login
60-
const adminUser = new UserClass();
61+
let entities: InstanceType<(typeof entityClasses)[number]>[];
6162

6263
const test = base.extend<{ page: Page }>({
6364
page: async ({ browser }, use) => {
@@ -72,6 +73,9 @@ test.describe('Entity Version pages', () => {
7273
test.beforeAll('Setup pre-requests', async ({ browser }) => {
7374
test.slow();
7475

76+
adminUser = new UserClass();
77+
entities = entityClasses.map((EntityClass) => new EntityClass());
78+
7579
const { apiContext, afterAction } = await performAdminLogin(browser);
7680
await adminUser.create(apiContext);
7781
await adminUser.setAdminRole(apiContext);
@@ -148,10 +152,14 @@ test.describe('Entity Version pages', () => {
148152
await afterAction();
149153
});
150154

151-
entities.forEach((entity) => {
152-
test(`${entity.getType()}`, async ({ page }) => {
155+
entityClasses.forEach((EntityClass) => {
156+
test(`${new EntityClass().getType()}`, async ({ page }) => {
153157
test.slow();
154158

159+
const entity = entities.find(
160+
(e) => e instanceof EntityClass
161+
) as InstanceType<typeof EntityClass>;
162+
155163
const { apiContext } = await getApiContext(page);
156164
await entity.visitEntityPage(page);
157165

@@ -162,8 +170,7 @@ test.describe('Entity Version pages', () => {
162170
).toFixed(1)}`;
163171
const versionDetailResponse = page.waitForResponse(
164172
(response) =>
165-
response.url().includes(`/versions/${setupPatchVersion}`) &&
166-
response.status() === 200
173+
response.url().includes('/versions') && response.status() === 200
167174
);
168175
await page.locator('[data-testid="version-button"]').click();
169176
await versionDetailResponse;

openmetadata-ui/src/main/resources/ui/playwright/e2e/nightly/ServiceIngestion.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ test.describe.serial(
478478
async (route) => {
479479
// Mock the pipelineStatus endpoint to simulate high latency
480480
// eslint-disable-next-line playwright/no-wait-for-timeout
481-
await page.waitForTimeout(8000);
481+
await page.waitForTimeout(5000);
482482
await route.continue();
483483
}
484484
);

openmetadata-ui/src/main/resources/ui/playwright/utils/customProperty.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,8 @@ export const verifyTableColumnCustomPropertyPersistence = async ({
11231123
) &&
11241124
response.url().includes('profile') &&
11251125
response.request().method() === 'GET',
1126-
{ timeout: 90_000 }
1126+
// TODO: Reduce timeout once the latency issue is fixed
1127+
{ timeout: 150_000 }
11271128
);
11281129

11291130
// 1. Navigate and Open Column Detail Panel

openmetadata-ui/src/main/resources/ui/src/components/DataAssets/DataAssetsHeader/DataAssetsHeader.component.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ export const DataAssetsHeader = ({
159159
const [isAutoPilotTriggering, setIsAutoPilotTriggering] = useState(false);
160160
const { entityRules } = useEntityRules(entityType);
161161
const [dataContract, setDataContract] = useState<DataContract>();
162+
const [isRequestDataAccessOpen, setIsRequestDataAccessOpen] = useState(false);
162163

163164
const fetchDataContract = async (entityId: string) => {
164165
try {
@@ -586,6 +587,25 @@ export const DataAssetsHeader = ({
586587
permissions.Trigger,
587588
]);
588589

590+
const requestDataAccessButton = useMemo(() => {
591+
if (
592+
!tableClassBase.getShowRequestDataAccess() ||
593+
SERVICE_TYPES.includes(entityType) ||
594+
deleted
595+
) {
596+
return null;
597+
}
598+
599+
return (
600+
<Button
601+
className="source-url-button font-semibold"
602+
data-testid="request-data-access-button"
603+
onClick={() => setIsRequestDataAccessOpen(true)}>
604+
{t('label.request-data-access')}
605+
</Button>
606+
);
607+
}, [entityType, deleted]);
608+
589609
useEffect(() => {
590610
if (dataAsset.id) {
591611
fetchDataContract(dataAsset.id);
@@ -687,6 +707,7 @@ export const DataAssetsHeader = ({
687707
</Typography.Link>
688708
</Tooltip>
689709
)}
710+
{requestDataAccessButton}
690711
<ManageButton
691712
isAsyncDelete
692713
afterDeleteAction={afterDeleteAction}
@@ -895,6 +916,14 @@ export const DataAssetsHeader = ({
895916
onClose={handleCloseAnnouncementDrawer}
896917
/>
897918
)}
919+
920+
{tableClassBase.getRequestDataAccessDrawer(
921+
isRequestDataAccessOpen,
922+
() => setIsRequestDataAccessOpen(false),
923+
dataAsset.fullyQualifiedName ?? '',
924+
getEntityName(dataAsset),
925+
entityType
926+
)}
898927
</>
899928
);
900929
};

openmetadata-ui/src/main/resources/ui/src/components/DataAssets/DataAssetsHeader/DataAssetsHeader.test.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ jest.mock('../../../utils/TableClassBase', () => ({
185185
getAlertEnableStatus: jest
186186
.fn()
187187
.mockImplementation(() => mockIsAlertSupported),
188+
getShowRequestDataAccess: jest.fn().mockImplementation(() => false),
189+
getRequestDataAccessDrawer: jest.fn().mockImplementation(() => null),
188190
}));
189191

190192
jest.mock('../../../rest/lineageAPI', () => ({
@@ -606,6 +608,14 @@ describe('DataAssetsHeader component', () => {
606608
expect(button).toBeEnabled();
607609
});
608610

611+
it('should not render the request data access button on OSS', () => {
612+
render(<DataAssetsHeader {...mockProps} />);
613+
614+
expect(
615+
screen.queryByTestId('request-data-access-button')
616+
).not.toBeInTheDocument();
617+
});
618+
609619
describe('dataContractLatestResultButton', () => {
610620
const mockGetDataContractStatusIcon =
611621
getDataContractStatusIcon as jest.Mock;

openmetadata-ui/src/main/resources/ui/src/locale/languages/ar-sa.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,7 @@
17211721
"reposition": "إعادة تموضع",
17221722
"repository-url": "Repository URL",
17231723
"request": "طلب",
1724+
"request-data-access": "طلب الوصول إلى البيانات",
17241725
"request-method": "طريقة الطلب",
17251726
"request-schema-field": "حقل مخطط الطلب",
17261727
"request-tag-plural": "طلب وسوم",

openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,7 @@
17211721
"reposition": "Neu positionieren",
17221722
"repository-url": "Repository-URL",
17231723
"request": "Anfrage",
1724+
"request-data-access": "Datenzugriff anfordern",
17241725
"request-method": "Anfrage Methode",
17251726
"request-schema-field": "Anfrage Feld Schema",
17261727
"request-tag-plural": "Tag-Anfragen",

0 commit comments

Comments
 (0)