2
0

user.test.js 4.9 KB

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