Taichi Masuyama 4 лет назад
Родитель
Сommit
fd0ee51a15

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

@@ -1945,7 +1945,8 @@ class PageService {
 
 
     await streamToPromise(migratePagesStream);
     await streamToPromise(migratePagesStream);
 
 
-    if (await Page.exists(filter) && shouldContinue) {
+    const existsFilter = { $and: [...grantFilter.$and, ...filter.$and] };
+    if (await Page.exists(existsFilter) && shouldContinue) {
       return this.normalizeParentRecursively(grant, regexps, publicOnly);
       return this.normalizeParentRecursively(grant, regexps, publicOnly);
     }
     }
 
 

+ 18 - 0
packages/app/src/test/integration/service/v5-migration.test.js

@@ -5,6 +5,7 @@ const { getInstance } = require('../setup-crowi');
 describe('V5 page migration', () => {
 describe('V5 page migration', () => {
   let crowi;
   let crowi;
   let Page;
   let Page;
+  let User;
 
 
   let testUser1;
   let testUser1;
 
 
@@ -13,6 +14,10 @@ describe('V5 page migration', () => {
 
 
     crowi = await getInstance();
     crowi = await getInstance();
     Page = mongoose.model('Page');
     Page = mongoose.model('Page');
+    User = mongoose.model('User');
+
+    await User.insertMany([{ name: 'testUser1', username: 'testUser1', email: 'testUser1@example.com' }]);
+    testUser1 = await User.findOne({ username: 'testUser1' });
   });
   });
 
 
 
 
@@ -22,29 +27,39 @@ describe('V5 page migration', () => {
 
 
       // initialize pages for test
       // initialize pages for test
       const pages = await Page.insertMany([
       const pages = await Page.insertMany([
+        {
+          path: '/',
+          grant: Page.GRANT_PUBLIC,
+          creator: testUser1,
+          lastUpdateUser: testUser1,
+        },
         {
         {
           path: '/private1',
           path: '/private1',
           grant: Page.GRANT_OWNER,
           grant: Page.GRANT_OWNER,
           creator: testUser1,
           creator: testUser1,
           lastUpdateUser: testUser1,
           lastUpdateUser: testUser1,
+          grantedUsers: [testUser1._id],
         },
         },
         {
         {
           path: '/dummyParent/private1',
           path: '/dummyParent/private1',
           grant: Page.GRANT_OWNER,
           grant: Page.GRANT_OWNER,
           creator: testUser1,
           creator: testUser1,
           lastUpdateUser: testUser1,
           lastUpdateUser: testUser1,
+          grantedUsers: [testUser1._id],
         },
         },
         {
         {
           path: '/dummyParent/private1/private2',
           path: '/dummyParent/private1/private2',
           grant: Page.GRANT_OWNER,
           grant: Page.GRANT_OWNER,
           creator: testUser1,
           creator: testUser1,
           lastUpdateUser: testUser1,
           lastUpdateUser: testUser1,
+          grantedUsers: [testUser1._id],
         },
         },
         {
         {
           path: '/dummyParent/private1/private3',
           path: '/dummyParent/private1/private3',
           grant: Page.GRANT_OWNER,
           grant: Page.GRANT_OWNER,
           creator: testUser1,
           creator: testUser1,
           lastUpdateUser: testUser1,
           lastUpdateUser: testUser1,
+          grantedUsers: [testUser1._id],
         },
         },
       ]);
       ]);
 
 
@@ -67,6 +82,7 @@ describe('V5 page migration', () => {
   });
   });
 
 
   describe('v5InitialMigration()', () => {
   describe('v5InitialMigration()', () => {
+    jest.setTimeout(100000);
     let createPagePaths;
     let createPagePaths;
     let allPossiblePagePaths;
     let allPossiblePagePaths;
     beforeAll(async() => {
     beforeAll(async() => {
@@ -88,6 +104,7 @@ describe('V5 page migration', () => {
           grant: Page.GRANT_OWNER,
           grant: Page.GRANT_OWNER,
           creator: testUser1,
           creator: testUser1,
           lastUpdateUser: testUser1,
           lastUpdateUser: testUser1,
+          grantedUsers: [testUser1._id],
         },
         },
         {
         {
           path: '/publicA/privateB/publicC',
           path: '/publicA/privateB/publicC',
@@ -122,6 +139,7 @@ describe('V5 page migration', () => {
 
 
       // migrate
       // migrate
       await crowi.pageService.v5InitialMigration(Page.GRANT_PUBLIC);
       await crowi.pageService.v5InitialMigration(Page.GRANT_PUBLIC);
+      jest.setTimeout(30000);
     });
     });
 
 
     test('should migrate all public pages', async() => {
     test('should migrate all public pages', async() => {