addUsersContext.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. const {Given, When, Then} = require('cucumber');
  2. const {client} = require('nightwatch-api');
  3. const fetch = require('node-fetch');
  4. const assert = require('assert');
  5. const {getDolApiKey} = require('../setup');
  6. let Login = {};
  7. Given('the administrator has browsed to the new users page', function () {
  8. return client.page.homePage().browsedToNewUserPage();
  9. });
  10. When('the admin creates user with following details', function (datatable) {
  11. return client.page.addUsersPage().adminCreatesUser(datatable);
  12. });
  13. Then('new user {string} should be created', function (lastname) {
  14. return client.page.addUsersPage().newUserShouldBeCreated(lastname);
  15. });
  16. Then('message {string} should be displayed in the webUI', function (message) {
  17. return client.page.addUsersPage().noPermissionMessage(message);
  18. });
  19. Then('message {string} should not be displayed in the webUI', function (message) {
  20. return client.page.addUsersPage().noPermissionDefinedMessageNotShown(message);
  21. });
  22. Then('new user {string} should not be created', function (lastname) {
  23. return client.page.addUsersPage().userNotCreated(lastname);
  24. });
  25. Given('a user has been created with following details', function (dataTable) {
  26. return adminHasCreatedUser(dataTable);
  27. });
  28. Given('the admin has created the following users', function (dataTable) {
  29. return adminHasCreatedUser(dataTable);
  30. });
  31. When('the admin creates user with following details using API', function (dataTable) {
  32. return adminCreatesUserWithAPI(dataTable);
  33. });
  34. Given('the user with login {string} does not exist', async function (login) {
  35. await userDoesNotExist(login);
  36. });
  37. Then('the response status code should be {string}', function (expectedStatusCode) {
  38. return getStatusCode(expectedStatusCode);
  39. });
  40. Then('user with login {string} should exist', function (login) {
  41. return userShouldExist(login);
  42. });
  43. Then('the response message should be {string}', function (expectedResponseMessage) {
  44. return getResponseMessage(expectedResponseMessage);
  45. });
  46. When('the non-admin user {string} with password {string} creates user with following details using API', async function (login, password, dataTable) {
  47. const userDolApikey = await getDolApiKey(login, password);
  48. return userCreatesUserWithApi(dataTable, userDolApikey);
  49. });
  50. const createUserRequest = function (login, lastname, password, api_key = null, dolApiKey = null) {
  51. const header = {};
  52. const url = client.globals.backend_url + 'api/index.php/users';
  53. header['Accept'] = 'application/json';
  54. if (dolApiKey === null) {
  55. header['DOLAPIKEY'] = client.globals.dolApiKey;
  56. } else {
  57. header['DOLAPIKEY'] = dolApiKey;
  58. }
  59. header['Content-Type'] = 'application/json';
  60. return fetch(url, {
  61. method: 'POST',
  62. headers: header,
  63. body: JSON.stringify(
  64. {
  65. login: login,
  66. lastname: lastname,
  67. pass: password,
  68. api_key: api_key
  69. }
  70. )
  71. });
  72. };
  73. const adminCreatesUserWithAPI = function (dataTable) {
  74. const userDetails = dataTable.rowsHash();
  75. return createUserRequest(userDetails['login'], userDetails['last name'], userDetails['password'])
  76. .then((res) => {
  77. client.globals.response = res;
  78. });
  79. };
  80. const userCreatesUserWithApi = function (dataTable, dolApiKey) {
  81. const userDetails = dataTable.rowsHash();
  82. return createUserRequest(userDetails['login'], userDetails['last name'], userDetails['password'], null, dolApiKey)
  83. .then((res) => {
  84. client.globals.response = res;
  85. });
  86. };
  87. const adminHasCreatedUser = async function (dataTable) {
  88. const userDetails = dataTable.hashes();
  89. for (const user of userDetails) {
  90. if (user['api_key']) {
  91. await createUserRequest(user['login'], user['last name'], user['password'], user['api_key'])
  92. .then((response) => {
  93. if (response.status < 200 || response.status >= 400) {
  94. throw new Error('Failed to create user: ' + user['login'] +
  95. ' ' + response.statusText);
  96. }
  97. });
  98. } else {
  99. await createUserRequest(user['login'], user['last name'], user['password'])
  100. .then((response) => {
  101. if (response.status < 200 || response.status >= 400) {
  102. throw new Error('Failed to create user: ' + user['login'] +
  103. ' ' + response.statusText);
  104. }
  105. });
  106. }
  107. }
  108. };
  109. const getUsersLogin = async function () {
  110. const header = {};
  111. const url = client.globals.backend_url + 'api/index.php/users/';
  112. header['Accept'] = 'application/json';
  113. header['DOLAPIKEY'] = client.globals.dolApiKey;
  114. header['Content-Type'] = 'application/json';
  115. await fetch(url, {
  116. method: 'GET',
  117. headers: header
  118. })
  119. .then(async (response) => {
  120. const json_response = await response.json();
  121. for (const user of json_response) {
  122. Login[user.login] = user.login;
  123. }
  124. });
  125. };
  126. const userDoesNotExist = async function (login) {
  127. await getUsersLogin();
  128. if (login in Login) {
  129. Login = {};
  130. throw new Error(`user ${login} exists`);
  131. }
  132. Login = {};
  133. return;
  134. };
  135. const userShouldExist = async function (login) {
  136. await getUsersLogin();
  137. if (login in Login) {
  138. Login = {};
  139. return;
  140. } else {
  141. Login = {};
  142. throw new Error(`User ${login} does not Exist`);
  143. }
  144. };
  145. const getStatusCode = async function (expectedStatusCode) {
  146. const actualStatusCode = client.globals.response.status.toString();
  147. return assert.strictEqual(actualStatusCode, expectedStatusCode,
  148. `The expected status code was ${expectedStatusCode} but got ${actualStatusCode}`);
  149. };
  150. const getResponseMessage = async function (expectedResponseMessage) {
  151. const json_response = await client.globals.response.json();
  152. const actualResponseMessage = json_response['error']['0'];
  153. return assert.strictEqual(actualResponseMessage, expectedResponseMessage,
  154. `the expected response message was ${expectedResponseMessage} but got ${actualResponseMessage}`);
  155. };