Просмотр исходного кода

Merge pull request #3355 from weseek/imprv/4685-4990-impl-test-for-deleteDescendants

Imprv/4685 4990 impl test for delete descendants
itizawa 5 лет назад
Родитель
Сommit
ffae9cdc55
2 измененных файлов с 30 добавлено и 6 удалено
  1. 8 3
      src/server/service/page.js
  2. 22 3
      src/test/service/page.test.js

+ 8 - 3
src/server/service/page.js

@@ -432,35 +432,40 @@ class PageService {
 
     const deletePageBulkOp = pageCollection.initializeUnorderedBulkOp();
     const updateRevisionListOp = revisionCollection.initializeUnorderedBulkOp();
+    const createRediectRevisionBulkOp = revisionCollection.initializeUnorderedBulkOp();
     const newPagesForRedirect = [];
 
     pages.forEach((page) => {
       const newPath = Page.getDeletedPageName(page.path);
+      const revisionId = new mongoose.Types.ObjectId();
       const body = `redirect ${newPath}`;
 
       deletePageBulkOp.find({ _id: page._id }).update({
         $set: {
-          path: newPath, status: Page.STATUS_DELETED, deleteUser: user._id, deletedAt: new Date(),
+          path: newPath, status: Page.STATUS_DELETED, deleteUser: user._id, deletedAt: Date.now(),
         },
       });
       updateRevisionListOp.find({ path: page.path }).update({ $set: { path: newPath } });
+      createRediectRevisionBulkOp.insert({
+        _id: revisionId, path: page.path, body, author: user._id, format: 'markdown',
+      });
 
       newPagesForRedirect.push({
         path: page.path,
-        body,
         creator: user._id,
         grant: page.grant,
         grantedGroup: page.grantedGroup,
         grantedUsers: page.grantedUsers,
         lastUpdateUser: user._id,
         redirectTo: newPath,
-        revision: null,
+        revision: revisionId,
       });
     });
 
     try {
       await deletePageBulkOp.execute();
       await updateRevisionListOp.execute();
+      await createRediectRevisionBulkOp.execute();
       await Page.insertMany(newPagesForRedirect, { ordered: false });
     }
     catch (err) {

+ 22 - 3
src/test/service/page.test.js

@@ -22,13 +22,14 @@ let parentForDuplicate;
 let parentForDelete1;
 let parentForDelete2;
 
+let childForDelete;
+
 let parentForDeleteCompletely;
 
 let parentForRevert1;
 let parentForRevert2;
 
 let childForDuplicate;
-let childForDelete;
 let childForDeleteCompletely;
 
 let childForRevert;
@@ -518,8 +519,26 @@ describe('PageService', () => {
     });
 
 
-    test('deleteDescendants()', () => {
-      expect(3).toBe(3);
+    test('deleteDescendants', async() => {
+      await crowi.pageService.deleteDescendants([childForDelete], testUser2);
+      const resultPage = await Page.findOne({ path: '/trash/parentForDelete/child' });
+      const redirectedFromPage = await Page.findOne({ path: '/parentForDelete/child' });
+      const redirectedFromPageRevision = await Revision.findOne({ path: '/parentForDelete/child' });
+
+      expect(resultPage.status).toBe(Page.STATUS_DELETED);
+      expect(resultPage.path).toBe('/trash/parentForDelete/child');
+      expect(resultPage.deleteUser).toEqual(testUser2._id);
+      expect(resultPage.deletedAt).toEqual(dateToUse);
+      expect(resultPage.updatedAt).toEqual(childForDelete.updatedAt);
+      expect(resultPage.lastUpdateUser).toEqual(testUser1._id);
+
+      expect(redirectedFromPage).not.toBeNull();
+      expect(redirectedFromPage.path).toBe('/parentForDelete/child');
+      expect(redirectedFromPage.redirectTo).toBe('/trash/parentForDelete/child');
+
+      expect(redirectedFromPageRevision).not.toBeNull();
+      expect(redirectedFromPageRevision.path).toBe('/parentForDelete/child');
+      expect(redirectedFromPageRevision.body).toBe('redirect /trash/parentForDelete/child');
     });
   });