Changeset View
Changeset View
Standalone View
Standalone View
swh/deposit/tests/api/test_deposit_read_metadata.py
Show All 17 Lines | |||||
from ..common import BasicTestCase, WithAuthTestCase, CommonCreationRoutine | from ..common import BasicTestCase, WithAuthTestCase, CommonCreationRoutine | ||||
class DepositReadMetadataTest(APITestCase, WithAuthTestCase, BasicTestCase, | class DepositReadMetadataTest(APITestCase, WithAuthTestCase, BasicTestCase, | ||||
CommonCreationRoutine): | CommonCreationRoutine): | ||||
"""Deposit access to read metadata information on deposit. | """Deposit access to read metadata information on deposit. | ||||
""" | """ | ||||
def __init__(self, *args, **kwargs): | |||||
super().__init__(*args, **kwargs) | |||||
self.template_metadata = """<?xml version="1.0" encoding="utf-8"?> | |||||
<entry xmlns="http://www.w3.org/2005/Atom" | |||||
xmlns:codemeta="https://doi.org/10.5063/SCHEMA/CODEMETA-2.0"> | |||||
<title>Composing a Web of Audio Applications</title> | |||||
<client>hal</client> | |||||
<id>hal-01243065</id> | |||||
<external_identifier>hal-01243065</external_identifier> | |||||
<codemeta:url>https://hal-test.archives-ouvertes.fr/hal-01243065</codemeta:url> | |||||
<codemeta:applicationCategory>test</codemeta:applicationCategory> | |||||
<codemeta:keywords>DSP programming</codemeta:keywords> | |||||
<codemeta:description>this is the description</codemeta:description> | |||||
<codemeta:version>1</codemeta:version> | |||||
<codemeta:runtimePlatform>phpstorm</codemeta:runtimePlatform> | |||||
<codemeta:developmentStatus>stable</codemeta:developmentStatus> | |||||
<codemeta:programmingLanguage>php</codemeta:programmingLanguage> | |||||
<codemeta:programmingLanguage>python</codemeta:programmingLanguage> | |||||
<codemeta:programmingLanguage>C</codemeta:programmingLanguage> | |||||
<codemeta:license> | |||||
<codemeta:name>GNU General Public License v3.0 only</codemeta:name> | |||||
</codemeta:license> | |||||
<codemeta:license> | |||||
<codemeta:name>CeCILL Free Software License Agreement v1.1</codemeta:name> | |||||
</codemeta:license> | |||||
<author> | |||||
<name>HAL</name> | |||||
<email>hal@ccsd.cnrs.fr</email> | |||||
</author> | |||||
<codemeta:author> | |||||
<codemeta:name>Morane Gruenpeter</codemeta:name> | |||||
</codemeta:author> | |||||
%s | |||||
</entry>""" | |||||
def test_read_metadata(self): | def test_read_metadata(self): | ||||
"""Private metadata read api to existing deposit should return metadata | """Private metadata read api to existing deposit should return metadata | ||||
""" | """ | ||||
deposit_id = self.create_deposit_partial() | deposit_id = self.create_deposit_partial() | ||||
url = reverse(PRIVATE_GET_DEPOSIT_METADATA, | url = reverse(PRIVATE_GET_DEPOSIT_METADATA, | ||||
args=[self.collection.name, deposit_id]) | args=[self.collection.name, deposit_id]) | ||||
Show All 11 Lines | def test_read_metadata(self): | ||||
'url': 'https://hal-test.archives-ouvertes.fr/' + | 'url': 'https://hal-test.archives-ouvertes.fr/' + | ||||
'some-external-id', | 'some-external-id', | ||||
'type': 'deposit' | 'type': 'deposit' | ||||
}, | }, | ||||
'origin_metadata': { | 'origin_metadata': { | ||||
'metadata': { | 'metadata': { | ||||
'@xmlns': ['http://www.w3.org/2005/Atom'], | '@xmlns': ['http://www.w3.org/2005/Atom'], | ||||
'author': ['some awesome author', 'another one', 'no one'], | 'author': ['some awesome author', 'another one', 'no one'], | ||||
'codemeta:dateCreated': '2017-10-07T15:17:08Z', | |||||
'external_identifier': 'some-external-id', | 'external_identifier': 'some-external-id', | ||||
'url': 'https://hal-test.archives-ouvertes.fr/' + | 'url': 'https://hal-test.archives-ouvertes.fr/' + | ||||
'some-external-id' | 'some-external-id' | ||||
}, | }, | ||||
'provider': { | 'provider': { | ||||
'provider_name': 'hal', | 'provider_name': 'hal', | ||||
'provider_type': 'deposit_client', | 'provider_type': 'deposit_client', | ||||
'provider_url': 'https://hal-test.archives-ouvertes.fr/', | 'provider_url': 'https://hal-test.archives-ouvertes.fr/', | ||||
'metadata': {} | 'metadata': {} | ||||
}, | }, | ||||
'tool': { | 'tool': { | ||||
'name': 'swh-deposit', | 'name': 'swh-deposit', | ||||
'version': '0.0.1', | 'version': '0.0.1', | ||||
'configuration': { | 'configuration': { | ||||
'sword_version': '2' | 'sword_version': '2' | ||||
} | } | ||||
} | } | ||||
}, | }, | ||||
'revision': { | 'revision': { | ||||
'synthetic': True, | 'synthetic': True, | ||||
'committer_date': None, | 'committer_date': { | ||||
'timestamp': { | |||||
'seconds': 1507389428, | |||||
'microseconds': 0 | |||||
}, | |||||
'offset': 0, | |||||
'negative_utc': False | |||||
}, | |||||
'message': 'hal: Deposit %s in collection hal' % deposit_id, | 'message': 'hal: Deposit %s in collection hal' % deposit_id, | ||||
'author': SWH_PERSON, | 'author': SWH_PERSON, | ||||
'committer': SWH_PERSON, | 'committer': SWH_PERSON, | ||||
'date': None, | 'date': { | ||||
'timestamp': { | |||||
'seconds': 1507389428, | |||||
'microseconds': 0 | |||||
}, | |||||
'offset': 0, | |||||
'negative_utc': False | |||||
}, | |||||
'metadata': { | 'metadata': { | ||||
'@xmlns': ['http://www.w3.org/2005/Atom'], | '@xmlns': ['http://www.w3.org/2005/Atom'], | ||||
'author': ['some awesome author', 'another one', 'no one'], | 'author': ['some awesome author', 'another one', 'no one'], | ||||
'external_identifier': 'some-external-id', | 'external_identifier': 'some-external-id', | ||||
'codemeta:dateCreated': '2017-10-07T15:17:08Z', | |||||
'url': 'https://hal-test.archives-ouvertes.fr/' + | 'url': 'https://hal-test.archives-ouvertes.fr/' + | ||||
'some-external-id' | 'some-external-id' | ||||
}, | }, | ||||
'type': 'tar' | 'type': 'tar' | ||||
}, | }, | ||||
'branch_name': 'master', | 'branch_name': 'master', | ||||
} | } | ||||
Show All 40 Lines | def test_read_metadata_revision_with_parent(self): | ||||
'url': 'https://hal-test.archives-ouvertes.fr/' + | 'url': 'https://hal-test.archives-ouvertes.fr/' + | ||||
'some-external-id', | 'some-external-id', | ||||
'type': 'deposit' | 'type': 'deposit' | ||||
}, | }, | ||||
'origin_metadata': { | 'origin_metadata': { | ||||
'metadata': { | 'metadata': { | ||||
'@xmlns': ['http://www.w3.org/2005/Atom'], | '@xmlns': ['http://www.w3.org/2005/Atom'], | ||||
'author': ['some awesome author', 'another one', 'no one'], | 'author': ['some awesome author', 'another one', 'no one'], | ||||
'codemeta:dateCreated': '2017-10-07T15:17:08Z', | |||||
'external_identifier': 'some-external-id', | 'external_identifier': 'some-external-id', | ||||
'url': 'https://hal-test.archives-ouvertes.fr/' + | 'url': 'https://hal-test.archives-ouvertes.fr/' + | ||||
'some-external-id' | 'some-external-id' | ||||
}, | }, | ||||
'provider': { | 'provider': { | ||||
'provider_name': 'hal', | 'provider_name': 'hal', | ||||
'provider_type': 'deposit_client', | 'provider_type': 'deposit_client', | ||||
'provider_url': 'https://hal-test.archives-ouvertes.fr/', | 'provider_url': 'https://hal-test.archives-ouvertes.fr/', | ||||
'metadata': {} | 'metadata': {} | ||||
}, | }, | ||||
'tool': { | 'tool': { | ||||
'name': 'swh-deposit', | 'name': 'swh-deposit', | ||||
'version': '0.0.1', | 'version': '0.0.1', | ||||
'configuration': { | 'configuration': { | ||||
'sword_version': '2' | 'sword_version': '2' | ||||
} | } | ||||
} | } | ||||
}, | }, | ||||
'revision': { | 'revision': { | ||||
'synthetic': True, | 'synthetic': True, | ||||
'date': None, | 'date': { | ||||
'committer_date': None, | 'timestamp': { | ||||
'seconds': 1507389428, | |||||
'microseconds': 0 | |||||
}, | |||||
'offset': 0, | |||||
'negative_utc': False | |||||
}, | |||||
'committer_date': { | |||||
'timestamp': { | |||||
'seconds': 1507389428, | |||||
'microseconds': 0 | |||||
}, | |||||
'offset': 0, | |||||
'negative_utc': False | |||||
}, | |||||
'author': SWH_PERSON, | 'author': SWH_PERSON, | ||||
'committer': SWH_PERSON, | 'committer': SWH_PERSON, | ||||
'type': 'tar', | 'type': 'tar', | ||||
'message': 'hal: Deposit %s in collection hal' % deposit_id, | 'message': 'hal: Deposit %s in collection hal' % deposit_id, | ||||
'metadata': { | 'metadata': { | ||||
'@xmlns': ['http://www.w3.org/2005/Atom'], | '@xmlns': ['http://www.w3.org/2005/Atom'], | ||||
'author': ['some awesome author', 'another one', 'no one'], | 'author': ['some awesome author', 'another one', 'no one'], | ||||
'codemeta:dateCreated': '2017-10-07T15:17:08Z', | |||||
'external_identifier': 'some-external-id', | 'external_identifier': 'some-external-id', | ||||
'url': 'https://hal-test.archives-ouvertes.fr/' + | 'url': 'https://hal-test.archives-ouvertes.fr/' + | ||||
'some-external-id' | 'some-external-id' | ||||
}, | }, | ||||
'parents': [swh_id] | 'parents': [swh_id] | ||||
}, | }, | ||||
'branch_name': 'master', | 'branch_name': 'master', | ||||
} | } | ||||
self.assertEqual(data, expected_meta) | self.assertEqual(data, expected_meta) | ||||
def test_read_metadata_3(self): | |||||
"""date(Created|Published) provided, uses author/committer date | |||||
""" | |||||
# add metadata to the deposit with datePublished and dateCreated | |||||
codemeta_entry_data = self.template_metadata % """ | |||||
<codemeta:dateCreated>2015-04-06T17:08:47+02:00</codemeta:dateCreated> | |||||
<codemeta:datePublished>2017-05-03T16:08:47+02:00</codemeta:datePublished> | |||||
""" | |||||
deposit_id = self.create_deposit_partial_with_data_in_args( | |||||
codemeta_entry_data) | |||||
url = reverse(PRIVATE_GET_DEPOSIT_METADATA, | |||||
args=[self.collection.name, deposit_id]) | |||||
response = self.client.get(url) | |||||
self.assertEqual(response.status_code, | |||||
status.HTTP_200_OK) | |||||
self.assertEqual(response._headers['content-type'][1], | |||||
'application/json') | |||||
data = response.json() | |||||
expected_origin = { | |||||
'type': 'deposit', | |||||
'url': 'https://hal-test.archives-ouvertes.fr/hal-01243065' | |||||
} | |||||
expected_metadata = { | |||||
'@xmlns': 'http://www.w3.org/2005/Atom', | |||||
'@xmlns:codemeta': | |||||
'https://doi.org/10.5063/SCHEMA/CODEMETA-2.0', | |||||
'author': { | |||||
'email': 'hal@ccsd.cnrs.fr', | |||||
'name': 'HAL' | |||||
}, | |||||
'client': 'hal', | |||||
'codemeta:applicationCategory': 'test', | |||||
'codemeta:author': { | |||||
'codemeta:name': 'Morane Gruenpeter' | |||||
}, | |||||
'codemeta:dateCreated': '2015-04-06T17:08:47+02:00', | |||||
'codemeta:datePublished': '2017-05-03T16:08:47+02:00', | |||||
'codemeta:description': 'this is the description', | |||||
'codemeta:developmentStatus': 'stable', | |||||
'codemeta:keywords': 'DSP programming', | |||||
'codemeta:license': [ | |||||
{ | |||||
'codemeta:name': 'GNU General Public License v3.0 only' | |||||
}, | |||||
{ | |||||
'codemeta:name': | |||||
'CeCILL Free Software License Agreement v1.1' | |||||
} | |||||
], | |||||
'codemeta:programmingLanguage': [ | |||||
'php', 'python', 'C' | |||||
], | |||||
'codemeta:runtimePlatform': 'phpstorm', | |||||
'codemeta:url': 'https://hal-test.archives-ouvertes.fr/hal-01243065', # noqa | |||||
'codemeta:version': '1', | |||||
'external_identifier': 'hal-01243065', | |||||
'id': 'hal-01243065', | |||||
'title': 'Composing a Web of Audio Applications' | |||||
} | |||||
expected_origin_metadata = { | |||||
'metadata': expected_metadata, | |||||
'provider': { | |||||
'metadata': {}, | |||||
'provider_name': 'hal', | |||||
'provider_type': 'deposit_client', | |||||
'provider_url': 'https://hal-test.archives-ouvertes.fr/' | |||||
}, | |||||
'tool': { | |||||
'configuration': { | |||||
'sword_version': '2' | |||||
}, | |||||
'name': 'swh-deposit', | |||||
'version': '0.0.1' | |||||
} | |||||
} | |||||
expected_revision = { | |||||
'author': { | |||||
'email': 'robot@softwareheritage.org', | |||||
'fullname': 'Software Heritage', | |||||
'name': 'Software Heritage' | |||||
}, | |||||
'committer': { | |||||
'email': 'robot@softwareheritage.org', | |||||
'fullname': 'Software Heritage', | |||||
'name': 'Software Heritage' | |||||
}, | |||||
'committer_date': { | |||||
'negative_utc': False, | |||||
'offset': 120, | |||||
'timestamp': { | |||||
'microseconds': 0, | |||||
'seconds': 1493820527 | |||||
} | |||||
}, | |||||
'date': { | |||||
'negative_utc': False, | |||||
'offset': 120, | |||||
'timestamp': { | |||||
'microseconds': 0, | |||||
'seconds': 1428332927 | |||||
} | |||||
}, | |||||
'message': 'hal: Deposit %s in collection hal' % deposit_id, | |||||
'metadata': expected_metadata, | |||||
'synthetic': True, | |||||
'type': 'tar' | |||||
} | |||||
expected_meta = { | |||||
'branch_name': 'master', | |||||
'origin': expected_origin, | |||||
'origin_metadata': expected_origin_metadata, | |||||
'revision': expected_revision, | |||||
} | |||||
self.assertEqual(data, expected_meta) | |||||
def test_read_metadata_4(self): | |||||
"""dateCreated/datePublished not provided, revision uses complete_date | |||||
""" | |||||
codemeta_entry_data = self.template_metadata % '' | |||||
deposit_id = self.create_deposit_partial_with_data_in_args( | |||||
codemeta_entry_data) | |||||
# will use the deposit completed date as fallback date | |||||
deposit = Deposit.objects.get(pk=deposit_id) | |||||
deposit.complete_date = '2016-04-06' | |||||
deposit.save() | |||||
url = reverse(PRIVATE_GET_DEPOSIT_METADATA, | |||||
args=[self.collection.name, deposit_id]) | |||||
response = self.client.get(url) | |||||
self.assertEqual(response.status_code, | |||||
status.HTTP_200_OK) | |||||
self.assertEqual(response._headers['content-type'][1], | |||||
'application/json') | |||||
data = response.json() | |||||
expected_origin = { | |||||
'type': 'deposit', | |||||
'url': 'https://hal-test.archives-ouvertes.fr/hal-01243065' | |||||
} | |||||
expected_metadata = { | |||||
'@xmlns': 'http://www.w3.org/2005/Atom', | |||||
'@xmlns:codemeta': | |||||
'https://doi.org/10.5063/SCHEMA/CODEMETA-2.0', | |||||
'author': { | |||||
'email': 'hal@ccsd.cnrs.fr', | |||||
'name': 'HAL' | |||||
}, | |||||
'client': 'hal', | |||||
'codemeta:applicationCategory': 'test', | |||||
'codemeta:author': { | |||||
'codemeta:name': 'Morane Gruenpeter' | |||||
}, | |||||
'codemeta:description': 'this is the description', | |||||
'codemeta:developmentStatus': 'stable', | |||||
'codemeta:keywords': 'DSP programming', | |||||
'codemeta:license': [ | |||||
{ | |||||
'codemeta:name': 'GNU General Public License v3.0 only' | |||||
}, | |||||
{ | |||||
'codemeta:name': | |||||
'CeCILL Free Software License Agreement v1.1' | |||||
} | |||||
], | |||||
'codemeta:programmingLanguage': [ | |||||
'php', 'python', 'C' | |||||
], | |||||
'codemeta:runtimePlatform': 'phpstorm', | |||||
'codemeta:url': 'https://hal-test.archives-ouvertes.fr/hal-01243065', # noqa | |||||
'codemeta:version': '1', | |||||
'external_identifier': 'hal-01243065', | |||||
'id': 'hal-01243065', | |||||
'title': 'Composing a Web of Audio Applications' | |||||
} | |||||
douardda: Couldn't we share this big chunk of xml among tests? I'm a big advocate of copy/paste in tests… | |||||
Done Inline ActionsI'll see what i can do, it sure irritates me a lot... ardumont: I'll see what i can do, it sure irritates me a lot...
I was focused on making the thing works… | |||||
expected_origin_metadata = { | |||||
'metadata': expected_metadata, | |||||
'provider': { | |||||
'metadata': {}, | |||||
'provider_name': 'hal', | |||||
'provider_type': 'deposit_client', | |||||
'provider_url': 'https://hal-test.archives-ouvertes.fr/' | |||||
}, | |||||
'tool': { | |||||
'configuration': { | |||||
'sword_version': '2' | |||||
}, | |||||
'name': 'swh-deposit', | |||||
'version': '0.0.1' | |||||
} | |||||
} | |||||
expected_revision = { | |||||
'author': { | |||||
'email': 'robot@softwareheritage.org', | |||||
'fullname': 'Software Heritage', | |||||
'name': 'Software Heritage' | |||||
}, | |||||
'committer': { | |||||
'email': 'robot@softwareheritage.org', | |||||
'fullname': 'Software Heritage', | |||||
'name': 'Software Heritage' | |||||
}, | |||||
'committer_date': { | |||||
'negative_utc': False, | |||||
'offset': 0, | |||||
'timestamp': { | |||||
'microseconds': 0, | |||||
'seconds': 1459900800 | |||||
} | |||||
}, | |||||
'date': { | |||||
'negative_utc': False, | |||||
'offset': 0, | |||||
'timestamp': { | |||||
'microseconds': 0, | |||||
'seconds': 1459900800 | |||||
} | |||||
}, | |||||
'message': 'hal: Deposit %s in collection hal' % deposit_id, | |||||
'metadata': expected_metadata, | |||||
'synthetic': True, | |||||
'type': 'tar' | |||||
} | |||||
expected_meta = { | |||||
'branch_name': 'master', | |||||
'origin': expected_origin, | |||||
'origin_metadata': expected_origin_metadata, | |||||
'revision': expected_revision, | |||||
} | |||||
self.assertEqual(data, expected_meta) | |||||
def test_read_metadata_5(self): | |||||
"""dateCreated/datePublished provided, revision uses author/committer | |||||
date | |||||
If multiple dateCreated provided, the first occurrence (of | |||||
dateCreated) is selected. If multiple datePublished provided, | |||||
the first occurrence (of datePublished) is selected. | |||||
""" | |||||
# add metadata to the deposit with multiple datePublished/dateCreated | |||||
codemeta_entry_data = self.template_metadata % """ | |||||
<codemeta:dateCreated>2015-04-06T17:08:47+02:00</codemeta:dateCreated> | |||||
<codemeta:datePublished>2017-05-03T16:08:47+02:00</codemeta:datePublished> | |||||
<codemeta:dateCreated>2016-04-06T17:08:47+02:00</codemeta:dateCreated> | |||||
<codemeta:datePublished>2018-05-03T16:08:47+02:00</codemeta:datePublished> | |||||
""" | |||||
moraneggUnsubmitted Not Done Inline ActionsThe design choice of taking the first date in the list is good for me moranegg: The design choice of taking the first date in the list is good for me | |||||
deposit_id = self.create_deposit_partial_with_data_in_args( | |||||
codemeta_entry_data) | |||||
url = reverse(PRIVATE_GET_DEPOSIT_METADATA, | |||||
args=[self.collection.name, deposit_id]) | |||||
response = self.client.get(url) | |||||
self.assertEqual(response.status_code, | |||||
status.HTTP_200_OK) | |||||
self.assertEqual(response._headers['content-type'][1], | |||||
'application/json') | |||||
data = response.json() | |||||
expected_origin = { | |||||
'type': 'deposit', | |||||
'url': 'https://hal-test.archives-ouvertes.fr/hal-01243065' | |||||
} | |||||
expected_metadata = { | |||||
'@xmlns': 'http://www.w3.org/2005/Atom', | |||||
'@xmlns:codemeta': | |||||
'https://doi.org/10.5063/SCHEMA/CODEMETA-2.0', | |||||
'author': { | |||||
'email': 'hal@ccsd.cnrs.fr', | |||||
'name': 'HAL' | |||||
}, | |||||
'client': 'hal', | |||||
'codemeta:applicationCategory': 'test', | |||||
'codemeta:author': { | |||||
'codemeta:name': 'Morane Gruenpeter' | |||||
}, | |||||
'codemeta:dateCreated': [ | |||||
'2015-04-06T17:08:47+02:00', | |||||
'2016-04-06T17:08:47+02:00', | |||||
], | |||||
'codemeta:datePublished': [ | |||||
'2017-05-03T16:08:47+02:00', | |||||
'2018-05-03T16:08:47+02:00', | |||||
], | |||||
'codemeta:description': 'this is the description', | |||||
'codemeta:developmentStatus': 'stable', | |||||
'codemeta:keywords': 'DSP programming', | |||||
'codemeta:license': [ | |||||
{ | |||||
'codemeta:name': 'GNU General Public License v3.0 only' | |||||
}, | |||||
{ | |||||
'codemeta:name': | |||||
'CeCILL Free Software License Agreement v1.1' | |||||
} | |||||
], | |||||
'codemeta:programmingLanguage': [ | |||||
'php', 'python', 'C' | |||||
], | |||||
'codemeta:runtimePlatform': 'phpstorm', | |||||
'codemeta:url': 'https://hal-test.archives-ouvertes.fr/hal-01243065', # noqa | |||||
'codemeta:version': '1', | |||||
'external_identifier': 'hal-01243065', | |||||
'id': 'hal-01243065', | |||||
'title': 'Composing a Web of Audio Applications' | |||||
} | |||||
expected_origin_metadata = { | |||||
'metadata': expected_metadata, | |||||
'provider': { | |||||
'metadata': {}, | |||||
'provider_name': 'hal', | |||||
'provider_type': 'deposit_client', | |||||
'provider_url': 'https://hal-test.archives-ouvertes.fr/' | |||||
}, | |||||
'tool': { | |||||
'configuration': { | |||||
'sword_version': '2' | |||||
}, | |||||
'name': 'swh-deposit', | |||||
'version': '0.0.1' | |||||
} | |||||
} | |||||
expected_revision = { | |||||
'author': { | |||||
'email': 'robot@softwareheritage.org', | |||||
'fullname': 'Software Heritage', | |||||
'name': 'Software Heritage' | |||||
}, | |||||
'committer': { | |||||
'email': 'robot@softwareheritage.org', | |||||
'fullname': 'Software Heritage', | |||||
'name': 'Software Heritage' | |||||
}, | |||||
'committer_date': { | |||||
'negative_utc': False, | |||||
'offset': 120, | |||||
'timestamp': { | |||||
'microseconds': 0, | |||||
'seconds': 1493820527 | |||||
} | |||||
}, | |||||
'date': { | |||||
'negative_utc': False, | |||||
'offset': 120, | |||||
'timestamp': { | |||||
'microseconds': 0, | |||||
'seconds': 1428332927 | |||||
} | |||||
}, | |||||
'message': 'hal: Deposit %s in collection hal' % deposit_id, | |||||
'metadata': expected_metadata, | |||||
'synthetic': True, | |||||
'type': 'tar' | |||||
} | |||||
expected_meta = { | |||||
'branch_name': 'master', | |||||
'origin': expected_origin, | |||||
'origin_metadata': expected_origin_metadata, | |||||
'revision': expected_revision, | |||||
} | |||||
self.assertEqual(data, expected_meta) | |||||
def test_access_to_nonexisting_deposit_returns_404_response(self): | def test_access_to_nonexisting_deposit_returns_404_response(self): | ||||
"""Read unknown collection should return a 404 response | """Read unknown collection should return a 404 response | ||||
""" | """ | ||||
unknown_id = '999' | unknown_id = '999' | ||||
url = reverse(PRIVATE_GET_DEPOSIT_METADATA, | url = reverse(PRIVATE_GET_DEPOSIT_METADATA, | ||||
args=[self.collection.name, unknown_id]) | args=[self.collection.name, unknown_id]) | ||||
Show All 20 Lines |
Couldn't we share this big chunk of xml among tests? I'm a big advocate of copy/paste in tests (rather than clever abstractions/genericity that make the test hard to read for a human), but in this case, it's hard to guess what the differences are between these tests. The docstrings/comments do describe them, but ...