user.test.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. const mongoose = require('mongoose');
  2. const { getInstance } = require('../setup-crowi');
  3. const { UserStatus } = require('../../../src/server/models/user/conts');
  4. describe('User', () => {
  5. // biome-ignore lint/correctness/noUnusedVariables: ignore
  6. let crowi;
  7. let User;
  8. let adminusertestToBeRemovedId;
  9. beforeAll(async () => {
  10. crowi = await getInstance();
  11. User = mongoose.model('User');
  12. await User.insertMany([
  13. {
  14. name: 'Example for User Test',
  15. username: 'usertest',
  16. email: 'usertest@example.com',
  17. password: 'usertestpass',
  18. lang: 'en_US',
  19. },
  20. {
  21. name: 'Admin Example Active',
  22. username: 'adminusertest1',
  23. email: 'adminusertest1@example.com',
  24. password: 'adminusertestpass',
  25. admin: true,
  26. status: UserStatus.STATUS_ACTIVE,
  27. lang: 'en_US',
  28. },
  29. {
  30. name: 'Admin Example Suspended',
  31. username: 'adminusertest2',
  32. email: 'adminusertes2@example.com',
  33. password: 'adminusertestpass',
  34. admin: true,
  35. status: UserStatus.STATUS_SUSPENDED,
  36. lang: 'en_US',
  37. },
  38. {
  39. name: 'Admin Example to delete',
  40. username: 'adminusertestToBeRemoved',
  41. email: 'adminusertestToBeRemoved@example.com',
  42. password: 'adminusertestpass',
  43. admin: true,
  44. status: UserStatus.STATUS_ACTIVE,
  45. lang: 'en_US',
  46. },
  47. ]);
  48. // delete adminusertestToBeRemoved
  49. const adminusertestToBeRemoved = await User.findOne({
  50. username: 'adminusertestToBeRemoved',
  51. });
  52. adminusertestToBeRemovedId = adminusertestToBeRemoved._id;
  53. await adminusertestToBeRemoved.statusDelete();
  54. });
  55. describe('Create and Find.', () => {
  56. describe('The user', () => {
  57. test('should created with createUserByEmailAndPassword', (done) => {
  58. User.createUserByEmailAndPassword(
  59. 'Example2 for User Test',
  60. 'usertest2',
  61. 'usertest2@example.com',
  62. 'usertest2pass',
  63. 'en_US',
  64. (err, userData) => {
  65. expect(err).toBeNull();
  66. expect(userData).toBeInstanceOf(User);
  67. expect(userData.name).toBe('Example2 for User Test');
  68. done();
  69. },
  70. );
  71. });
  72. test('should be found by findUserByUsername', async () => {
  73. const user = await User.findUserByUsername('usertest');
  74. expect(user).toBeInstanceOf(User);
  75. expect(user.name).toBe('Example for User Test');
  76. });
  77. });
  78. });
  79. describe('Delete.', () => {
  80. describe('Deleted users', () => {
  81. test('should have correct attributes', async () => {
  82. const adminusertestToBeRemoved = await User.findOne({
  83. _id: adminusertestToBeRemovedId,
  84. });
  85. expect(adminusertestToBeRemoved).toBeInstanceOf(User);
  86. expect(adminusertestToBeRemoved.name).toBe('');
  87. expect(adminusertestToBeRemoved.password).toBe('');
  88. expect(adminusertestToBeRemoved.googleId).toBeNull();
  89. expect(adminusertestToBeRemoved.isGravatarEnabled).toBeFalsy();
  90. expect(adminusertestToBeRemoved.image).toBeNull();
  91. });
  92. });
  93. });
  94. describe('User.findAdmins', () => {
  95. test('should retrieves only active users', async () => {
  96. const users = await User.findAdmins();
  97. const adminusertestActive = users.find(
  98. (user) => user.username === 'adminusertest1',
  99. );
  100. const adminusertestSuspended = users.find(
  101. (user) => user.username === 'adminusertest2',
  102. );
  103. const adminusertestToBeRemoved = users.find(
  104. (user) => user._id.toString() === adminusertestToBeRemovedId.toString(),
  105. );
  106. expect(adminusertestActive).toBeInstanceOf(User);
  107. expect(adminusertestSuspended).toBeUndefined();
  108. expect(adminusertestToBeRemoved).toBeUndefined();
  109. });
  110. test("with 'includesInactive' option should retrieves suspended users", async () => {
  111. const users = await User.findAdmins({
  112. status: [UserStatus.STATUS_ACTIVE, UserStatus.STATUS_SUSPENDED],
  113. });
  114. const adminusertestActive = users.find(
  115. (user) => user.username === 'adminusertest1',
  116. );
  117. const adminusertestSuspended = users.find(
  118. (user) => user.username === 'adminusertest2',
  119. );
  120. const adminusertestToBeRemoved = users.find(
  121. (user) => user._id.toString() === adminusertestToBeRemovedId.toString(),
  122. );
  123. expect(adminusertestActive).toBeInstanceOf(User);
  124. expect(adminusertestSuspended).toBeInstanceOf(User);
  125. expect(adminusertestToBeRemoved).toBeUndefined();
  126. });
  127. });
  128. describe('User Utilities', () => {
  129. describe('Get user exists from user page path', () => {
  130. test('found', async () => {
  131. const userPagePath = '/user/usertest';
  132. const isExist = await User.isExistUserByUserPagePath(userPagePath);
  133. expect(isExist).toBe(true);
  134. });
  135. test('not found', async () => {
  136. const userPagePath = '/user/usertest-hoge';
  137. const isExist = await User.isExistUserByUserPagePath(userPagePath);
  138. expect(isExist).toBe(false);
  139. });
  140. });
  141. });
  142. });