import { apiCallProperties } from "./apiauth" import { ensureSomethingDoesntExist, ensureSomethingExists } from "./ensure" export function ensureProjectExists(api: apiCallProperties, projectName: string): Cypress.Chainable { return ensureSomethingExists( api, `projects/_search`, (project: any) => project.name === projectName, 'projects', { name: projectName }, ) } export function ensureProjectDoesntExist(api: apiCallProperties, projectName: string): Cypress.Chainable { return ensureSomethingDoesntExist( api, `projects/_search`, (project: any) => project.name === projectName, (project) => `projects/${project.id}`, ) } class ResourceType { constructor( public resourcePath: string, public compareProperty: string, public identifierProperty: string, ){} } export const Apps = new ResourceType('apps', 'name', 'id') export const Roles = new ResourceType('roles', 'key', 'key') //export const Grants = new ResourceType('apps', 'name') export function ensureProjectResourceDoesntExist(api: apiCallProperties, projectId: number, resourceType: ResourceType, resourceName: string): Cypress.Chainable { return ensureSomethingDoesntExist( api, `projects/${projectId}/${resourceType.resourcePath}/_search`, (resource: any) => { return resource[resourceType.compareProperty] === resourceName }, (resource) => { return `projects/${projectId}/${resourceType.resourcePath}/${resource[resourceType.identifierProperty]}` } ) } export function ensureApplicationExists(api: apiCallProperties, projectId: number, appName: string): Cypress.Chainable { return ensureSomethingExists( api, `projects/${projectId}/${Apps.resourcePath}/_search`, (resource: any) => resource.name === appName, `projects/${projectId}/${Apps.resourcePath}/oidc`, { name: appName, redirectUris: [ 'https://e2eredirecturl.org' ], responseTypes: [ "OIDC_RESPONSE_TYPE_CODE" ], grantTypes: [ "OIDC_GRANT_TYPE_AUTHORIZATION_CODE" ], authMethodType: "OIDC_AUTH_METHOD_TYPE_NONE", postLogoutRedirectUris: [ 'https://e2elogoutredirecturl.org' ], /* "clientId": "129383004379407963@e2eprojectpermission", "clockSkew": "0s", "allowedOrigins": [ "https://testurl.org" ]*/ }, ) }