T-618 require release checksum metadata in admin
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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="旧模板",
|
||||
|
||||
Reference in New Issue
Block a user