external-user-group.integ.ts 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import mongoose from 'mongoose';
  2. import ExternalUserGroup from './external-user-group';
  3. describe('ExternalUserGroup model', () => {
  4. describe('findAndUpdateOrCreateGroup', () => {
  5. const groupId = new mongoose.Types.ObjectId();
  6. beforeAll(async() => {
  7. await ExternalUserGroup.create({
  8. _id: groupId, name: 'test group', externalId: 'testExternalId', provider: 'testProvider',
  9. });
  10. });
  11. it('finds and updates existing group', async() => {
  12. const group = await ExternalUserGroup.findAndUpdateOrCreateGroup('edited test group', 'testExternalId', 'testProvider');
  13. expect(group.id).toBe(groupId.toString());
  14. expect(group.name).toBe('edited test group');
  15. });
  16. it('creates new group with parent', async() => {
  17. expect(await ExternalUserGroup.count()).toBe(1);
  18. const newGroup = await ExternalUserGroup.findAndUpdateOrCreateGroup(
  19. 'new group', 'nonExistentExternalId', 'testProvider', undefined, groupId.toString(),
  20. );
  21. expect(await ExternalUserGroup.count()).toBe(2);
  22. expect(newGroup.parent.toString()).toBe(groupId.toString());
  23. });
  24. it('throws error when parent does not exist', async() => {
  25. try {
  26. await ExternalUserGroup.findAndUpdateOrCreateGroup(
  27. 'new group', 'nonExistentExternalId', 'testProvider', undefined, new mongoose.Types.ObjectId(),
  28. );
  29. }
  30. catch (e) {
  31. expect(e.message).toBe('Parent does not exist.');
  32. }
  33. });
  34. });
  35. describe('findGroupsWithAncestorsRecursively', () => {
  36. const childGroupId = new mongoose.Types.ObjectId();
  37. const parentGroupId = new mongoose.Types.ObjectId();
  38. const grandParentGroupId = new mongoose.Types.ObjectId();
  39. beforeAll(async() => {
  40. await ExternalUserGroup.deleteMany();
  41. await ExternalUserGroup.create({
  42. _id: grandParentGroupId, name: 'grand parent group', externalId: 'grandParentExternalId', provider: 'testProvider',
  43. });
  44. await ExternalUserGroup.create({
  45. _id: parentGroupId, name: 'parent group', externalId: 'parentExternalId', provider: 'testProvider', parent: grandParentGroupId,
  46. });
  47. await ExternalUserGroup.create({
  48. _id: childGroupId, name: 'child group', externalId: 'childExternalId', provider: 'testProvider', parent: parentGroupId,
  49. });
  50. });
  51. it('finds ancestors for child', async() => {
  52. const childGroup = await ExternalUserGroup.findById(childGroupId);
  53. const groups = await ExternalUserGroup.findGroupsWithAncestorsRecursively(childGroup);
  54. const groupIds = groups.map(group => group.id);
  55. expect(groupIds).toStrictEqual([grandParentGroupId.toString(), parentGroupId.toString(), childGroupId.toString()]);
  56. });
  57. it('finds ancestors for child, excluding child', async() => {
  58. const childGroup = await ExternalUserGroup.findById(childGroupId);
  59. const groups = await ExternalUserGroup.findGroupsWithAncestorsRecursively(childGroup, []);
  60. const groupIds = groups.map(group => group.id);
  61. expect(groupIds).toStrictEqual([grandParentGroupId.toString(), parentGroupId.toString()]);
  62. });
  63. });
  64. });