users-crud.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. const test = require('../testlib');
  2. test.run(async function () {
  3. await test('admin', async function (assert, req) {
  4. //Test missing fields
  5. var res = await req({
  6. url: '/users',
  7. method: 'post',
  8. data: {
  9. name: 'newadmin',
  10. type: 'admin'
  11. }
  12. });
  13. assert.equal(res.status, 422, 'Missing fields should trigger error.');
  14. //Test invalid type
  15. var res = await req({
  16. url: '/users',
  17. method: 'post',
  18. data: {
  19. name: 'newadmin',
  20. type: 'foo',
  21. password: 'foo'
  22. }
  23. });
  24. assert.equal(res.status, 400, 'Invalid type should trigger error.');
  25. //Test duplicate user
  26. var res = await req({
  27. url: '/users',
  28. method: 'post',
  29. data: {
  30. name: 'admin',
  31. type: 'admin',
  32. password: 'foo'
  33. }
  34. });
  35. assert.equal(res.status, 409, 'Duplicate user should trigger error.');
  36. //Test user creation
  37. var res = await req({
  38. url: '/users',
  39. method: 'post',
  40. data: {
  41. name: 'newadmin',
  42. type: 'admin',
  43. password: 'newadmin'
  44. }
  45. });
  46. assert.equal(res.status, 201, 'User creation should succeed.');
  47. assert.equal(res.data, { id: 4, name: 'newadmin', type: 'admin' }, 'Add user data fail.');
  48. //Test if new user can log in
  49. var res = await req({
  50. url: '/sessions',
  51. method: 'post',
  52. data: {
  53. username: 'newadmin',
  54. password: 'newadmin'
  55. }
  56. });
  57. assert.equal(res.status, 201, 'Login with new user should succeed.');
  58. //Test user get
  59. var res = await req({
  60. url: '/users/4',
  61. method: 'get'
  62. });
  63. assert.equal(res.status, 200, 'New user should be found.');
  64. assert.equal(res.data, { id: 4, name: 'newadmin', type: 'admin', native: true }, 'New user data fail.');
  65. //Test user change without data
  66. var res = await req({
  67. url: '/users/4',
  68. method: 'put',
  69. data: { dummy: 'foo' }
  70. });
  71. assert.equal(res.status, 204, 'Update without field should succeed.');
  72. //Test user get
  73. var res = await req({
  74. url: '/users/4',
  75. method: 'get'
  76. });
  77. assert.equal(res.status, 200, 'New user should be found after update.');
  78. assert.equal(res.data, { id: 4, name: 'newadmin', type: 'admin', native: true }, 'New user should not change by noop update.');
  79. //Test user update
  80. var res = await req({
  81. url: '/users/4',
  82. method: 'put',
  83. data: {
  84. name: 'foo',
  85. password: 'bar',
  86. type: 'user'
  87. }
  88. });
  89. assert.equal(res.status, 204, 'Update should succeed.');
  90. //Test if updated user can log in
  91. var res = await req({
  92. url: '/sessions',
  93. method: 'post',
  94. data: {
  95. username: 'foo',
  96. password: 'bar'
  97. }
  98. });
  99. assert.equal(res.status, 201, 'Login with updated user should succeed.');
  100. //Test user get
  101. var res = await req({
  102. url: '/users/4',
  103. method: 'get'
  104. });
  105. assert.equal(res.status, 200, 'New user should be found after second update.');
  106. assert.equal(res.data, { id: 4, name: 'foo', type: 'user', native: true }, 'New user should change by update.');
  107. //Test user update conflict
  108. var res = await req({
  109. url: '/users/4',
  110. method: 'put',
  111. data: {
  112. name: 'admin'
  113. }
  114. });
  115. assert.equal(res.status, 409, 'Update with existent name should fail.');
  116. //Test user delete for not existing user
  117. var res = await req({
  118. url: '/users/100',
  119. method: 'delete'
  120. });
  121. assert.equal(res.status, 404, 'Deletion of not existens user should fail.');
  122. //Test user delete
  123. var res = await req({
  124. url: '/users/4',
  125. method: 'delete'
  126. });
  127. assert.equal(res.status, 204, 'Deletion of user should succeed.');
  128. var res = await req({
  129. url: '/users/4',
  130. method: 'get'
  131. });
  132. assert.equal(res.status, 404, 'New user should not be found after deletion.');
  133. // Test me alias get
  134. var res = await req({
  135. url: '/users/me',
  136. method: 'get'
  137. });
  138. assert.equal(res.status, 200, 'Admin should be able to use /me.');
  139. assert.equal(res.data, { id: 1, name: 'admin', type: 'admin', native: true }, 'Admin /me data fail.');
  140. // Test me alias update
  141. var res = await req({
  142. url: '/users/me',
  143. method: 'put',
  144. data: {
  145. password: 'abc'
  146. }
  147. });
  148. assert.equal(res.status, 204, 'Admin should be able to update /me.');
  149. //Test if updated user can log in
  150. var res = await req({
  151. url: '/sessions',
  152. method: 'post',
  153. data: {
  154. username: 'admin',
  155. password: 'abc'
  156. }
  157. });
  158. assert.equal(res.status, 201, 'Login with updated admin should succeed.');
  159. });
  160. await test('user', async function (assert, req) {
  161. // Test me alias get
  162. var res = await req({
  163. url: '/users/me',
  164. method: 'get'
  165. });
  166. assert.equal(res.status, 200, 'User should be able to use /me.');
  167. assert.equal(res.data, { id: 2, name: 'user', type: 'user', native: true }, 'User /me data fail.');
  168. // Test me alias update
  169. var res = await req({
  170. url: '/users/me',
  171. method: 'put',
  172. data: {
  173. password: 'abc'
  174. }
  175. });
  176. assert.equal(res.status, 204, 'User should be able to update /me.');
  177. //Test if updated user can log in
  178. var res = await req({
  179. url: '/sessions',
  180. method: 'post',
  181. data: {
  182. username: 'user',
  183. password: 'abc'
  184. }
  185. });
  186. assert.equal(res.status, 201, 'Login with updated user should succeed.');
  187. });
  188. });