Skip to content

Commit

Permalink
playwright: added initial db setup for playwright test (#18832)
Browse files Browse the repository at this point in the history
* playwright: fixed service ingestion aut

* updated the initial start of the playwright test
  • Loading branch information
ShaileshParmar11 authored Nov 28, 2024
1 parent 9d37ff0 commit 4720a8d
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
Expand Down
25 changes: 20 additions & 5 deletions openmetadata-ui/src/main/resources/ui/playwright/e2e/auth.setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ export type PolicyRulesType = {
resources: string[];
operations: string[];
effect: string;
description?: string;
condition?: string;
};

export class PolicyClass {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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',
},
});
};

0 comments on commit 4720a8d

Please sign in to comment.