diff --git a/releng/fixtures/release.json b/releng/fixtures/release.json index 155a91d22..00c48ab84 100644 --- a/releng/fixtures/release.json +++ b/releng/fixtures/release.json @@ -6,6 +6,7 @@ "info": "public information", "kernel_version": "4.12", "last_modified": "2017-06-11T16:53:53.723Z", + "pgp_key": "0x3E80CA1A8B89F69CBA57D98A76A5EF9054449A5C", "md5_sum": "f029d6004e63464b1b26c62058c4e37e", "release_date": "2017-06-11", "wkd_email": "pierre@archlinux.de", diff --git a/releng/tests/conftest.py b/releng/tests/conftest.py index f67abc25d..7247fd462 100644 --- a/releng/tests/conftest.py +++ b/releng/tests/conftest.py @@ -9,12 +9,20 @@ VERSION = '1.0' KERNEL_VERSION = '4.18' +# Sample signing identity; same values as releng/fixtures/release.json (PGPKeyField stores 40 hex digits). +PGP_KEY_FINGERPRINT = '3E80CA1A8B89F69CBA57D98A76A5EF9054449A5C' +WKD_EMAIL = 'pierre@archlinux.de' + @pytest.fixture def release(db): - release = Release.objects.create(release_date=datetime.now(), - version=VERSION, - kernel_version=KERNEL_VERSION) + release = Release.objects.create( + release_date=datetime.now(), + version=VERSION, + kernel_version=KERNEL_VERSION, + pgp_key=PGP_KEY_FINGERPRINT, + wkd_email=WKD_EMAIL, + ) yield release release.delete() diff --git a/releng/tests/test_views.py b/releng/tests/test_views.py index 335ef22d1..f71f22d49 100644 --- a/releng/tests/test_views.py +++ b/releng/tests/test_views.py @@ -7,12 +7,17 @@ def test_release_json(client, release, torrent_data): assert data['version'] == 1 release_data = data['releases'][0] assert release_data['version'] == version + assert release_data['pgp_fingerprint'] == release.pgp_key + assert release_data['wkd_email'] == release.wkd_email # Test with torrent data release.torrent_data = torrent_data release.save() response = client.get('/releng/releases/json/') assert response.status_code == 200 + release_data = response.json()['releases'][0] + assert release_data['pgp_fingerprint'] == release.pgp_key + assert release_data['wkd_email'] == release.wkd_email def test_json(db, client): @@ -23,6 +28,23 @@ def test_json(db, client): assert data['releases'] == [] +def test_release_json_null_pgp_fingerprint_and_wkd_email(client, db): + from datetime import datetime + + from releng.models import Release + + Release.objects.create( + release_date=datetime.now(), + version='9.9.9', + kernel_version='1.0', + ) + response = client.get('/releng/releases/json/') + assert response.status_code == 200 + release_data = response.json()['releases'][0] + assert release_data['pgp_fingerprint'] is None + assert release_data['wkd_email'] is None + + def test_netboot_page(db, client): response = client.get('/releng/netboot/') assert response.status_code == 200 diff --git a/releng/views.py b/releng/views.py index 3f9454135..2f7b933f9 100644 --- a/releng/views.py +++ b/releng/views.py @@ -38,12 +38,14 @@ def release_torrent(request, version): class ReleaseJSONEncoder(DjangoJSONEncoder): release_attributes = ('release_date', 'version', 'kernel_version', - 'created', 'md5_sum', 'sha1_sum', 'sha256_sum', 'b2_sum') + 'created', 'md5_sum', 'sha1_sum', 'sha256_sum', 'b2_sum', + 'wkd_email') def default(self, obj): if isinstance(obj, Release): data = {attr: getattr(obj, attr) or None for attr in self.release_attributes} + data['pgp_fingerprint'] = obj.pgp_key data['available'] = obj.available data['iso_url'] = '/' + obj.iso_url() data['magnet_uri'] = obj.magnet_uri()