external-user-group-relation.integ.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import mongoose from 'mongoose';
  2. import ExternalUserGroup from './external-user-group';
  3. import ExternalUserGroupRelation from './external-user-group-relation';
  4. // TODO: use actual user model after ~/server/models/user.js becomes importable in vitest
  5. // ref: https://github.com/vitest-dev/vitest/issues/846
  6. const userSchema = new mongoose.Schema({
  7. name: { type: String },
  8. username: { type: String, required: true, unique: true },
  9. email: { type: String, unique: true, sparse: true },
  10. }, {
  11. timestamps: true,
  12. });
  13. const User = mongoose.model('User', userSchema);
  14. describe('ExternalUserGroupRelation model', () => {
  15. let user1;
  16. let user2;
  17. beforeAll(async() => {
  18. user1 = await User.create({
  19. name: 'user1', username: 'user1', email: 'user1@example.com',
  20. });
  21. user2 = await User.create({
  22. name: 'user2', username: 'user2', email: 'user2@example.com',
  23. });
  24. });
  25. afterEach(async() => {
  26. await ExternalUserGroup.deleteMany();
  27. await ExternalUserGroupRelation.deleteMany();
  28. });
  29. describe('createRelations', () => {
  30. const groupId1 = new mongoose.Types.ObjectId();
  31. const groupId2 = new mongoose.Types.ObjectId();
  32. beforeAll(async() => {
  33. await ExternalUserGroup.insertMany([
  34. {
  35. _id: groupId1, name: 'test group 1', externalId: 'testExternalId', provider: 'testProvider',
  36. },
  37. {
  38. _id: groupId2, name: 'test group 2', externalId: 'testExternalId2', provider: 'testProvider',
  39. },
  40. ]);
  41. });
  42. it('creates relation for user', async() => {
  43. await ExternalUserGroupRelation.createRelations([groupId1, groupId2], user1);
  44. const relations = await ExternalUserGroupRelation.find();
  45. const idCombinations = relations.map((relation) => {
  46. return [relation.relatedGroup, relation.relatedUser];
  47. });
  48. expect(idCombinations).toStrictEqual([[groupId1, user1._id.toString()], [groupId2, user1._id.toString()]]);
  49. });
  50. });
  51. describe('removeAllInvalidRelations', () => {
  52. const groupId1 = new mongoose.Types.ObjectId();
  53. const groupId2 = new mongoose.Types.ObjectId();
  54. beforeAll(async() => {
  55. await ExternalUserGroupRelation.createRelations([groupId1, groupId2], user1);
  56. });
  57. it('removes invalid relations', async() => {
  58. const relationsBeforeRemoval = await ExternalUserGroupRelation.find();
  59. expect(relationsBeforeRemoval.length).not.toBe(0);
  60. await ExternalUserGroupRelation.removeAllInvalidRelations();
  61. const relationsAfterRemoval = await ExternalUserGroupRelation.find();
  62. expect(relationsAfterRemoval.length).toBe(0);
  63. });
  64. });
  65. describe('findAllUserIdsForUserGroups', () => {
  66. const groupId1 = new mongoose.Types.ObjectId();
  67. const groupId2 = new mongoose.Types.ObjectId();
  68. const groupId3 = new mongoose.Types.ObjectId();
  69. beforeAll(async() => {
  70. await ExternalUserGroupRelation.createRelations([groupId1, groupId2], user1);
  71. await ExternalUserGroupRelation.create({ relatedGroup: groupId3, relatedUser: user2._id });
  72. });
  73. it('finds all unique user ids for specified user groups', async() => {
  74. const userIds = await ExternalUserGroupRelation.findAllUserIdsForUserGroups([groupId1, groupId2, groupId3]);
  75. expect(userIds).toStrictEqual([user1._id.toString(), user2._id.toString()]);
  76. });
  77. });
  78. describe('findAllUserGroupIdsRelatedToUser', () => {
  79. const groupId1 = new mongoose.Types.ObjectId();
  80. const groupId2 = new mongoose.Types.ObjectId();
  81. const groupId3 = new mongoose.Types.ObjectId();
  82. beforeAll(async() => {
  83. await ExternalUserGroupRelation.createRelations([groupId1, groupId2], user1);
  84. await ExternalUserGroupRelation.create({ relatedGroup: groupId3, relatedUser: user2._id });
  85. });
  86. it('finds all group ids related to user', async() => {
  87. const groupIds = await ExternalUserGroupRelation.findAllUserGroupIdsRelatedToUser(user1);
  88. expect(groupIds).toStrictEqual([groupId1.toString(), groupId2._id.toString()]);
  89. const groupIds2 = await ExternalUserGroupRelation.findAllUserGroupIdsRelatedToUser(user2);
  90. expect(groupIds2).toStrictEqual([groupId3.toString()]);
  91. });
  92. });
  93. });