user.test.js 4.9 KB

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