Browse Source

add test data for testing ExternalUserGroup and grantedGroups

Futa Arai 2 years ago
parent
commit
c84cace000

+ 58 - 24
apps/app/test/integration/models/v5.page.test.js

@@ -151,7 +151,10 @@ describe('Page', () => {
       },
     ]);
 
-    // ExternalUserGroups
+    // Insert ExternalUserGroups with the same group structure as UserGroups
+    // Use to test
+    //   - ExternalUserGroup
+    //   - Case of multiple grantedGroups for Page
     await ExternalUserGroup.insertMany([
       {
         _id: upodExternalUserGroupIdAB,
@@ -433,6 +436,14 @@ describe('Page', () => {
     ]);
   };
 
+  // normalize for result comparison
+  const normalizeGrantedGroups = (grantedGroups) => {
+    return grantedGroups.map((group) => {
+      const itemId = typeof group.item === 'string' ? group.item : group.item._id;
+      return { item: itemId, type: group.type };
+    });
+  };
+
   beforeAll(async() => {
     crowi = await getInstance();
     pageGrantService = crowi.pageGrantService;
@@ -550,6 +561,10 @@ describe('Page', () => {
       },
     ]);
 
+    // Insert ExternalUserGroups with the same group structure as UserGroups
+    // Use to test
+    //   - ExternalUserGroup
+    //   - Case of multiple grantedGroups for Page
     externalUserGroupIdPModelIsolate = new mongoose.Types.ObjectId();
     externalUserGroupIdPModelA = new mongoose.Types.ObjectId();
     externalUserGroupIdPModelB = new mongoose.Types.ObjectId();
@@ -1199,12 +1214,14 @@ describe('Page', () => {
           expect(_page1).toBeTruthy();
           expect(_page2).toBeTruthy();
 
+          const newGrantedGroups = [
+            { item: userGroupIdPModelA, type: GroupType.userGroup },
+            { item: externalUserGroupIdPModelA, type: GroupType.externalUserGroup },
+          ];
+
           const options = {
             grant: Page.GRANT_USER_GROUP,
-            grantUserGroupIds: [
-              { item: userGroupIdPModelA, type: GroupType.userGroup },
-              { item: externalUserGroupIdPModelA, type: GroupType.externalUserGroup },
-            ],
+            grantUserGroupIds: newGrantedGroups,
           };
           const updatedPage = await updatePage(_page2, 'new', 'old', pModelUser1, options); // from GRANT_PUBLIC to GRANT_USER_GROUP(userGroupIdPModelA)
 
@@ -1217,7 +1234,7 @@ describe('Page', () => {
 
           // check page2 grant and group
           expect(page2.grant).toBe(Page.GRANT_USER_GROUP);
-          expect(page2.grantedGroups.map(g => g.item)).toStrictEqual([userGroupIdPModelA, externalUserGroupIdPModelA]);
+          expect(normalizeGrantedGroups(page2.grantedGroups)).toStrictEqual(newGrantedGroups);
         });
 
         test('successfully change to GRANT_USER_GROUP from GRANT_RESTRICTED if parent page is GRANT_PUBLIC', async() => {
@@ -1227,12 +1244,14 @@ describe('Page', () => {
           const _page1 = await Page.findOne({ path: _path1, grant: Page.GRANT_RESTRICTED });
           expect(_page1).toBeTruthy();
 
+          const newGrantedGroups = [
+            { item: userGroupIdPModelA, type: GroupType.userGroup },
+            { item: externalUserGroupIdPModelA, type: GroupType.externalUserGroup },
+          ];
+
           const options = {
             grant: Page.GRANT_USER_GROUP,
-            grantUserGroupIds: [
-              { item: userGroupIdPModelA, type: GroupType.userGroup },
-              { item: externalUserGroupIdPModelA, type: GroupType.externalUserGroup },
-            ],
+            grantUserGroupIds: newGrantedGroups,
           };
           const updatedPage = await updatePage(_page1, 'new', 'old', pModelUser1, options); // from GRANT_RESTRICTED to GRANT_USER_GROUP(userGroupIdPModelA)
 
@@ -1243,7 +1262,7 @@ describe('Page', () => {
 
           // updated page
           expect(page1.grant).toBe(Page.GRANT_USER_GROUP);
-          expect(page1.grantedGroups.map(g => g.item)).toStrictEqual([userGroupIdPModelA, externalUserGroupIdPModelA]);
+          expect(normalizeGrantedGroups(page1.grantedGroups)).toStrictEqual(newGrantedGroups);
 
           // parent's grant check
           const parent = await Page.findById(page1.parent);
@@ -1263,12 +1282,14 @@ describe('Page', () => {
           expect(_page1).toBeTruthy();
           expect(_page2).toBeTruthy();
 
+          const newGrantedGroups = [
+            { item: userGroupIdPModelA, type: GroupType.userGroup },
+            { item: externalUserGroupIdPModelA, type: GroupType.externalUserGroup },
+          ];
+
           const options = {
             grant: Page.GRANT_USER_GROUP,
-            grantUserGroupIds: [
-              { item: userGroupIdPModelA, type: GroupType.userGroup },
-              { item: externalUserGroupIdPModelA, type: GroupType.externalUserGroup },
-            ],
+            grantUserGroupIds: newGrantedGroups,
           };
           const updatedPage = await updatePage(_page2, 'new', 'old', pModelUser1, options); // from GRANT_OWNER to GRANT_USER_GROUP(userGroupIdPModelA)
 
@@ -1281,7 +1302,7 @@ describe('Page', () => {
 
           // grant check
           expect(page2.grant).toBe(Page.GRANT_USER_GROUP);
-          expect(page2.grantedGroups.map(g => g.item)).toStrictEqual([userGroupIdPModelA, externalUserGroupIdPModelA]);
+          expect(normalizeGrantedGroups(page2.grantedGroups)).toStrictEqual(newGrantedGroups);
           expect(page2.grantedUsers.length).toBe(0);
         });
       });
@@ -1298,10 +1319,16 @@ describe('Page', () => {
           expect(_page1).toBeTruthy();
           expect(_page2).toBeTruthy();
 
-          const options = { grant: Page.GRANT_USER_GROUP, grantUserGroupIds: [{ item: userGroupIdPModelB, type: GroupType.userGroup }] };
-
           // First round
           // Group relation(parent -> child): userGroupIdPModelA -> userGroupIdPModelB -> userGroupIdPModelC
+          const newGrantedGroups = [
+            { item: userGroupIdPModelB, type: GroupType.userGroup },
+            { item: externalUserGroupIdPModelB, type: GroupType.externalUserGroup },
+          ];
+          const options = {
+            grant: Page.GRANT_USER_GROUP,
+            grantUserGroupIds: newGrantedGroups,
+          };
           const updatedPage = await updatePage(_page2, 'new', 'old', pModelUser3, options); // from GRANT_OWNER to GRANT_USER_GROUP(userGroupIdPModelB)
 
           const page1 = await Page.findById(_page1._id);
@@ -1312,12 +1339,16 @@ describe('Page', () => {
           expect(updatedPage._id).toStrictEqual(page2._id);
 
           expect(page2.grant).toBe(Page.GRANT_USER_GROUP);
-          expect(page2.grantedGroups.map(g => g.item)).toStrictEqual([userGroupIdPModelB]);
+          expect(normalizeGrantedGroups(page2.grantedGroups)).toStrictEqual(newGrantedGroups);
           expect(page2.grantedUsers.length).toBe(0);
 
           // Second round
           // Update group to groupC which is a grandchild from pageA's point of view
-          const secondRoundOptions = { grant: Page.GRANT_USER_GROUP, grantUserGroupIds: [{ item: userGroupIdPModelC, type: GroupType.userGroup }] }; // from GRANT_USER_GROUP(userGroupIdPModelB) to GRANT_USER_GROUP(userGroupIdPModelC)
+          const secondRoundNewGrantedGroups = [
+            { item: userGroupIdPModelC, type: GroupType.userGroup },
+            { item: externalUserGroupIdPModelC, type: GroupType.externalUserGroup },
+          ];
+          const secondRoundOptions = { grant: Page.GRANT_USER_GROUP, grantUserGroupIds: secondRoundNewGrantedGroups }; // from GRANT_USER_GROUP(userGroupIdPModelB) to GRANT_USER_GROUP(userGroupIdPModelC)
           // undo grantedGroups populate to prevent Page.hydrate error
           _page2.grantedGroups.forEach((group) => {
             group.item = group.item._id;
@@ -1326,7 +1357,7 @@ describe('Page', () => {
 
           expect(secondRoundUpdatedPage).toBeTruthy();
           expect(secondRoundUpdatedPage.grant).toBe(Page.GRANT_USER_GROUP);
-          expect(secondRoundUpdatedPage.grantedGroups.map(g => g.item._id)).toStrictEqual([userGroupIdPModelC]);
+          expect(normalizeGrantedGroups(secondRoundUpdatedPage.grantedGroups)).toStrictEqual(secondRoundNewGrantedGroups);
         });
         test('Fail to change to GRANT_USER_GROUP if the group to set is NOT the child or descendant of the parent page group', async() => {
           // path
@@ -1540,11 +1571,14 @@ describe('Page', () => {
 
       // Changed
       const newGrant = PageGrant.GRANT_USER_GROUP;
-      const newGrantedGroups = [upodUserGroupIdAB, upodExternalUserGroupIdAB];
+      const newGrantedGroups = [
+        { item: upodUserGroupIdAB, type: GroupType.userGroup },
+        { item: upodExternalUserGroupIdAB, type: GroupType.externalUserGroup },
+      ];
       expect(updatedPage.grant).toBe(newGrant);
-      expect(updatedPage.grantedGroups.map(g => g.item._id)).toStrictEqual(newGrantedGroups);
+      expect(normalizeGrantedGroups(updatedPage.grantedGroups)).toStrictEqual(newGrantedGroups);
       expect(upodPagegABUpdated.grant).toBe(newGrant);
-      expect(upodPagegABUpdated.grantedGroups.map(g => g.item)).toStrictEqual(newGrantedGroups);
+      expect(normalizeGrantedGroups(upodPagegABUpdated.grantedGroups)).toStrictEqual(newGrantedGroups);
       // Not changed
       expect(upodPagegBUpdated.grant).toBe(PageGrant.GRANT_USER_GROUP);
       expect(upodPagegBUpdated.grantedGroups).toStrictEqual(upodPagegB.grantedGroups);

+ 18 - 14
apps/app/test/integration/service/v5.non-public-page.test.ts

@@ -100,10 +100,11 @@ describe('PageService page operations with non-public pages', () => {
     return createdPage;
   };
 
+  // normalize for result comparison
   const normalizeGrantedGroups = (grantedGroups: GrantedGroup[]) => {
-    return JSON.parse(JSON.stringify(grantedGroups)).map((group) => {
-      delete group._id;
-      return group;
+    return grantedGroups.map((group) => {
+      const itemId = typeof group.item === 'string' ? group.item : group.item._id;
+      return { item: itemId, type: group.type };
     });
   };
 
@@ -203,7 +204,10 @@ describe('PageService page operations with non-public pages', () => {
       },
     ]);
 
-    // same group structure as user groups for external user groups
+    // Insert ExternalUserGroups with the same group structure as UserGroups
+    // Use to test
+    //   - ExternalUserGroup
+    //   - Case of multiple grantedGroups for Page
     externalGroupIdIsolate = new mongoose.Types.ObjectId();
     externalGroupIdA = new mongoose.Types.ObjectId();
     externalGroupIdB = new mongoose.Types.ObjectId();
@@ -1145,12 +1149,12 @@ describe('PageService page operations with non-public pages', () => {
       expect(duplicatedRevision1).toBeTruthy();
       expect(duplicatedRevision2).toBeTruthy();
       expect(normalizeGrantedGroups(duplicatedPage1.grantedGroups)).toStrictEqual([
-        { item: groupIdA.toString(), type: GroupType.userGroup },
-        { item: externalGroupIdA.toString(), type: GroupType.externalUserGroup },
+        { item: groupIdA, type: GroupType.userGroup },
+        { item: externalGroupIdA, type: GroupType.externalUserGroup },
       ]);
       expect(normalizeGrantedGroups(duplicatedPage2.grantedGroups)).toStrictEqual([
-        { item: groupIdB.toString(), type: GroupType.userGroup },
-        { item: externalGroupIdB.toString(), type: GroupType.externalUserGroup },
+        { item: groupIdB, type: GroupType.userGroup },
+        { item: externalGroupIdB, type: GroupType.externalUserGroup },
       ]);
       expect(duplicatedPage1.parent).toStrictEqual(_page1.parent);
       expect(duplicatedPage2.parent).toStrictEqual(duplicatedPage1._id);
@@ -1457,8 +1461,8 @@ describe('PageService page operations with non-public pages', () => {
       expect(revertedPage.status).toBe(Page.STATUS_PUBLISHED);
       expect(revertedPage.grant).toBe(Page.GRANT_USER_GROUP);
       expect(normalizeGrantedGroups(revertedPage.grantedGroups)).toStrictEqual([
-        { item: groupIdA.toString(), type: GroupType.userGroup },
-        { item: externalGroupIdA.toString(), type: GroupType.externalUserGroup },
+        { item: groupIdA, type: GroupType.userGroup },
+        { item: externalGroupIdA, type: GroupType.externalUserGroup },
       ]);
       expect(pageTagRelation.isPageTrashed).toBe(false);
     });
@@ -1542,12 +1546,12 @@ describe('PageService page operations with non-public pages', () => {
       expect(revertedPage2.status).toBe(Page.STATUS_PUBLISHED);
       expect(newlyCreatedPage.status).toBe(Page.STATUS_PUBLISHED);
       expect(normalizeGrantedGroups(revertedPage1.grantedGroups)).toStrictEqual([
-        { item: groupIdA.toString(), type: GroupType.userGroup },
-        { item: externalGroupIdA.toString(), type: GroupType.externalUserGroup },
+        { item: groupIdA, type: GroupType.userGroup },
+        { item: externalGroupIdA, type: GroupType.externalUserGroup },
       ]);
       expect(normalizeGrantedGroups(revertedPage2.grantedGroups)).toStrictEqual([
-        { item: groupIdB.toString(), type: GroupType.userGroup },
-        { item: externalGroupIdB.toString(), type: GroupType.externalUserGroup },
+        { item: groupIdB, type: GroupType.userGroup },
+        { item: externalGroupIdB, type: GroupType.externalUserGroup },
       ]);
       expect(newlyCreatedPage.grant).toBe(Page.GRANT_PUBLIC);