Changeset View
Changeset View
Standalone View
Standalone View
swh/deposit/tests/api/test_deposit_check.py
# Copyright (C) 2017-2018 The Software Heritage developers | # Copyright (C) 2017-2019 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import unittest | import unittest | ||||
from django.core.urlresolvers import reverse | from django.core.urlresolvers import reverse | ||||
import pytest | import pytest | ||||
▲ Show 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | def test_deposit_ko_unsupported_tarball(self): | ||||
self.assertEqual(len(details['archive']), 1) | self.assertEqual(len(details['archive']), 1) | ||||
self.assertEqual(details['archive'][0]['summary'], | self.assertEqual(details['archive'][0]['summary'], | ||||
MANDATORY_ARCHIVE_UNSUPPORTED) | MANDATORY_ARCHIVE_UNSUPPORTED) | ||||
# metadata check failure | # metadata check failure | ||||
self.assertEqual(len(details['metadata']), 2) | self.assertEqual(len(details['metadata']), 2) | ||||
mandatory = details['metadata'][0] | mandatory = details['metadata'][0] | ||||
self.assertEqual(mandatory['summary'], MANDATORY_FIELDS_MISSING) | self.assertEqual(mandatory['summary'], MANDATORY_FIELDS_MISSING) | ||||
self.assertEqual(set(mandatory['fields']), | self.assertEqual(set(mandatory['fields']), | ||||
set(['url', 'external_identifier', 'author'])) | set(['url', 'external_identifier', 'author', | ||||
'codemeta:dateCreated'])) | |||||
moranegg: again, shouldn't be mandatory | |||||
alternate = details['metadata'][1] | alternate = details['metadata'][1] | ||||
self.assertEqual(alternate['summary'], ALTERNATE_FIELDS_MISSING) | self.assertEqual(alternate['summary'], ALTERNATE_FIELDS_MISSING) | ||||
self.assertEqual(alternate['fields'], ['name or title']) | self.assertEqual(alternate['fields'], ['name or title']) | ||||
# url check failure | # url check failure | ||||
self.assertEqual(details['url']['summary'], INCOMPATIBLE_URL_FIELDS) | self.assertEqual(details['url']['summary'], INCOMPATIBLE_URL_FIELDS) | ||||
deposit = Deposit.objects.get(pk=deposit.id) | deposit = Deposit.objects.get(pk=deposit.id) | ||||
self.assertEqual(deposit.status, DEPOSIT_STATUS_REJECTED) | self.assertEqual(deposit.status, DEPOSIT_STATUS_REJECTED) | ||||
Show All 26 Lines | |||||
class CheckMetadata(unittest.TestCase, SWHChecksDeposit): | class CheckMetadata(unittest.TestCase, SWHChecksDeposit): | ||||
def test_check_metadata_ok(self): | def test_check_metadata_ok(self): | ||||
actual_check, detail = self._check_metadata({ | actual_check, detail = self._check_metadata({ | ||||
'url': 'something', | 'url': 'something', | ||||
'external_identifier': 'something-else', | 'external_identifier': 'something-else', | ||||
'name': 'foo', | 'name': 'foo', | ||||
'author': 'someone', | 'author': 'someone', | ||||
'codemeta:dateCreated': 'now', | |||||
}) | }) | ||||
self.assertTrue(actual_check) | self.assertTrue(actual_check) | ||||
self.assertIsNone(detail) | self.assertIsNone(detail) | ||||
def test_check_metadata_ok2(self): | def test_check_metadata_ok2(self): | ||||
actual_check, detail = self._check_metadata({ | actual_check, detail = self._check_metadata({ | ||||
'url': 'something', | 'url': 'something', | ||||
'external_identifier': 'something-else', | 'external_identifier': 'something-else', | ||||
'title': 'bar', | 'title': 'bar', | ||||
'author': 'someone', | 'author': 'someone', | ||||
'codemeta:dateCreated': 'past', | |||||
}) | }) | ||||
self.assertTrue(actual_check) | self.assertTrue(actual_check) | ||||
self.assertIsNone(detail) | self.assertIsNone(detail) | ||||
def test_check_metadata_ko(self): | def test_check_metadata_ko(self): | ||||
"""Missing optional field should be caught | """Missing optional field should be caught | ||||
""" | """ | ||||
actual_check, error_detail = self._check_metadata({ | actual_check, error_detail = self._check_metadata({ | ||||
'url': 'something', | 'url': 'something', | ||||
'external_identifier': 'something-else', | 'external_identifier': 'something-else', | ||||
'author': 'someone', | 'author': 'someone', | ||||
'codemeta:dateCreated': 'some-date', | |||||
}) | }) | ||||
expected_error = { | expected_error = { | ||||
'metadata': [{ | 'metadata': [{ | ||||
'summary': 'Mandatory alternate fields are missing', | 'summary': 'Mandatory alternate fields are missing', | ||||
'fields': ['name or title'], | 'fields': ['name or title'], | ||||
}] | }] | ||||
} | } | ||||
self.assertFalse(actual_check) | self.assertFalse(actual_check) | ||||
self.assertEqual(error_detail, expected_error) | self.assertEqual(error_detail, expected_error) | ||||
def test_check_metadata_ko2(self): | def test_check_metadata_ko2(self): | ||||
"""Missing mandatory fields should be caught | """Missing mandatory fields should be caught | ||||
""" | """ | ||||
actual_check, error_detail = self._check_metadata({ | actual_check, error_detail = self._check_metadata({ | ||||
'url': 'something', | 'url': 'something', | ||||
'external_identifier': 'something-else', | 'external_identifier': 'something-else', | ||||
'title': 'foobar', | 'title': 'foobar', | ||||
}) | }) | ||||
expected_error = { | expected_error = { | ||||
'metadata': [{ | 'metadata': [{ | ||||
'summary': 'Mandatory fields are missing', | 'summary': 'Mandatory fields are missing', | ||||
'fields': ['author'], | 'fields': ['author', 'codemeta:dateCreated'], | ||||
}] | }] | ||||
} | } | ||||
self.assertFalse(actual_check) | self.assertFalse(actual_check) | ||||
self.assertEqual(error_detail, expected_error) | expected_error_summary = 'Mandatory fields are missing' | ||||
self.assertCountEqual(error_detail['metadata'], | |||||
expected_error['metadata']) | |||||
self.assertEqual(error_detail['metadata'][0]['summary'], | |||||
expected_error_summary) | |||||
actual_fields = error_detail['metadata'][0]['fields'] | |||||
actual_fields.sort() | |||||
expected_fields = expected_error['metadata'][0]['fields'] | |||||
expected_fields.sort() | |||||
self.assertEqual(actual_fields, expected_fields) |
again, shouldn't be mandatory