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:
Shailesh Parmar 2024-11-28 20:26:30 +05:30 committed by GitHub
parent 9d37ff0e34
commit 4720a8da2b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 112 additions and 7 deletions

View File

@ -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<
string,
{ testid: GlobalSettingOptions; isCustomProperty?: boolean }

View File

@ -10,24 +10,39 @@
* See the License for the specific language governing permissions and
* 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 { AdminClass } from '../support/user/AdminClass';
import { getApiContext } from '../utils/common';
import { updateJWTTokenExpiryTime } from '../utils/login';
import {
updateDefaultDataConsumerPolicy,
updateDefaultOrganizationPolicy,
} from '../utils/permission';
import { removeOrganizationPolicyAndRole } from '../utils/team';
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 }) => {
const admin = new AdminClass();
// login with admin user
await admin.login(page);
await page.waitForURL('**/my-data');
const { apiContext, afterAction } = await getApiContext(page);
await updateJWTTokenExpiryTime(apiContext, JWT_EXPIRY_TIME_MAP['4 hours']);
await removeOrganizationPolicyAndRole(apiContext);
await afterAction();
await initialSetup(page);
await admin.logout(page);
await page.waitForURL('**/signin');
await admin.login(page);

View File

@ -27,6 +27,8 @@ export type PolicyRulesType = {
resources: string[];
operations: string[];
effect: string;
description?: string;
condition?: string;
};
export class PolicyClass {

View File

@ -170,7 +170,7 @@ class ServiceBaseClass {
// Header available once page loads
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
.getByLabel('Ingestions')

View File

@ -10,7 +10,11 @@
* See the License for the specific language governing permissions and
* 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 (
page: Page,
@ -117,3 +121,45 @@ export const validateViewPermissions = async (
await page.waitForLoadState('domcontentloaded');
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',
},
});
};