T-618 require release checksum metadata in admin

This commit is contained in:
QiuSW
2026-07-13 17:51:43 +08:00
parent b71564e2bf
commit 2887966625
9 changed files with 98 additions and 9 deletions
+13
View File
@@ -1,10 +1,23 @@
from django import forms
from django.contrib import admin
from .models import DownloadRelease, ImportTemplate
class DownloadReleaseAdminForm(forms.ModelForm):
class Meta:
model = DownloadRelease
fields = "__all__"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["sha256"].required = True
self.fields["size_bytes"].required = True
@admin.register(DownloadRelease)
class DownloadReleaseAdmin(admin.ModelAdmin):
form = DownloadReleaseAdminForm
list_display = (
"platform",
"version",
+35
View File
@@ -416,6 +416,41 @@ class PortalAccountFlowTests(TestCase):
self.assertFalse(old_release.is_current)
self.assertTrue(new_release.is_current)
def test_download_release_admin_requires_sha256_and_size_bytes(self):
form_class = admin.site._registry[DownloadRelease].form
base_data = {
"platform": DownloadRelease.Platform.WINDOWS,
"version": "1.2.3",
"external_url": "https://download.example.com/cmhub-1.2.3.zip",
"release_notes": "发布说明",
}
missing_sha256_form = form_class(data={**base_data, "size_bytes": "123456"})
missing_size_form = form_class(data={**base_data, "sha256": "a" * 64})
self.assertFalse(missing_sha256_form.is_valid())
self.assertIn("sha256", missing_sha256_form.errors)
self.assertFalse(missing_size_form.is_valid())
self.assertIn("size_bytes", missing_size_form.errors)
def test_download_release_admin_saves_valid_release_metadata(self):
form_class = admin.site._registry[DownloadRelease].form
form = form_class(
data={
"platform": DownloadRelease.Platform.WINDOWS,
"version": "1.2.3",
"external_url": "https://download.example.com/cmhub-1.2.3.zip",
"sha256": "b" * 64,
"size_bytes": "123456",
"release_notes": "发布说明",
}
)
self.assertTrue(form.is_valid(), form.errors)
release = form.save()
self.assertEqual(release.sha256, "b" * 64)
self.assertEqual(release.size_bytes, 123456)
def test_import_template_only_keeps_one_current(self):
old_template = self.create_import_template(
name="旧模板",