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

Merge pull request #4252 from overleaf/em-active-projects-expire

Prevent active projects from expiring

GitOrigin-RevId: b815ef2022470cc1ec4dc47fb1b13563b230814f
Eric Mc Sween 5 лет назад
Родитель
Сommit
8462a3e1f5

+ 10 - 0
services/web/app/src/Features/Project/ProjectDeleter.js

@@ -342,6 +342,16 @@ async function undeleteProject(projectId, options = {}) {
 
 
 async function expireDeletedProject(projectId) {
 async function expireDeletedProject(projectId) {
   try {
   try {
+    const activeProject = await Project.findById(projectId).exec()
+    if (activeProject) {
+      // That project is active. The deleted project record might be there
+      // because of an incomplete delete or undelete operation. Clean it up and
+      // return.
+      await DeletedProject.deleteOne({
+        'deleterData.deletedProjectId': projectId,
+      })
+      return
+    }
     const deletedProject = await DeletedProject.findOne({
     const deletedProject = await DeletedProject.findOne({
       'deleterData.deletedProjectId': projectId,
       'deleterData.deletedProjectId': projectId,
     }).exec()
     }).exec()

+ 12 - 0
services/web/test/unit/src/Project/ProjectDeleterTests.js

@@ -369,6 +369,12 @@ describe('ProjectDeleter', function () {
 
 
   describe('expireDeletedProjectsAfterDuration', function () {
   describe('expireDeletedProjectsAfterDuration', function () {
     beforeEach(async function () {
     beforeEach(async function () {
+      for (const deletedProject of this.deletedProjects) {
+        this.ProjectMock.expects('findById')
+          .withArgs(deletedProject.deleterData.deletedProjectId)
+          .chain('exec')
+          .resolves(null)
+      }
       this.DeletedProjectMock.expects('find')
       this.DeletedProjectMock.expects('find')
         .withArgs({
         .withArgs({
           'deleterData.deletedAt': {
           'deleterData.deletedAt': {
@@ -414,6 +420,12 @@ describe('ProjectDeleter', function () {
 
 
   describe('expireDeletedProject', function () {
   describe('expireDeletedProject', function () {
     beforeEach(async function () {
     beforeEach(async function () {
+      for (const deletedProject of this.deletedProjects) {
+        this.ProjectMock.expects('findById')
+          .withArgs(deletedProject.deleterData.deletedProjectId)
+          .chain('exec')
+          .resolves(null)
+      }
       this.DeletedProjectMock.expects('updateOne')
       this.DeletedProjectMock.expects('updateOne')
         .withArgs(
         .withArgs(
           {
           {