Taichi Masuyama 3 лет назад
Родитель
Сommit
f0140c7ec7

+ 0 - 1
packages/app/src/server/models/page.ts

@@ -1031,7 +1031,6 @@ export default (crowi): any => {
     if (shouldBeOnTree) {
       let isGrantNormalized = false;
       try {
-        // TODO: fix
         const shouldCheckDescendants = !options.overwriteScopesOfDescendants;
         isGrantNormalized = await pageGrantService.isGrantNormalized(user, pageData.path, grant, grantedUserIds, grantUserGroupId, shouldCheckDescendants);
       }

+ 2 - 1
packages/app/src/server/service/page-grant.ts

@@ -558,7 +558,8 @@ class PageGrantService {
       if (grantUserGroupId == null) {
         throw Error('The parameter `grantUserGroupId` is required.');
       }
-      const userIds = await UserGroup.findAllUserIdsForUserGroup(grantUserGroupId);
+      const UserGroupRelation = mongoose.model('UserGroupRelation') as any; // TODO: Typescriptize model
+      const userIds = await UserGroupRelation.findAllUserIdsForUserGroup(grantUserGroupId);
       updateGrantInfo = {
         grant: PageGrant.GRANT_USER_GROUP,
         grantedUserGroupInfo: {

+ 38 - 38
packages/app/test/integration/models/v5.page.test.js

@@ -138,7 +138,7 @@ describe('Page', () => {
         parent: rootPage._id,
       },
       {
-        path: '/gB_upod_1',
+        path: '/gAB_upod_1/gB_upod_1',
         grant: PageGrant.GRANT_USER_GROUP,
         creator: upodUserB,
         lastUpdateUser: upodUserB,
@@ -147,7 +147,7 @@ describe('Page', () => {
         parent: upodPageIdgAB1,
       },
       {
-        path: '/onlyB_upod_1',
+        path: '/gAB_upod_1/onlyB_upod_1',
         grant: PageGrant.GRANT_OWNER,
         creator: upodUserB,
         lastUpdateUser: upodUserB,
@@ -167,7 +167,7 @@ describe('Page', () => {
         parent: rootPage._id,
       },
       {
-        path: '/gA_upod_2',
+        path: '/public_upod_2/gA_upod_2',
         grant: PageGrant.GRANT_USER_GROUP,
         creator: upodUserA,
         lastUpdateUser: upodUserA,
@@ -176,7 +176,7 @@ describe('Page', () => {
         parent: upodPageIdPublic2,
       },
       {
-        path: '/gAIsolated_upod_2',
+        path: '/public_upod_2/gAIsolated_upod_2',
         grant: PageGrant.GRANT_USER_GROUP,
         creator: upodUserA,
         lastUpdateUser: upodUserA,
@@ -185,7 +185,7 @@ describe('Page', () => {
         parent: upodPageIdPublic2,
       },
       {
-        path: '/onlyA_upod_2',
+        path: '/public_upod_2/onlyA_upod_2',
         grant: PageGrant.GRANT_OWNER,
         creator: upodUserA,
         lastUpdateUser: upodUserA,
@@ -205,7 +205,7 @@ describe('Page', () => {
         parent: rootPage._id,
       },
       {
-        path: '/gAB_upod_3',
+        path: '/public_upod_3/gAB_upod_3',
         grant: PageGrant.GRANT_USER_GROUP,
         creator: upodUserA,
         lastUpdateUser: upodUserA,
@@ -214,7 +214,7 @@ describe('Page', () => {
         parent: upodPageIdPublic3,
       },
       {
-        path: '/gB_upod_3',
+        path: '/public_upod_3/gB_upod_3',
         grant: PageGrant.GRANT_USER_GROUP,
         creator: upodUserB,
         lastUpdateUser: upodUserB,
@@ -223,7 +223,7 @@ describe('Page', () => {
         parent: upodPageIdPublic3,
       },
       {
-        path: '/onlyB_upod_3',
+        path: '/public_upod_3/onlyB_upod_3',
         grant: PageGrant.GRANT_OWNER,
         creator: upodUserB,
         lastUpdateUser: upodUserB,
@@ -243,7 +243,7 @@ describe('Page', () => {
         parent: rootPage._id,
       },
       {
-        path: '/gA_upod_4',
+        path: '/public_upod_4/gA_upod_4',
         grant: PageGrant.GRANT_USER_GROUP,
         creator: upodUserA,
         lastUpdateUser: upodUserA,
@@ -252,7 +252,7 @@ describe('Page', () => {
         parent: upodPageIdPublic4,
       },
       {
-        path: '/gC_upod_4',
+        path: '/public_upod_4/gC_upod_4',
         grant: PageGrant.GRANT_USER_GROUP,
         creator: upodUserC,
         lastUpdateUser: upodUserC,
@@ -272,7 +272,7 @@ describe('Page', () => {
         parent: rootPage._id,
       },
       {
-        path: '/gA_upod_5',
+        path: '/public_upod_5/gA_upod_5',
         grant: PageGrant.GRANT_USER_GROUP,
         creator: upodUserA,
         lastUpdateUser: upodUserA,
@@ -281,7 +281,7 @@ describe('Page', () => {
         parent: upodPageIdPublic5,
       },
       {
-        path: '/onlyC_upod_5',
+        path: '/public_upod_5/onlyC_upod_5',
         grant: PageGrant.GRANT_OWNER,
         creator: upodUserC,
         lastUpdateUser: upodUserC,
@@ -301,7 +301,7 @@ describe('Page', () => {
         parent: rootPage._id,
       },
       {
-        path: '/onlyC_upod_6',
+        path: '/public_upod_6/onlyC_upod_6',
         grant: PageGrant.GRANT_OWNER,
         creator: upodUserC,
         lastUpdateUser: upodUserC,
@@ -1196,11 +1196,11 @@ describe('Page', () => {
 
 
   // see: https://dev.growi.org/635a314eac6bcd85cbf359fc about the specification
-  describe('updatePage with overwriteScopesOfDescendants true', () => {
+  describe.only('updatePage with overwriteScopesOfDescendants true', () => {
     test('(case 1) it should update all granted descendant pages when update grant is GRANT_PUBLIC', async() => {
       const upodPagegAB = await Page.findOne({ path: '/gAB_upod_1' });
-      const upodPagegB = await Page.findOne({ path: '/gB_upod_1' });
-      const upodPageonlyB = await Page.findOne({ path: '/onlyB_upod_1' });
+      const upodPagegB = await Page.findOne({ path: '/gAB_upod_1/gB_upod_1' });
+      const upodPageonlyB = await Page.findOne({ path: '/gAB_upod_1/onlyB_upod_1' });
 
       expect(upodPagegAB).not.toBeNull();
       expect(upodPagegB).not.toBeNull();
@@ -1217,8 +1217,8 @@ describe('Page', () => {
       };
       const updatedPage = await Page.updatePage(upodPagegAB, 'newRevisionBody', 'oldRevisionBody', upodUserA, options);
 
-      const upodPagegBUpdated = await Page.findOne({ path: '/gB_upod_1' });
-      const upodPageonlyBUpdated = await Page.findOne({ path: '/onlyB_upod_1' });
+      const upodPagegBUpdated = await Page.findOne({ path: '/gAB_upod_1/gB_upod_1' });
+      const upodPageonlyBUpdated = await Page.findOne({ path: '/gAB_upod_1/onlyB_upod_1' });
 
       // Changed
       const newGrant = PageGrant.GRANT_PUBLIC;
@@ -1231,9 +1231,9 @@ describe('Page', () => {
     });
     test('(case 2) it should update all granted descendant pages when all descendant pages are granted by the operator', async() => {
       const upodPagePublic = await Page.findOne({ path: '/public_upod_2' });
-      const upodPagegA = await Page.findOne({ path: '/gA_upod_2' });
-      const upodPagegAIsolated = await Page.findOne({ path: '/gAIsolated_upod_2' });
-      const upodPageonlyA = await Page.findOne({ path: '/onlyA_upod_2' });
+      const upodPagegA = await Page.findOne({ path: '/public_upod_2/gA_upod_2' });
+      const upodPagegAIsolated = await Page.findOne({ path: '/public_upod_2/gAIsolated_upod_2' });
+      const upodPageonlyA = await Page.findOne({ path: '/public_upod_2/onlyA_upod_2' });
 
       expect(upodPagePublic).not.toBeNull();
       expect(upodPagegA).not.toBeNull();
@@ -1252,9 +1252,9 @@ describe('Page', () => {
       };
       const updatedPage = await Page.updatePage(upodPagePublic, 'newRevisionBody', 'oldRevisionBody', upodUserA, options);
 
-      const upodPagegAUpdated = await Page.findOne({ path: '/gA_upod_2' });
-      const upodPagegAIsolatedUpdated = await Page.findOne({ path: '/gAIsolated_upod_2' });
-      const upodPageonlyAUpdated = await Page.findOne({ path: '/onlyA_upod_2' });
+      const upodPagegAUpdated = await Page.findOne({ path: '/public_upod_2/gA_upod_2' });
+      const upodPagegAIsolatedUpdated = await Page.findOne({ path: '/public_upod_2/gAIsolated_upod_2' });
+      const upodPageonlyAUpdated = await Page.findOne({ path: '/public_upod_2/onlyA_upod_2' });
 
       // Changed
       const newGrant = PageGrant.GRANT_OWNER;
@@ -1272,9 +1272,9 @@ describe('Page', () => {
     , all user groups of descendants are the children or itself of the update user group
     , and all users of descendants belong to the update user group`, async() => {
       const upodPagePublic = await Page.findOne({ path: '/public_upod_3' });
-      const upodPagegAB = await Page.findOne({ path: '/gAB_upod_3' });
-      const upodPagegB = await Page.findOne({ path: '/gB_upod_3' });
-      const upodPageonlyB = await Page.findOne({ path: '/onlyB_upod_3' });
+      const upodPagegAB = await Page.findOne({ path: '/public_upod_3/gAB_upod_3' });
+      const upodPagegB = await Page.findOne({ path: '/public_upod_3/gB_upod_3' });
+      const upodPageonlyB = await Page.findOne({ path: '/public_upod_3/onlyB_upod_3' });
 
       expect(upodPagePublic).not.toBeNull();
       expect(upodPagegAB).not.toBeNull();
@@ -1294,9 +1294,9 @@ describe('Page', () => {
       };
       const updatedPage = await Page.updatePage(upodPagePublic, 'newRevisionBody', 'oldRevisionBody', upodUserA, options);
 
-      const upodPagegABUpdated = await Page.findOne({ path: '/gAB_upod_3' });
-      const upodPagegBUpdated = await Page.findOne({ path: '/gB_upod_3' });
-      const upodPageonlyBUpdated = await Page.findOne({ path: '/onlyB_upod_3' });
+      const upodPagegABUpdated = await Page.findOne({ path: '/public_upod_3/gAB_upod_3' });
+      const upodPagegBUpdated = await Page.findOne({ path: '/public_upod_3/gB_upod_3' });
+      const upodPageonlyBUpdated = await Page.findOne({ path: '/public_upod_3/onlyB_upod_3' });
 
       // Changed
       const newGrant = PageGrant.GRANT_USER_GROUP;
@@ -1315,8 +1315,8 @@ describe('Page', () => {
     , update grant is GRANT_USER_GROUP
     , and some of user groups of descendants are not children or itself of the update user group`, async() => {
       const upodPagePublic = await Page.findOne({ path: '/public_upod_4' });
-      const upodPagegA = await Page.findOne({ path: '/gA_upod_4' });
-      const upodPagegC = await Page.findOne({ path: '/gC_upod_4' });
+      const upodPagegA = await Page.findOne({ path: '/public_upod_4/gA_upod_4' });
+      const upodPagegC = await Page.findOne({ path: '/public_upod_4/gC_upod_4' });
 
       expect(upodPagePublic).not.toBeNull();
       expect(upodPagegA).not.toBeNull();
@@ -1334,14 +1334,14 @@ describe('Page', () => {
       };
       const updatedPagePromise = Page.updatePage(upodPagePublic, 'newRevisionBody', 'oldRevisionBody', upodUserA, options);
 
-      await expect(updatedPagePromise).toThrowError();
+      await expect(updatedPagePromise).rejects.toThrowError();
     });
     test(`(case 5) it should throw when some of descendants is not granted
     , update grant is GRANT_USER_GROUP
     , and some of users of descendants does NOT belong to the update user group`, async() => {
       const upodPagePublic = await Page.findOne({ path: '/public_upod_5' });
-      const upodPagegA = await Page.findOne({ path: '/gA_upod_5' });
-      const upodPageonlyC = await Page.findOne({ path: '/onlyC_upod_5' });
+      const upodPagegA = await Page.findOne({ path: '/public_upod_5/gA_upod_5' });
+      const upodPageonlyC = await Page.findOne({ path: '/public_upod_5/onlyC_upod_5' });
 
       expect(upodPagePublic).not.toBeNull();
       expect(upodPagegA).not.toBeNull();
@@ -1359,11 +1359,11 @@ describe('Page', () => {
       };
       const updatedPagePromise = Page.updatePage(upodPagePublic, 'newRevisionBody', 'oldRevisionBody', upodUserA, options);
 
-      await expect(updatedPagePromise).toThrowError();
+      await expect(updatedPagePromise).rejects.toThrowError();
     });
     test('(case 6) it should throw when some of descendants is not granted and update grant is GRANT_OWNER', async() => {
       const upodPagePublic = await Page.findOne({ path: '/public_upod_6' });
-      const upodPageonlyC = await Page.findOne({ path: '/onlyC_upod_6' });
+      const upodPageonlyC = await Page.findOne({ path: '/public_upod_6/onlyC_upod_6' });
 
       expect(upodPagePublic).not.toBeNull();
       expect(upodPageonlyC).not.toBeNull();
@@ -1379,7 +1379,7 @@ describe('Page', () => {
       };
       const updatedPagePromise = Page.updatePage(upodPagePublic, 'newRevisionBody', 'oldRevisionBody', upodUserA, options);
 
-      await expect(updatedPagePromise).toThrowError();
+      await expect(updatedPagePromise).rejects.toThrowError();
     });
   });
 });