yohei0125 vor 4 Jahren
Ursprung
Commit
b308b7bd17
1 geänderte Dateien mit 61 neuen und 0 gelöschten Zeilen
  1. 61 0
      packages/app/test/integration/service/pagev5.test.ts

+ 61 - 0
packages/app/test/integration/service/pagev5.test.ts

@@ -49,6 +49,7 @@ describe('PageService page operations with only public pages', () => {
   let v5PageForDuplicate4;
   let v5PageForDuplicate5;
   let v5PageForDuplicate6;
+  let v5PageForDuplicate7;
 
   let tag1;
   let tag2;
@@ -263,6 +264,9 @@ describe('PageService page operations with only public pages', () => {
     const duplicatePageId10 = new mongoose.Types.ObjectId();
     const duplicatePageId11 = new mongoose.Types.ObjectId();
     const duplicatePageId12 = new mongoose.Types.ObjectId();
+    const duplicatePageId13 = new mongoose.Types.ObjectId();
+    const duplicatePageId14 = new mongoose.Types.ObjectId();
+    const duplicatePageId15 = new mongoose.Types.ObjectId();
 
     // revision ids
     const revisionId1 = new mongoose.Types.ObjectId();
@@ -275,6 +279,8 @@ describe('PageService page operations with only public pages', () => {
     const revisionId8 = new mongoose.Types.ObjectId();
     const revisionId9 = new mongoose.Types.ObjectId();
     const revisionId10 = new mongoose.Types.ObjectId();
+    const revisionId11 = new mongoose.Types.ObjectId();
+    const revisionId12 = new mongoose.Types.ObjectId();
 
     await Page.insertMany([
       {
@@ -372,6 +378,31 @@ describe('PageService page operations with only public pages', () => {
         parent: rootPage._id,
         revision: revisionId9,
       },
+      {
+        _id: duplicatePageId13,
+        path: '/v5_empty_PageForDuplicate7',
+        grant: Page.GRANT_PUBLIC,
+        parent: rootPage._id,
+        isEmpty: true,
+      },
+      {
+        _id: duplicatePageId14,
+        path: '/v5_empty_PageForDuplicate7/v5_child_PageForDuplicate7',
+        grant: Page.GRANT_PUBLIC,
+        creator: dummyUser1,
+        lastUpdateUser: dummyUser1._id,
+        parent: duplicatePageId13,
+        revision: revisionId11,
+      },
+      {
+        _id: duplicatePageId15,
+        path: '/v5_empty_PageForDuplicate7/v5_child_PageForDuplicate7/v5_grandchild_PageForDuplicate7',
+        grant: Page.GRANT_PUBLIC,
+        creator: dummyUser1,
+        lastUpdateUser: dummyUser1._id,
+        parent: duplicatePageId14,
+        revision: revisionId12,
+      },
     ]);
 
     // Revision
@@ -446,6 +477,20 @@ describe('PageService page operations with only public pages', () => {
         pageId: duplicatePageId12,
         author: dummyUser1,
       },
+      {
+        _id: revisionId11,
+        body: '/v5_child_PageForDuplicate7',
+        format: 'markdown',
+        pageId: duplicatePageId14,
+        author: dummyUser1,
+      },
+      {
+        _id: revisionId12,
+        body: '/v5_grandchild_PageForDuplicate7',
+        format: 'markdown',
+        pageId: duplicatePageId15,
+        author: dummyUser1,
+      },
     ]);
     v5PageForDuplicate1 = await Page.findOne({ path: '/v5_PageForDuplicate1' });
     v5PageForDuplicate2 = await Page.findOne({ path: '/v5_PageForDuplicate2' });
@@ -453,6 +498,7 @@ describe('PageService page operations with only public pages', () => {
     v5PageForDuplicate4 = await Page.findOne({ path: '/v5_PageForDuplicate4' });
     v5PageForDuplicate5 = await Page.findOne({ path: '/v5_PageForDuplicate5' });
     v5PageForDuplicate6 = await Page.findOne({ path: '/v5_PageForDuplicate6' });
+    v5PageForDuplicate7 = await Page.findOne({ path: '/v5_empty_PageForDuplicate7' });
 
     await Tag.insertMany([
       { name: 'Tag1' },
@@ -715,6 +761,21 @@ describe('PageService page operations with only public pages', () => {
       expect(comments.length).toBe(1);
       expect(duplicatedComments.length).toBe(0);
     });
+
+    test('Should duplicate empty page with descendants', async() => {
+      const newPagePath = '/duplicatedv5EmptyPageForDuplicate7';
+      const basePageChild = await Page.findOne({ parent: v5PageForDuplicate7._id }).populate({ path: 'revision', model: 'Revision' });
+      const basePageGrandhild = await Page.findOne({ parent: basePageChild._id }).populate({ path: 'revision', model: 'Revision' });
+      const duplicatedPage = await duplicate(v5PageForDuplicate7, newPagePath, dummyUser1, true);
+      const duplicatedChild = await Page.findOne({ parent: duplicatedPage._id }).populate({ path: 'revision', model: 'Revision' });
+      const duplicatedGrandchild = await Page.findOne({ parent: duplicatedChild._id }).populate({ path: 'revision', model: 'Revision' });
+
+      expect(xssSpy).toHaveBeenCalled();
+      expect(duplicatedPage.path).toBe(newPagePath);
+      expect(duplicatedPage.isEmpty).toBe(true);
+      expect(basePageChild.revision.body).toBe(duplicatedChild.revision.body);
+      expect(basePageGrandhild.revision.body).toBe(duplicatedGrandchild.revision.body);
+    });
   });
 
   afterAll(async() => {