2024-09-06 20:28:06 +08:00

100 lines
2.9 KiB
JavaScript

const {Before, After} = require('cucumber');
const {client} = require('nightwatch-api');
const fetch = require('node-fetch');
let initialUsers = {};
let dolApiKey = '';
const getUsers = async function (api_key = null) {
const header = {};
let dolApiKey;
const url = client.globals.backend_url + 'api/index.php/users';
if (api_key === null) {
dolApiKey = client.globals.dolApiKey;
} else {
dolApiKey = api_key;
}
header['Accept'] = 'application/json';
header['DOLAPIKEY'] = dolApiKey;
await fetch(url, {
method: 'GET',
headers: header
})
.then(async (response) => {
client.globals.response = response;
});
};
const getUsersId = async function () {
const users = {};
await getUsers();
const json_response = await client.globals.response.json();
for (const user of json_response) {
users[user.id] = user.id;
}
return users;
};
const getDolApiKey = async function (login = null, password = null) {
const header = {};
if (login === null && password === null) {
login = client.globals.adminUsername;
password = client.globals.adminPassword;
}
const params = new URLSearchParams();
params.set('login', login);
params.set('password', password);
const apiKey = client.globals.backend_url + `api/index.php/login?${params.toString()}`;
header['Accept'] = 'application/json';
await fetch(apiKey, {
method: 'GET',
headers: header
})
.then(async (response) => {
const jsonResponse = await response.json();
dolApiKey = jsonResponse['success']['token'];
if (login === client.globals.adminUsername && password === client.globals.adminPassword) {
client.globals.dolApiKey = dolApiKey;
}
});
return dolApiKey;
};
Before(async function getAdminDolApiKey() {
await getDolApiKey();
});
Before(async () => {
initialUsers = await getUsersId();
});
After(async () => {
const finalUsers = await getUsersId();
const header = {};
const url = client.globals.backend_url + 'api/index.php/users/';
header['Accept'] = 'application/json';
header['DOLAPIKEY'] = client.globals.dolApiKey;
let found;
for (const finaluser in finalUsers) {
for (const initialuser in initialUsers) {
found = false;
if (initialuser === finaluser) {
found = true;
break;
}
}
if (!found) {
await fetch(url + finaluser, {
method: 'DELETE',
headers: header
})
.then(res => {
if (res.status < 200 || res.status >= 400) {
throw new Error("Failed to delete user: " + res.statusText);
}
});
}
}
});
module.exports = {getDolApiKey, getUsers};