Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 2 additions & 8 deletions tests/e2e/cucumber/environment/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Before(async function (this: World, { pickle }: ITestCaseHookParameter) {
const user = this.usersEnvironment.getUser({ key: 'admin' })
if (config.keycloak) {
await api.keycloak.setAccessTokenForKeycloakOpenCloudUser(user)
await api.keycloak.setAccessTokenForKeycloakUser(user)
await api.keycloak.setKeycloakAdminAccessToken()
} else {
await api.token.setAccessAndRefreshToken(user)
if (isOcm(pickle)) {
Expand Down Expand Up @@ -156,12 +156,6 @@ BeforeAll(async (): Promise<void> => {
}

state.browser = await browsers[browserType]()

// setup keycloak admin user
if (config.keycloak) {
const usersEnvironment = new environment.UsersEnvironment()
api.keycloak.setupKeycloakAdminUser(usersEnvironment.getUser({ key: 'admin' }))
}
})

const defaults = {
Expand All @@ -180,7 +174,7 @@ After(async function (this: World, { result, willBeRetried, pickle }: ITestCaseH
// refresh keycloak admin access token
if (config.keycloak) {
const user = this.usersEnvironment.getUser({ key: 'admin' })
await api.keycloak.refreshAccessTokenForKeycloakUser(user)
await api.keycloak.refreshKeycloakAdminAccessToken()
await api.keycloak.refreshAccessTokenForKeycloakOpenCloudUser(user)
}

Expand Down
21 changes: 12 additions & 9 deletions tests/e2e/support/api/keycloak/openCloudUserToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { TokenEnvironmentFactory } from '../../environment'
import { config } from '../../../config'
import { User } from '../../types'
import { request, APIRequestContext } from '@playwright/test'
import { getKeycloakAdminUser } from './utils'

interface openCloudTokenForKeycloak {
access_token: string
Expand Down Expand Up @@ -144,9 +145,10 @@ interface KeycloakToken {
refresh_token: string
}

export const refreshAccessTokenForKeycloakUser = async (user: User): Promise<void> => {
export const refreshKeycloakAdminAccessToken = async (): Promise<void> => {
const adminUser = getKeycloakAdminUser()
const tokenEnvironment = TokenEnvironmentFactory('keycloak')
const refreshToken = tokenEnvironment.getToken({ user }).refreshToken
const refreshToken = tokenEnvironment.getToken({ user: adminUser }).refreshToken
const context = await request.newContext()

const refreshResponse = await context.post(tokenMasterEndpoint, {
Expand All @@ -166,24 +168,25 @@ export const refreshAccessTokenForKeycloakUser = async (user: User): Promise<voi

// update tokens
tokenEnvironment.setToken({
user: { ...user },
user: { ...adminUser },
token: {
userId: user.username,
userId: adminUser.username,
accessToken: resBody.access_token,
refreshToken: resBody.refresh_token
}
})
}

export const setAccessTokenForKeycloakUser = async (user: User): Promise<void> => {
export const setKeycloakAdminAccessToken = async (): Promise<void> => {
const adminUser = getKeycloakAdminUser()
const context = await request.newContext()
const response = await context.post(tokenMasterEndpoint, {
// password grant type is used to get keycloak token.
// This approach is not recommended and used only for the test
form: {
client_id: 'admin-cli',
username: config.keycloakAdminUser,
password: config.keycloakAdminUser,
username: adminUser.username,
password: adminUser.password,
grant_type: 'password'
}
})
Expand All @@ -192,9 +195,9 @@ export const setAccessTokenForKeycloakUser = async (user: User): Promise<void> =
const tokenEnvironment = TokenEnvironmentFactory('keycloak')

tokenEnvironment.setToken({
user: { ...user },
user: { ...adminUser },
token: {
userId: user.username,
userId: adminUser.username,
accessToken: resBody.access_token,
refreshToken: resBody.refresh_token
}
Expand Down
11 changes: 6 additions & 5 deletions tests/e2e/support/api/keycloak/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { keycloakRealmRoles } from '../../store'
import { state } from '../../../cucumber/environment/shared'
import { initializeUser } from '../../utils/tokenHelper'
import { setAccessTokenForKeycloakOpenCloudUser } from './openCloudUserToken'
import { getKeycloakAdminUser } from './utils'

export const openCloudKeycloakUserRoles: Record<string, string> = {
Admin: 'opencloudAdmin',
Expand Down Expand Up @@ -39,7 +40,7 @@ export const createUser = async ({ user }: { user: User }): Promise<User> => {
method: 'POST',
path: join(realmBasePath, 'users'),
body,
user: getAdminUser(),
user: getKeycloakAdminUser(),
header: { 'Content-Type': 'application/json' }
})
checkResponseStatus(creationRes, 'Failed while creating user')
Expand Down Expand Up @@ -75,7 +76,7 @@ export const assignRole = async ({ uuid, role }: { uuid: string; role: string })
await getRealmRole(openCloudKeycloakUserRoles[role]),
await getRealmRole('offline_access')
],
user: getAdminUser(),
user: getKeycloakAdminUser(),
header: { 'Content-Type': 'application/json' }
})
}
Expand All @@ -86,7 +87,7 @@ export const unAssignRole = async ({ uuid, role }: { uuid: string; role: string
method: 'DELETE',
path: join(realmBasePath, 'users', uuid, 'role-mappings', 'realm'),
body: [await getRealmRole(openCloudKeycloakUserRoles[role])],
user: getAdminUser(),
user: getKeycloakAdminUser(),
header: { 'Content-Type': 'application/json' }
})
checkResponseStatus(response, 'Can not delete existing role ')
Expand All @@ -106,7 +107,7 @@ export const deleteUser = async ({ user }: { user: User }): Promise<User> => {
'users',
usersEnvironment.getCreatedUser({ key: user.id }).keycloakUuid
),
user: getAdminUser()
user: getKeycloakAdminUser()
})
checkResponseStatus(response, 'Failed to delete keycloak user: ' + user.id)
if (response.ok) {
Expand All @@ -128,7 +129,7 @@ export const getRealmRole = async (role: string): Promise<KeycloakRealmRole> =>
const response = await request({
method: 'GET',
path: join(realmBasePath, 'roles'),
user: getAdminUser()
user: getKeycloakAdminUser()
})
checkResponseStatus(response, 'Failed while fetching realm roles')
const roles = (await response.json()) as KeycloakRealmRole[]
Expand Down
11 changes: 8 additions & 3 deletions tests/e2e/support/api/keycloak/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ export const getUserIdFromResponse = (response: APIResponse): string => {
return response.headers()['location'].split('/').pop()
}

export const setupKeycloakAdminUser = (user: User) => {
user.id = config.keycloakAdminUser
user.password = config.keycloakAdminPassword
export const getKeycloakAdminUser = () => {
return {
id: config.keycloakAdminUser,
username: config.keycloakAdminUser,
displayName: config.keycloakAdminUser,
password: config.keycloakAdminPassword,
email: `${config.keycloakAdminUser}@mail.test`
}
}
1 change: 1 addition & 0 deletions tests/e2e/support/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ export * as locatorUtils from './locator'
export * from './runtimeFs'
export * from './dragDrop'
export * from './datePicker'
export * from './tokenHelper'
4 changes: 2 additions & 2 deletions tests/e2e/support/utils/tokenHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import { User } from '../types'

export const initializeUser = async ({
browser,
url = config.baseUrl,
user,
url = config.baseUrl,
waitForSelector = null
}: {
browser: Browser
url?: string
user: User
url?: string
tokenType?: TokenProviderType
waitForSelector?: string
}): Promise<void> => {
Expand Down