Changeset View
Changeset View
Standalone View
Standalone View
swh/deposit/tests/api/test_deposit_check.py
Show First 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | def deposit_ok(self): | ||||
deposit = Deposit.objects.get(pk=deposit.id) | deposit = Deposit.objects.get(pk=deposit.id) | ||||
self.assertEquals(deposit.status, DEPOSIT_STATUS_VERIFIED) | self.assertEquals(deposit.status, DEPOSIT_STATUS_VERIFIED) | ||||
@istest | @istest | ||||
def deposit_ko(self): | def deposit_ko(self): | ||||
"""Invalid deposit should fail the checks (-> status rejected) | """Invalid deposit should fail the checks (-> status rejected) | ||||
""" | """ | ||||
deposit_id = self.create_invalid_deposit() | deposit_id = self.create_deposit_with_invalid_archive() | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
self.assertEquals(deposit.status, DEPOSIT_STATUS_DEPOSITED) | self.assertEquals(DEPOSIT_STATUS_DEPOSITED, deposit.status) | ||||
url = reverse(PRIVATE_CHECK_DEPOSIT, | url = reverse(PRIVATE_CHECK_DEPOSIT, | ||||
args=[self.collection.name, deposit.id]) | args=[self.collection.name, deposit.id]) | ||||
response = self.client.get(url) | response = self.client.get(url) | ||||
self.assertEqual(response.status_code, status.HTTP_200_OK) | self.assertEqual(response.status_code, status.HTTP_200_OK) | ||||
data = json.loads(response.content.decode('utf-8')) | data = json.loads(response.content.decode('utf-8')) | ||||
self.assertEqual(data['status'], DEPOSIT_STATUS_REJECTED) | self.assertEqual(data['status'], DEPOSIT_STATUS_REJECTED) | ||||
self.assertEqual(data['details'], | expected_error = { | ||||
'Some archive(s) and metadata and url ' + | 'archive': { | ||||
'failed the checks.') | 'ids': [20], # FIXME: no order is really guaranteed | ||||
'summary': 'Following deposit request ids are ' | |||||
'rejected because their associated archive' | |||||
' is not readable' | |||||
}, | |||||
'metadata': [ | |||||
{ | |||||
'fields': ['url', 'external_identifier', 'author'], | |||||
'summary': 'Mandatory fields are missing' | |||||
}, | |||||
{ | |||||
'fields': [['name', 'title']], | |||||
'summary': 'Mandatory alternate fields are missing' | |||||
}], | |||||
'url': { | |||||
'summary': "No url field provided is compatible with the client" | |||||
"'s domain'", | |||||
'fields': [] | |||||
} | |||||
} | |||||
self.assertEqual(data['details'], expected_error) | |||||
moranegg: I have a fail because the list of fields is not in the same order.
The assertCountEqual… | |||||
ardumontAuthorUnsubmitted Not Done Inline ActionsThe order is not important so i'll change the way this is tested. I'll also take care of the FIXM (line 76). ardumont: The order is not important so i'll change the way this is tested.
I'll also take care of the… | |||||
deposit = Deposit.objects.get(pk=deposit.id) | deposit = Deposit.objects.get(pk=deposit.id) | ||||
self.assertEquals(deposit.status, DEPOSIT_STATUS_REJECTED) | self.assertEquals(deposit.status, DEPOSIT_STATUS_REJECTED) | ||||
@istest | @istest | ||||
def check_deposit_metadata_ok(self): | def check_deposit_metadata_ok(self): | ||||
"""Proper deposit should succeed the checks (-> status ready) | """Proper deposit should succeed the checks (-> status ready) | ||||
with all **MUST** metadata | with all **MUST** metadata | ||||
using the codemeta metadata test set | using the codemeta metadata test set | ||||
""" | """ | ||||
deposit_id = self.create_simple_binary_deposit(status_partial=True) | deposit_id = self.create_simple_binary_deposit(status_partial=True) | ||||
deposit_id_metadata = self.add_metadata_to_deposit(deposit_id) | deposit_id_metadata = self.add_metadata_to_deposit(deposit_id) | ||||
self.assertEquals(deposit_id, deposit_id_metadata) | self.assertEquals(deposit_id, deposit_id_metadata) | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
self.assertEquals(deposit.status, DEPOSIT_STATUS_DEPOSITED) | self.assertEquals(deposit.status, DEPOSIT_STATUS_DEPOSITED) | ||||
url = reverse(PRIVATE_CHECK_DEPOSIT, | url = reverse(PRIVATE_CHECK_DEPOSIT, | ||||
args=[self.collection.name, deposit.id]) | args=[self.collection.name, deposit.id]) | ||||
response = self.client.get(url) | response = self.client.get(url) | ||||
self.assertEqual(response.status_code, status.HTTP_200_OK) | self.assertEqual(response.status_code, status.HTTP_200_OK) | ||||
data = json.loads(response.content.decode('utf-8')) | data = json.loads(response.content.decode('utf-8')) | ||||
self.assertEqual(data['status'], DEPOSIT_STATUS_VERIFIED) | self.assertEqual(data['status'], DEPOSIT_STATUS_VERIFIED) | ||||
deposit = Deposit.objects.get(pk=deposit.id) | deposit = Deposit.objects.get(pk=deposit.id) | ||||
self.assertEquals(deposit.status, DEPOSIT_STATUS_VERIFIED) | self.assertEquals(deposit.status, DEPOSIT_STATUS_VERIFIED) | ||||
class CheckMetadata(unittest.TestCase, SWHChecksDeposit): | class CheckMetadata(unittest.TestCase, SWHChecksDeposit): | ||||
@istest | @istest | ||||
def check_metadata_ok(self): | def check_metadata_ok(self): | ||||
actual_check = 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', | ||||
}) | }) | ||||
self.assertTrue(actual_check) | self.assertTrue(actual_check) | ||||
self.assertIsNone(detail) | |||||
@istest | @istest | ||||
def check_metadata_ok2(self): | def check_metadata_ok2(self): | ||||
actual_check = 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', | ||||
}) | }) | ||||
self.assertTrue(actual_check) | self.assertTrue(actual_check) | ||||
self.assertIsNone(detail) | |||||
@istest | @istest | ||||
def check_metadata_ko(self): | def check_metadata_ko(self): | ||||
actual_check = self._check_metadata({ | """Missing optional field should be caught | ||||
""" | |||||
actual_check, error_detail = self._check_metadata({ | |||||
'url': 'something', | 'url': 'something', | ||||
'external_identifier': 'something-else', | 'external_identifier': 'something-else', | ||||
'author': 'someone', | 'author': 'someone', | ||||
}) | }) | ||||
expected_error = { | |||||
'metadata': [{ | |||||
'summary': 'Mandatory alternate fields are missing', | |||||
'fields': [('name', 'title')], | |||||
}] | |||||
} | |||||
self.assertFalse(actual_check) | self.assertFalse(actual_check) | ||||
self.assertEqual(error_detail, expected_error) | |||||
@istest | @istest | ||||
def check_metadata_ko2(self): | def check_metadata_ko2(self): | ||||
actual_check = self._check_metadata({ | """Missing mandatory fields should be caught | ||||
""" | |||||
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 = { | |||||
'metadata': [{ | |||||
'summary': 'Mandatory fields are missing', | |||||
'fields': ['author'], | |||||
}] | |||||
} | |||||
self.assertFalse(actual_check) | self.assertFalse(actual_check) | ||||
self.assertEqual(error_detail, expected_error) |
I have a fail because the list of fields is not in the same order.
The assertCountEqual verifies lists without order, but here with dicts and lists entangled it might not help...
maybe we should sort first the result and only afterwards do the assertEqual..