Guide auto fixing links implemented

This commit is contained in:
JakeBreath
2026-08-05 13:01:30 -05:00
parent aed6a7c24d
commit c1659943fa
4 changed files with 248 additions and 2 deletions
+71
View File
@@ -1134,6 +1134,77 @@ class UGCCategoryTests(UGCMediaTestCase, UGCGatedTestCase):
resp = self.client.get(reverse('library:guide_doc', args=['guide', version.pk, vf.file.uuid]))
self.assertEqual(resp.status_code, 404)
def test_guide_rewrites_links_to_separately_uploaded_files(self):
self.project = Project.objects.create(
slug='guide', title='Guide', category='guide', owner=self.alice,
)
self._upload_version(
'README.md', b'# Title\n\n![logo](images/logo.png)\n', content_type='text/markdown',
)
self._upload_version('images/logo.png', b'PNGDATA', content_type='image/png')
self._upload_version_form()
version = self.project.versions.first()
md_vf = version.files.get(kind='markdown')
self.gate()
resp = self.client.get(reverse('library:guide_doc', args=['guide', version.pk, md_vf.file.uuid]))
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, '<img src="/api/files/', count=1)
self.assertNotContains(resp, 'images/logo.png')
def test_guide_zip_docs_listed_and_links_rewritten(self):
self.project = Project.objects.create(
slug='guide', title='Guide', category='guide', owner=self.alice,
)
self._upload_version('guide.zip', _zip_bytes({
'README.md': '# Read\n\n![pic](images/a.png)\n\nNext: [part two](part2.md)\n',
'images/a.png': b'PNG2',
'part2.md': '# Two\n',
}))
self._upload_version_form()
version = self.project.versions.first()
self.gate()
# Both .md members appear in the guide switcher.
resp = self.client.get(reverse('library:project_detail', args=['guide']))
self.assertContains(resp, 'README.md')
self.assertContains(resp, 'part2.md')
# Zip doc renders with image + cross-doc link rewritten.
resp = self.client.get(reverse('library:guide_zip_doc', args=['guide', version.pk, 'README.md']))
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, '<img src="/packs/guide/versions/%d/asset/images/a.png"' % version.pk, count=1)
self.assertContains(resp, 'href="/packs/guide/guide/zip/%d/part2.md"' % version.pk, count=1)
def test_guide_zip_doc_rejects_non_guide_or_missing(self):
self.project = Project.objects.create(
slug='guide', title='Guide', category='guide', owner=self.alice,
)
self._upload_version('guide.zip', _zip_bytes({'README.md': '# Read\n'}))
self._upload_version_form()
version = self.project.versions.first()
self.gate()
self.assertEqual(
self.client.get(reverse('library:guide_zip_doc', args=['guide', version.pk, 'missing.md'])).status_code,
404,
)
self.assertEqual(
self.client.get(reverse('library:guide_zip_doc', args=['guide', version.pk, 'data.json'])).status_code,
404,
)
def test_guide_links_not_rewritten_outside_guide_category(self):
self.project = Project.objects.create(
slug='pack', title='Pack', category='non_pack', owner=self.alice,
)
self._upload_version(
'notes.md', b'# Notes\n\n![x](images/x.png)\n', content_type='text/markdown',
)
self._upload_version_form()
version = self.project.versions.first()
md_vf = version.files.get(kind='markdown')
self.gate()
resp = self.client.get(reverse('library:guide_doc', args=['pack', version.pk, md_vf.file.uuid]))
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'src="images/x.png"')
def test_regular_category_has_no_extra_metadata(self):
self.project = Project.objects.create(
slug='mod', title='Mod', category='mod', owner=self.alice,