@umbraco/playwright-testhelpers
Version:
Test helpers for making playwright tests for Umbraco solutions
261 lines • 11.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserApiHelper = void 0;
const json_models_builders_1 = require("@umbraco/json-models-builders");
class UserApiHelper {
api;
page;
constructor(api, page) {
this.api = api;
this.page = page;
}
async ensureNameNotExists(name) {
const response = await this.getAll();
const json = await response.json();
for (const sb of json.items) {
if (sb.name === name) {
if (sb.id !== null) {
// It takes a while to create the user, so if we delete it too fast. We get a DB lock
await this.page.waitForTimeout(500);
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/user/' + sb.id);
}
}
}
return null;
}
async getUsersCount() {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/user?skip=0&take=10000');
const json = await response.json();
return json.total;
}
async doesExist(id) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/user/' + id);
return response.status() === 200;
}
async doesNameExist(name) {
const response = await this.getAll();
const json = await response.json();
for (const sb of json.items) {
if (sb.name === name) {
return true;
}
}
return false;
}
async get(id) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/user/' + id);
const json = await response.json();
if (json !== null) {
return json;
}
return null;
}
async getByName(name) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/user?skip=0&take=10000');
const json = await response.json();
for (const sb of json.items) {
if (sb.name === name) {
if (sb.id !== null) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/user/' + sb.id);
return await response.json();
}
}
}
return null;
}
async create(userData) {
const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user', userData);
return response.headers().location.split("/").pop();
}
async update(id, userData) {
return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/user/' + id, userData);
}
async delete(id) {
await this.page.waitForTimeout(500);
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/user/' + id);
}
async deleteByName(name) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/user?skip=0&take=10000');
const json = await response.json();
for (const sb of json.items) {
if (sb.name === name) {
if (sb.id !== null) {
await this.page.waitForTimeout(500);
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/user/' + sb.id);
}
}
}
return null;
}
async saveUser(user) {
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user', user);
}
// Avatar
async addAvatar(id, fileId) {
const avatar = {
'file': {
'id': fileId
}
};
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user/avatar/' + id, avatar);
}
async removeAvatar(id) {
await this.page.waitForTimeout(500);
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/user/avatar/' + id);
}
// Enable/Disabled and Unlock
async disable(ids) {
const users = {
"userIds": ids.map(id => ({ id }))
};
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user/disable', users);
}
async enable(ids) {
const users = {
"userIds": ids.map(id => ({ id }))
};
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user/enable', users);
}
async unlock(ids) {
const users = {
"userIds": ids.map(id => ({ id }))
};
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user/unlock', users);
}
async getCurrentUser() {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/user/current');
return await response.json();
}
// Set User Groups for Users
async setUserGroups(userIds, userGroupIds) {
const userGroupsForUsers = {
"userIds": userIds.map(id => ({ id })),
"userGroupIds": userGroupIds.map(id => ({ id }))
};
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user/set-user-groups', userGroupsForUsers);
}
// Password
async updateCurrentUserPassword(newPassword, oldPassword) {
const updatePassword = {
"newPassword": newPassword,
"oldPassword": oldPassword
};
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user/change-password/', updatePassword);
}
// Invite
async invite(email, name, userGroupIds, message) {
const userInvite = {
"email": email,
"userName": email,
"name": name,
"userGroupIds": userGroupIds.map(id => ({ id })),
"message": message
};
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user/invite', userInvite);
}
async createDefaultUser(nameOfUser, email, userGroupIds, kind = 'Default') {
const user = new json_models_builders_1.UserBuilder()
.withName(nameOfUser)
.withEmail(email)
.withKind(kind)
.build();
for (const userGroupId of userGroupIds) {
user.userGroupIds.push({ id: userGroupId });
}
return await this.create(user);
}
async addDefaultAvatarImageToUser(userId) {
const crypto = require('crypto');
const temporaryFileId = crypto.randomUUID();
const filePath = './fixtures/mediaLibrary/Umbraco.png';
const fileName = 'Umbraco.png';
const mimeType = 'image/png';
await this.api.temporaryFile.create(temporaryFileId, fileName, mimeType, filePath);
return await this.addAvatar(userId, temporaryFileId);
}
async doesUserContainUserGroupIds(userName, userGroupIds) {
const user = await this.getByName(userName);
if (!user.userGroupIds || user.userGroupIds.length === 0) {
return false;
}
const userGroupIdsArray = user.userGroupIds.map(group => group.id);
return userGroupIdsArray.every(id => userGroupIds.includes(id));
}
async doesUserContainContentStartNodeIds(userName, documentStartNodeIds) {
const user = await this.getByName(userName);
if (!user.documentStartNodeIds || user.documentStartNodeIds.length === 0) {
return false;
}
const documentStartNodeIdsArray = user.documentStartNodeIds.map(documentStartNode => documentStartNode.id);
return documentStartNodeIdsArray.every(id => documentStartNodeIds.includes(id));
}
async doesUserContainMediaStartNodeIds(userName, mediaStartNodeIds) {
const user = await this.getByName(userName);
if (!user.mediaStartNodeIds || user.mediaStartNodeIds.length === 0) {
return false;
}
const mediaStartNodeIdsArray = user.mediaStartNodeIds.map(mediaStartNode => mediaStartNode.id);
return mediaStartNodeIdsArray.every(id => mediaStartNodeIds.includes(id));
}
async updatePassword(userId, newPassword) {
const updatePassword = {
"newPassword": newPassword,
};
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/user/' + userId + '/change-password/', updatePassword);
}
// User Permissions
async setUserPermissions(userName, userEmail, userPassword, userGroupId, documentStartNodeIds = [], hasDocumentRootAccess = false, mediaStartNodeIds = [], hasMediaRootAccess = false, uiCulture = 'en-us') {
let user = await this.getByName(userName);
// If the user does not exist, create a default user and retrieve the newly created user
if (!user) {
await this.createDefaultUser(userName, userEmail, [userGroupId]);
user = await this.getByName(userName);
}
await this.updatePassword(user.id, userPassword);
let userSetup = {
documentStartNodeIds: [],
email: user.email,
hasDocumentRootAccess: hasDocumentRootAccess,
hasMediaRootAccess: hasMediaRootAccess,
languageIsoCode: uiCulture,
mediaStartNodeIds: [],
name: user.name,
userGroupIds: [{ id: userGroupId }],
userName: user.userName,
};
for (const documentStartNodeId of documentStartNodeIds) {
userSetup.documentStartNodeIds.push({ id: documentStartNodeId });
}
for (const mediaStartNodeId of mediaStartNodeIds) {
userSetup.mediaStartNodeIds.push({ id: mediaStartNodeId });
}
await this.update(user.id, userSetup);
}
async loginToUser(userName, userEmail, userPassword) {
const user = await this.getByName(userName);
let userCookieAndTokens;
if (user.id !== null) {
await this.api.revokeAccessToken(await this.api.getCookie(), await this.api.getAccessToken());
await this.api.revokeRefreshToken(await this.api.getCookie(), await this.api.getRefreshToken());
userCookieAndTokens = await this.api.updateTokenAndCookie(userEmail, userPassword);
}
return userCookieAndTokens;
}
async getAll() {
return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/user?skip=0&take=100');
}
async filterByText(text) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/filter/user?skip=0&take=100&filter=' + text);
return await response.json();
}
async filterByUserStates(userStates) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/filter/user?skip=0&take=100&userStates=' + userStates);
return await response.json();
}
async filterByUserGroupIds(userGroupIds) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/filter/user?skip=0&take=100&userGroupIds=' + userGroupIds);
return await response.json();
}
}
exports.UserApiHelper = UserApiHelper;
//# sourceMappingURL=UserApiHelper.js.map