Add api client for playwright e2e tests (#2901)
* chore: 🤖 add @openapitools/openapi-generator-cli * chore: 🤖 Add @nestjs/core and @openapitools/openapi-generator-cli to ignoredBuiltDependencies These packages use postinstall for a opencollective notice * chore: 🤖 add package.json scripts for open-api client gen * chore: 🤖 add openapi generated files * chore: 🤖 add boundary api client fixture * chore: 🤖 incorporate api client fixture with base fixture * chore: 🤖 migrate existing test to use boundary api fixture * refactor: 💡 remove org cleanup from test * refactor: 💡 update sorting e2e test to use api client * refactor: 💡 clean up api client resource clean up logging * docs: ✏️ update jsdoc links for domain clients * chore: 🤖 avoid adding copywright headers to generated api * Add missing copyright headers * chore: 🤖 remove fetch argument from api client class The hope was to use request.fetch but playwright's fetch is a non-standard fetch which causes the generated api client to fail when using .clone() on the response * chore: 🤖 add optional OPENAPI_SWAGGER_URL_OR_FILE for openapi-client generation The OPENAPI_SWAGGER_URL_OR_FILE env var can be used to specify the -i flag the generate:api-client script with either: * a relative path * an absolute path * a url like: https://raw.githubusercontent.com/hashicorp/boundary/refs/heads/main/internal/gen/controller.swagger.json * refactor: 💡 clean up and refactor boundary-api-client fixture * chore: 🤖 add extra doc links and delete methods * test: 💍 add test to ensure that api-client fixture works * test: 💍 update existing e2e test examples with api-client * docs: ✏️ add comment for api-client e2e test * docs: ✏️ add additional links to service docs for api clients * refactor: 💡 cleanup api-client and corresponding test * docs: ✏️ add api client fixture docs to e2e README * fix: 🐛 fix regex * remove unnecessary capture group * add "-" to regex to allow for url segments like "storage-buckets" in "/v1/storage-buckets" * docs: ✏️ comment potential edge case in e2e api client cleanup * docs: ✏️ fix comment typo Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com> * docs: ✏️ remove auth flag for generating e2e client * docs: ✏️ add mention that java is required for generate:api * chore: 🤖 implement pr feedback * chore: 🤖 Clean up api client and add more extensive test * chore: 🤖 fix casing in api-client test Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com> --------- Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
This commit is contained in:
1 parent
5fd9f0216a
commit
b42ecbff36
262 files changed
+31646
-192
No files matched your search
@@ -4,8 +4,6 @@
|
||||
*/
|
||||
|
||||
import { test } from '../../global-setup.js';
|
||||
import * as boundaryHttp from '../../helpers/boundary-http.js';
|
||||
import * as boundaryCli from '../../helpers/boundary-cli.js';
|
||||
import { RolesPage } from '../pages/roles.js';
|
||||
import { expect } from '@playwright/test';
|
||||
|
||||
@@ -33,48 +31,33 @@ const columnHeaders = Object.freeze({
|
||||
|
||||
let org, rolesSortedByCreatedTime, rolesSortedByName, rolesSortedById;
|
||||
|
||||
test.beforeEach(
|
||||
async ({
|
||||
request,
|
||||
controllerAddr,
|
||||
adminAuthMethodId,
|
||||
adminLoginName,
|
||||
adminPassword,
|
||||
}) => {
|
||||
org = await boundaryHttp.createOrg(request);
|
||||
test.beforeEach(async ({ apiClient }) => {
|
||||
org = await apiClient.clients.Scope.scopeServiceCreateScope({
|
||||
item: {
|
||||
scopeId: 'global',
|
||||
},
|
||||
skipAdminRoleCreation: true,
|
||||
skipDefaultRoleCreation: true,
|
||||
});
|
||||
|
||||
await boundaryCli.authenticateBoundary(
|
||||
controllerAddr,
|
||||
adminAuthMethodId,
|
||||
adminLoginName,
|
||||
adminPassword,
|
||||
);
|
||||
// create roles with specific names
|
||||
const roles = await Promise.all(
|
||||
roleNamesToCreate.map((roleName) => {
|
||||
return apiClient.clients.Role.roleServiceCreateRole({
|
||||
item: {
|
||||
scopeId: org.id,
|
||||
name: roleName,
|
||||
},
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
// when the org is created some roles are created automatically, but for the purposes
|
||||
// of this sorting test it's clearer if only the roles created by the test are present
|
||||
const existingRolesToDelete = await boundaryCli.listRoles(org.id);
|
||||
for (const role of existingRolesToDelete) {
|
||||
await boundaryCli.deleteRole(role.id);
|
||||
}
|
||||
|
||||
// create roles with specific names
|
||||
for (const roleName of roleNamesToCreate) {
|
||||
boundaryCli.createRole(org.id, { name: roleName });
|
||||
}
|
||||
|
||||
// collect all roles and data so that sorting can be tested based on the underlying data
|
||||
const roles = await boundaryCli.listRoles(org.id);
|
||||
rolesSortedByCreatedTime = roles.toSorted((a, b) => {
|
||||
return new Date(b.created_time) - new Date(a.created_time);
|
||||
});
|
||||
rolesSortedByName = roles.toSorted((a, b) => a.name.localeCompare(b.name));
|
||||
rolesSortedById = roles.toSorted((a, b) => a.id.localeCompare(b.id));
|
||||
},
|
||||
);
|
||||
|
||||
test.afterEach(async ({ request }) => {
|
||||
// deletes the org and any associated roles
|
||||
await boundaryHttp.deleteOrg(request, org.id);
|
||||
// collect all roles and data so that sorting can be tested based on the underlying data
|
||||
rolesSortedByCreatedTime = roles.toSorted((a, b) => {
|
||||
return new Date(b.createdTime) - new Date(a.createdTime);
|
||||
});
|
||||
rolesSortedByName = roles.toSorted((a, b) => a.name.localeCompare(b.name));
|
||||
rolesSortedById = roles.toSorted((a, b) => a.id.localeCompare(b.id));
|
||||
});
|
||||
|
||||
test(
|
||||
|
||||
Reference in new issue
Block a user