mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-12-17 18:46:25 +00:00
playwright: added initial db setup for playwright test (#18832)
* playwright: fixed service ingestion aut * updated the initial start of the playwright test
This commit is contained in:
parent
9d37ff0e34
commit
4720a8da2b
@ -62,6 +62,48 @@ export const DATA_STEWARD_RULES: PolicyRulesType[] = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
export const DATA_CONSUMER_RULES: PolicyRulesType[] = [
|
||||||
|
{
|
||||||
|
name: 'DataConsumerPolicy-EditRule',
|
||||||
|
resources: ['All'],
|
||||||
|
operations: [
|
||||||
|
'EditDescription',
|
||||||
|
'EditGlossaryTerms',
|
||||||
|
'EditTags',
|
||||||
|
'EditTier',
|
||||||
|
'ViewAll',
|
||||||
|
],
|
||||||
|
effect: 'allow',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export const ORGANIZATION_POLICY_RULES: PolicyRulesType[] = [
|
||||||
|
{
|
||||||
|
name: 'OrganizationPolicy-NoOwner-Rule',
|
||||||
|
description:
|
||||||
|
'Allow any one to set the owner of an entity that has no owner set.',
|
||||||
|
effect: 'allow',
|
||||||
|
operations: ['EditOwners'],
|
||||||
|
resources: ['All'],
|
||||||
|
condition: 'noOwner()',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'OrganizationPolicy-Owner-Rule',
|
||||||
|
description: 'Allow all the operations on an entity for the owner.',
|
||||||
|
effect: 'allow',
|
||||||
|
operations: ['All'],
|
||||||
|
resources: ['All'],
|
||||||
|
condition: 'isOwner()',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'OrganizationPolicy-ViewAll-Rule',
|
||||||
|
description: 'Allow all users to discover data assets.',
|
||||||
|
effect: 'allow',
|
||||||
|
operations: ['ViewAll'],
|
||||||
|
resources: ['All'],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
export const GLOBAL_SETTING_PERMISSIONS: Record<
|
export const GLOBAL_SETTING_PERMISSIONS: Record<
|
||||||
string,
|
string,
|
||||||
{ testid: GlobalSettingOptions; isCustomProperty?: boolean }
|
{ testid: GlobalSettingOptions; isCustomProperty?: boolean }
|
||||||
|
|||||||
@ -10,24 +10,39 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import { test as setup } from '@playwright/test';
|
import { Page, test as setup } from '@playwright/test';
|
||||||
import { JWT_EXPIRY_TIME_MAP } from '../constant/login';
|
import { JWT_EXPIRY_TIME_MAP } from '../constant/login';
|
||||||
import { AdminClass } from '../support/user/AdminClass';
|
import { AdminClass } from '../support/user/AdminClass';
|
||||||
import { getApiContext } from '../utils/common';
|
import { getApiContext } from '../utils/common';
|
||||||
import { updateJWTTokenExpiryTime } from '../utils/login';
|
import { updateJWTTokenExpiryTime } from '../utils/login';
|
||||||
|
import {
|
||||||
|
updateDefaultDataConsumerPolicy,
|
||||||
|
updateDefaultOrganizationPolicy,
|
||||||
|
} from '../utils/permission';
|
||||||
import { removeOrganizationPolicyAndRole } from '../utils/team';
|
import { removeOrganizationPolicyAndRole } from '../utils/team';
|
||||||
const adminFile = 'playwright/.auth/admin.json';
|
const adminFile = 'playwright/.auth/admin.json';
|
||||||
|
|
||||||
|
const initialSetup = async (page: Page) => {
|
||||||
|
const { apiContext, afterAction } = await getApiContext(page);
|
||||||
|
// Update JWT expiry time to 4 hours
|
||||||
|
await updateJWTTokenExpiryTime(apiContext, JWT_EXPIRY_TIME_MAP['4 hours']);
|
||||||
|
// Remove organization policy and role
|
||||||
|
await removeOrganizationPolicyAndRole(apiContext);
|
||||||
|
// update default Organization policy
|
||||||
|
await updateDefaultOrganizationPolicy(apiContext);
|
||||||
|
// update default Data consumer policy
|
||||||
|
await updateDefaultDataConsumerPolicy(apiContext);
|
||||||
|
|
||||||
|
await afterAction();
|
||||||
|
};
|
||||||
|
|
||||||
setup('authenticate as admin', async ({ page }) => {
|
setup('authenticate as admin', async ({ page }) => {
|
||||||
const admin = new AdminClass();
|
const admin = new AdminClass();
|
||||||
|
|
||||||
// login with admin user
|
// login with admin user
|
||||||
await admin.login(page);
|
await admin.login(page);
|
||||||
await page.waitForURL('**/my-data');
|
await page.waitForURL('**/my-data');
|
||||||
const { apiContext, afterAction } = await getApiContext(page);
|
await initialSetup(page);
|
||||||
await updateJWTTokenExpiryTime(apiContext, JWT_EXPIRY_TIME_MAP['4 hours']);
|
|
||||||
await removeOrganizationPolicyAndRole(apiContext);
|
|
||||||
await afterAction();
|
|
||||||
await admin.logout(page);
|
await admin.logout(page);
|
||||||
await page.waitForURL('**/signin');
|
await page.waitForURL('**/signin');
|
||||||
await admin.login(page);
|
await admin.login(page);
|
||||||
|
|||||||
@ -27,6 +27,8 @@ export type PolicyRulesType = {
|
|||||||
resources: string[];
|
resources: string[];
|
||||||
operations: string[];
|
operations: string[];
|
||||||
effect: string;
|
effect: string;
|
||||||
|
description?: string;
|
||||||
|
condition?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export class PolicyClass {
|
export class PolicyClass {
|
||||||
|
|||||||
@ -170,7 +170,7 @@ class ServiceBaseClass {
|
|||||||
|
|
||||||
// Header available once page loads
|
// Header available once page loads
|
||||||
await page.waitForSelector('[data-testid="data-assets-header"]');
|
await page.waitForSelector('[data-testid="data-assets-header"]');
|
||||||
await page.getByTestId('loader').waitFor({ state: 'detached' });
|
await page.getByTestId('loader').first().waitFor({ state: 'detached' });
|
||||||
await page.getByTestId('ingestions').click();
|
await page.getByTestId('ingestions').click();
|
||||||
await page
|
await page
|
||||||
.getByLabel('Ingestions')
|
.getByLabel('Ingestions')
|
||||||
|
|||||||
@ -10,7 +10,11 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import { expect, Page } from '@playwright/test';
|
import { APIRequestContext, expect, Page } from '@playwright/test';
|
||||||
|
import {
|
||||||
|
DATA_CONSUMER_RULES,
|
||||||
|
ORGANIZATION_POLICY_RULES,
|
||||||
|
} from '../constant/permission';
|
||||||
|
|
||||||
export const checkNoPermissionPlaceholder = async (
|
export const checkNoPermissionPlaceholder = async (
|
||||||
page: Page,
|
page: Page,
|
||||||
@ -117,3 +121,45 @@ export const validateViewPermissions = async (
|
|||||||
await page.waitForLoadState('domcontentloaded');
|
await page.waitForLoadState('domcontentloaded');
|
||||||
await checkNoPermissionPlaceholder(page, /Custom Properties/);
|
await checkNoPermissionPlaceholder(page, /Custom Properties/);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const updateDefaultDataConsumerPolicy = async (
|
||||||
|
apiContext: APIRequestContext
|
||||||
|
) => {
|
||||||
|
const dataConsumerRoleResponse = await apiContext
|
||||||
|
.get('/api/v1/policies/name/DataConsumerPolicy')
|
||||||
|
.then((response) => response.json());
|
||||||
|
|
||||||
|
await apiContext.patch(`/api/v1/policies/${dataConsumerRoleResponse.id}`, {
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
op: 'replace',
|
||||||
|
path: '/rules',
|
||||||
|
value: DATA_CONSUMER_RULES,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json-patch+json',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const updateDefaultOrganizationPolicy = async (
|
||||||
|
apiContext: APIRequestContext
|
||||||
|
) => {
|
||||||
|
const orgPolicyResponse = await apiContext
|
||||||
|
.get('/api/v1/policies/name/OrganizationPolicy')
|
||||||
|
.then((response) => response.json());
|
||||||
|
|
||||||
|
await apiContext.patch(`/api/v1/policies/${orgPolicyResponse.id}`, {
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
op: 'replace',
|
||||||
|
path: '/rules',
|
||||||
|
value: ORGANIZATION_POLICY_RULES,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json-patch+json',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user