Skip to content

Commit 7de6490

Browse files
committed
Delete imported files when deactivating version
Closes #10682
1 parent b13a321 commit 7de6490

File tree

4 files changed

+54
-4
lines changed

4 files changed

+54
-4
lines changed

readthedocs/api/v3/tests/test_versions.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
import django_dynamic_fixture as fixture
44
from django.test import override_settings
55
from django.urls import reverse
6+
from django_dynamic_fixture import get
67

78
from readthedocs.builds.constants import EXTERNAL, TAG
89
from readthedocs.builds.models import Version
9-
from readthedocs.projects.models import Project
10+
from readthedocs.projects.models import HTMLFile, Project
1011

1112
from .mixins import APIEndpointMixin
1213

@@ -268,10 +269,28 @@ def test_activate_version(self, clean_project_resources, trigger_build):
268269
@mock.patch("readthedocs.builds.models.trigger_build")
269270
@mock.patch("readthedocs.projects.tasks.utils.clean_project_resources")
270271
def test_deactivate_version(self, clean_project_resources, trigger_build):
272+
another_version = get(Version, project=self.project, active=True)
273+
get(
274+
HTMLFile,
275+
project=self.project,
276+
version=another_version,
277+
name="index.html",
278+
path="index.html",
279+
)
280+
get(
281+
HTMLFile,
282+
project=self.project,
283+
version=self.version,
284+
name="index.html",
285+
path="index.html",
286+
)
287+
271288
self.client.credentials(HTTP_AUTHORIZATION=f"Token {self.token.key}")
272289
data = {"active": False}
273290
self.assertTrue(self.version.active)
274291
self.assertTrue(self.version.built)
292+
self.assertTrue(another_version.imported_files.exists())
293+
self.assertTrue(self.version.imported_files.exists())
275294
response = self.client.patch(
276295
reverse(
277296
"projects-versions-detail",
@@ -286,6 +305,8 @@ def test_deactivate_version(self, clean_project_resources, trigger_build):
286305
self.version.refresh_from_db()
287306
self.assertFalse(self.version.active)
288307
self.assertFalse(self.version.built)
308+
self.assertFalse(self.version.imported_files.exists())
309+
self.assertTrue(another_version.imported_files.exists())
289310
clean_project_resources.assert_called_once()
290311
trigger_build.assert_not_called()
291312

readthedocs/builds/models.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,11 @@ def clean_resources(self):
422422
"""
423423
Remove all resources from this version.
424424
425-
This includes removing files from storage,
426-
and removing its search index.
425+
This includes:
426+
427+
- Files from storage
428+
- Search index
429+
- Imported files
427430
"""
428431
from readthedocs.projects.tasks.utils import clean_project_resources
429432

readthedocs/projects/tasks/utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def clean_project_resources(project, version=None):
6767
6868
- Artifacts from storage.
6969
- Search indexes from ES.
70+
- Imported files.
7071
7172
:param version: Version instance. If isn't given,
7273
all resources of `project` will be deleted.
@@ -90,6 +91,12 @@ def clean_project_resources(project, version=None):
9091
version_slug=version.slug if version else None,
9192
)
9293

94+
# Remove imported files
95+
if version:
96+
version.imported_files.all().delete()
97+
else:
98+
project.imported_files.all().delete()
99+
93100

94101
@app.task()
95102
def finish_inactive_builds():

readthedocs/rtd_tests/tests/test_build_forms.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from readthedocs.builds.forms import VersionForm
99
from readthedocs.builds.models import Version
1010
from readthedocs.projects.constants import PRIVATE, PUBLIC
11-
from readthedocs.projects.models import Project
11+
from readthedocs.projects.models import HTMLFile, Project
1212

1313

1414
class TestVersionForm(TestCase):
@@ -99,6 +99,21 @@ def test_resources_are_deleted_when_version_is_inactive(
9999
project=self.project,
100100
active=True,
101101
)
102+
another_version = get(Version, project=self.project, active=True)
103+
get(
104+
HTMLFile,
105+
project=self.project,
106+
version=version,
107+
name="index.html",
108+
path="index.html",
109+
)
110+
get(
111+
HTMLFile,
112+
project=self.project,
113+
version=another_version,
114+
name="index.html",
115+
path="index.html",
116+
)
102117

103118
url = reverse(
104119
"project_version_detail", args=(version.project.slug, version.slug)
@@ -115,6 +130,8 @@ def test_resources_are_deleted_when_version_is_inactive(
115130
)
116131
self.assertEqual(r.status_code, 302)
117132
clean_project_resources.assert_not_called()
133+
self.assertTrue(version.imported_files.exists())
134+
self.assertTrue(another_version.imported_files.exists())
118135

119136
r = self.client.post(
120137
url,
@@ -125,3 +142,5 @@ def test_resources_are_deleted_when_version_is_inactive(
125142
)
126143
self.assertEqual(r.status_code, 302)
127144
clean_project_resources.assert_called_once()
145+
self.assertFalse(version.imported_files.exists())
146+
self.assertTrue(another_version.imported_files.exists())

0 commit comments

Comments
 (0)