diff --git a/swh/deposit/tests/api/data/atom/codemeta-sample.xml b/swh/deposit/tests/api/data/atom/codemeta-sample.xml
index 98c3e06d..d804eff5 100644
--- a/swh/deposit/tests/api/data/atom/codemeta-sample.xml
+++ b/swh/deposit/tests/api/data/atom/codemeta-sample.xml
@@ -1,53 +1,51 @@
-
-
%s
hal-01587361
https://hal.inria.fr/hal-01587361
https://hal.inria.fr/hal-01587361/document
https://hal.inria.fr/hal-01587361/file/AffectationRO-v1.0.0.zip
doi:10.5281/zenodo.438684
The assignment problem
AffectationRO
Gruenpeter, Morane
[INFO] Computer Science [cs]
[INFO.INFO-RO] Computer Science [cs]/Operations Research [cs.RO]
SOFTWARE
Project in OR: The assignment problemA java implementation for the assignment problem first release
description fr
2015-06-01
2017-10-19
en
url stable
Version sur hal
Version entre par lutilisateur
Mots-cls
Commentaire
Rfrence interne
Collaboration/Projet
nom du projet
id
Voir aussi
Financement
Projet ANR
Projet Europen
Platform/OS
Dpendances
Etat du dveloppement
license
url spdx
Outils de dveloppement- outil no1
Outils de dveloppement- outil no2
http://code.com
language 1
language 2
diff --git a/swh/deposit/tests/api/data/atom/entry-data2.xml b/swh/deposit/tests/api/data/atom/entry-data2.xml
new file mode 100644
index 00000000..73cfafeb
--- /dev/null
+++ b/swh/deposit/tests/api/data/atom/entry-data2.xml
@@ -0,0 +1,6 @@
+
+
+ some-external-id
+ https://hal-test.archives-ouvertes.fr/some-external-id
+ some awesome author
+
diff --git a/swh/deposit/tests/api/data/atom/entry-data3.xml b/swh/deposit/tests/api/data/atom/entry-data3.xml
new file mode 100644
index 00000000..c75d9739
--- /dev/null
+++ b/swh/deposit/tests/api/data/atom/entry-data3.xml
@@ -0,0 +1,6 @@
+
+
+ another one
+ no one
+ 2017-10-07T15:17:08Z
+
diff --git a/swh/deposit/tests/api/data/atom/metadata.xml b/swh/deposit/tests/api/data/atom/metadata.xml
new file mode 100644
index 00000000..65f58543
--- /dev/null
+++ b/swh/deposit/tests/api/data/atom/metadata.xml
@@ -0,0 +1,32 @@
+
+
+ Composing a Web of Audio Applications
+ hal
+ hal-01243065
+ hal-01243065
+ https://hal-test.archives-ouvertes.fr/hal-01243065
+ test
+ DSP programming
+ this is the description
+ 1
+ phpstorm
+ stable
+ php
+ python
+ C
+
+ GNU General Public License v3.0 only
+
+
+ CeCILL Free Software License Agreement v1.1
+
+
+ HAL
+ hal@ccsd.cnrs.fr
+
+
+ Morane Gruenpeter
+
+%s
+
diff --git a/swh/deposit/tests/api/test_deposit_private_read_metadata.py b/swh/deposit/tests/api/test_deposit_private_read_metadata.py
index 2ccc10f9..c1e4ae02 100644
--- a/swh/deposit/tests/api/test_deposit_private_read_metadata.py
+++ b/swh/deposit/tests/api/test_deposit_private_read_metadata.py
@@ -1,646 +1,601 @@
# Copyright (C) 2017-2019 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
-
from django.urls import reverse
from rest_framework import status
-from rest_framework.test import APITestCase
from swh.deposit.models import Deposit
-from swh.deposit.config import PRIVATE_GET_DEPOSIT_METADATA
-from swh.deposit.config import DEPOSIT_STATUS_LOAD_SUCCESS
-from swh.deposit.config import DEPOSIT_STATUS_PARTIAL
+from swh.deposit.config import (
+ PRIVATE_GET_DEPOSIT_METADATA, SWH_PERSON, EDIT_SE_IRI
+)
-from swh.deposit.config import SWH_PERSON
-from swh.deposit.tests.common import (
- BasicTestCase, WithAuthTestCase, CommonCreationRoutine
-)
+PRIVATE_GET_DEPOSIT_METADATA_NC = PRIVATE_GET_DEPOSIT_METADATA + '-nc'
-class DepositReadMetadataTest(APITestCase, WithAuthTestCase, BasicTestCase,
- CommonCreationRoutine):
- """Deposit access to read metadata information on deposit.
+def private_get_raw_url_endpoints(collection, deposit):
+ """There are 2 endpoints to check (one with collection, one without)"""
+ deposit_id = deposit if isinstance(deposit, int) else deposit.id
+ return [
+ reverse(PRIVATE_GET_DEPOSIT_METADATA,
+ args=[collection.name, deposit_id]),
+ reverse(PRIVATE_GET_DEPOSIT_METADATA_NC,
+ args=[deposit_id])
+ ]
+
+
+def update_deposit(authenticated_client, collection, deposit, atom_dataset):
+ for atom_data in ['entry-data2', 'entry-data3']:
+ update_deposit_with_metadata(
+ authenticated_client, collection, deposit, atom_dataset[atom_data]
+ )
+ return deposit
- """
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- self.template_metadata = """
-
- Composing a Web of Audio Applications
- hal
- hal-01243065
- hal-01243065
- https://hal-test.archives-ouvertes.fr/hal-01243065
- test
- DSP programming
- this is the description
- 1
- phpstorm
- stable
- php
- python
- C
-
- GNU General Public License v3.0 only
-
-
- CeCILL Free Software License Agreement v1.1
-
-
- HAL
- hal@ccsd.cnrs.fr
-
-
- Morane Gruenpeter
-
-%s
-"""
-
- def private_deposit_url(self, deposit_id):
- return reverse(PRIVATE_GET_DEPOSIT_METADATA,
- args=[self.collection.name, deposit_id])
-
- def test_read_metadata(self):
- """Private metadata read api to existing deposit should return metadata
-
- """
- deposit_id = self.create_deposit_partial()
-
- url = self.private_deposit_url(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')
+def update_deposit_with_metadata(authenticated_client, collection, deposit,
+ metadata):
+ # update deposit's metadata
+ response = authenticated_client.post(
+ reverse(EDIT_SE_IRI, args=[collection.name, deposit.id]),
+ content_type='application/atom+xml;type=entry',
+ data=metadata,
+ HTTP_SLUG=deposit.external_id,
+ HTTP_IN_PROGRESS=True)
+ assert response.status_code == status.HTTP_201_CREATED
+ return deposit
+
+
+def test_read_metadata(
+ authenticated_client, deposit_collection, partial_deposit,
+ atom_dataset):
+ """Private metadata read api to existing deposit should return metadata
+
+ """
+ deposit = partial_deposit
+ deposit.external_id = 'some-external-id'
+ deposit.save()
+ deposit = update_deposit(authenticated_client, deposit_collection, deposit,
+ atom_dataset)
+
+ for url in private_get_raw_url_endpoints(deposit_collection, deposit):
+ response = authenticated_client.get(url)
+ assert response.status_code == status.HTTP_200_OK
+ assert response._headers['content-type'][1] == 'application/json'
data = response.json()
expected_meta = {
+ 'branch_name': 'master',
'origin': {
- 'url': 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id',
- 'type': 'deposit'
+ 'type': 'deposit',
+ 'url': 'https://hal-test.archives-ouvertes.fr/some-external-id'
},
'origin_metadata': {
'metadata': {
'@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',
- 'url': 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id'
+ 'url': 'https://hal-test.archives-ouvertes.fr/some-external-id' # noqa
},
'provider': {
- 'provider_name': 'hal',
+ 'metadata': {},
+ 'provider_name': '',
'provider_type': 'deposit_client',
- 'provider_url': 'https://hal-test.archives-ouvertes.fr/',
- 'metadata': {}
+ 'provider_url': 'https://hal-test.archives-ouvertes.fr/'
},
'tool': {
+ 'configuration': {'sword_version': '2'},
'name': 'swh-deposit',
- 'version': '0.0.1',
- 'configuration': {
- 'sword_version': '2'
- }
+ 'version': '0.0.1'
}
},
'revision': {
- 'synthetic': True,
+ 'author': SWH_PERSON,
+ 'committer': SWH_PERSON,
'committer_date': {
- 'timestamp': {
- 'seconds': 1507389428,
- 'microseconds': 0
- },
+ 'negative_utc': False,
'offset': 0,
- 'negative_utc': False
+ 'timestamp': {
+ 'microseconds': 0,
+ 'seconds': 1507389428
+ }
},
- 'message': 'hal: Deposit %s in collection hal' % deposit_id,
- 'author': SWH_PERSON,
- 'committer': SWH_PERSON,
'date': {
- 'timestamp': {
- 'seconds': 1507389428,
- 'microseconds': 0
- },
+ 'negative_utc': False,
'offset': 0,
- 'negative_utc': False
+ 'timestamp': {'microseconds': 0, 'seconds': 1507389428}
},
+ 'message': 'test: Deposit %s in collection test' % deposit.id,
'metadata': {
'@xmlns': ['http://www.w3.org/2005/Atom'],
- 'author': ['some awesome author', 'another one', 'no one'],
- 'external_identifier': 'some-external-id',
+ 'author': ['some awesome author',
+ 'another one',
+ 'no one'],
'codemeta:dateCreated': '2017-10-07T15:17:08Z',
- 'url': 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id'
+ 'external_identifier': 'some-external-id',
+ 'url': 'https://hal-test.archives-ouvertes.fr/some-external-id' # noqa
},
+ 'synthetic': True,
'type': 'tar'
- },
- 'branch_name': 'master',
+ }
}
- self.assertEqual(data, expected_meta)
-
- def test_read_metadata_revision_with_parent(self):
- """Private read metadata to a deposit (with parent) returns metadata
+ assert data == expected_meta
- """
- swh_id = 'da78a9d4cf1d5d29873693fd496142e3a18c20fa'
- swh_persistent_id = 'swh:1:rev:%s' % swh_id
- deposit_id1 = self.create_deposit_with_status(
- status=DEPOSIT_STATUS_LOAD_SUCCESS,
- external_id='some-external-id',
- swh_id=swh_persistent_id)
- deposit_parent = Deposit.objects.get(pk=deposit_id1)
- self.assertEqual(deposit_parent.swh_id, swh_persistent_id)
- self.assertEqual(deposit_parent.external_id, 'some-external-id')
- self.assertEqual(deposit_parent.status, DEPOSIT_STATUS_LOAD_SUCCESS)
+def test_read_metadata_revision_with_parent(
+ authenticated_client, deposit_collection, partial_deposit,
+ atom_dataset):
+ """Private read metadata to a deposit (with parent) returns metadata
- deposit_id = self.create_deposit_partial(
- external_id='some-external-id')
-
- deposit = Deposit.objects.get(pk=deposit_id)
- self.assertEqual(deposit.external_id, 'some-external-id')
- self.assertEqual(deposit.swh_id, None)
- self.assertEqual(deposit.parent, deposit_parent)
- self.assertEqual(deposit.status, DEPOSIT_STATUS_PARTIAL)
-
- url = self.private_deposit_url(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')
+ """
+ deposit = partial_deposit
+ deposit.external_id = 'some-external-id'
+ deposit.save()
+ deposit = update_deposit(authenticated_client, deposit_collection, deposit,
+ atom_dataset)
+ rev_id = 'da78a9d4cf1d5d29873693fd496142e3a18c20fa'
+ swh_id = 'swh:1:rev:%s' % rev_id
+ fake_parent = Deposit(swh_id=swh_id,
+ client=deposit.client, collection=deposit.collection)
+ fake_parent.save()
+ deposit.parent = fake_parent
+ deposit.save()
+
+ for url in private_get_raw_url_endpoints(deposit_collection, deposit):
+ response = authenticated_client.get(url)
+
+ assert response.status_code == status.HTTP_200_OK
+ assert response._headers['content-type'][1] == 'application/json'
data = response.json()
expected_meta = {
+ 'branch_name': 'master',
'origin': {
- 'url': 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id',
- 'type': 'deposit'
+ 'type': 'deposit',
+ 'url': 'https://hal-test.archives-ouvertes.fr/some-external-id'
},
'origin_metadata': {
'metadata': {
'@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',
- 'url': 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id'
+ 'url': 'https://hal-test.archives-ouvertes.fr/some-external-id' # noqa
},
'provider': {
- 'provider_name': 'hal',
+ 'metadata': {},
+ 'provider_name': '',
'provider_type': 'deposit_client',
- 'provider_url': 'https://hal-test.archives-ouvertes.fr/',
- 'metadata': {}
+ 'provider_url': 'https://hal-test.archives-ouvertes.fr/'
},
'tool': {
+ 'configuration': {'sword_version': '2'},
'name': 'swh-deposit',
- 'version': '0.0.1',
- 'configuration': {
- 'sword_version': '2'
- }
+ 'version': '0.0.1'
}
},
'revision': {
- 'synthetic': True,
- 'date': {
- 'timestamp': {
- 'seconds': 1507389428,
- 'microseconds': 0
- },
- 'offset': 0,
- 'negative_utc': False
- },
+ 'author': SWH_PERSON,
+ 'committer': SWH_PERSON,
'committer_date': {
+ 'negative_utc': False,
+ 'offset': 0,
'timestamp': {
- 'seconds': 1507389428,
- 'microseconds': 0
- },
+ 'microseconds': 0,
+ 'seconds': 1507389428
+ }
+ },
+ 'date': {
+ 'negative_utc': False,
'offset': 0,
- 'negative_utc': False
+ 'timestamp': {'microseconds': 0, 'seconds': 1507389428}
},
- 'author': SWH_PERSON,
- 'committer': SWH_PERSON,
- 'type': 'tar',
- 'message': 'hal: Deposit %s in collection hal' % deposit_id,
+ 'message': 'test: Deposit %s in collection test' % deposit.id,
'metadata': {
'@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',
- 'url': 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id'
+ 'url': 'https://hal-test.archives-ouvertes.fr/some-external-id' # noqa
},
- 'parents': [swh_id]
- },
- 'branch_name': 'master',
+ 'synthetic': True,
+ 'type': 'tar',
+ 'parents': [rev_id],
+ }
}
- self.assertEqual(data, expected_meta)
+ assert data == expected_meta
+
- def test_read_metadata_3(self):
- """date(Created|Published) provided, uses author/committer date
+def test_read_metadata_3(
+ authenticated_client, deposit_collection, partial_deposit,
+ atom_dataset):
+ """date(Created|Published) provided, uses author/committer date
- """
- # add metadata to the deposit with datePublished and dateCreated
- codemeta_entry_data = self.template_metadata % """
+ """
+ deposit = partial_deposit
+ deposit.external_id = 'hal-01243065'
+ deposit.save()
+ deposit = update_deposit(
+ authenticated_client, deposit_collection, deposit,
+ atom_dataset)
+ # add metadata to the deposit with datePublished and dateCreated
+ codemeta_entry_data = atom_dataset['metadata'] % b"""
2015-04-06T17:08:47+02:00
2017-05-03T16:08:47+02:00
"""
+ update_deposit_with_metadata(
+ authenticated_client, deposit_collection, deposit,
+ codemeta_entry_data
+ )
- deposit_id = self.create_deposit_partial_with_data_in_args(
- codemeta_entry_data)
- url = self.private_deposit_url(deposit_id)
- response = self.client.get(url)
+ for url in private_get_raw_url_endpoints(deposit_collection, deposit):
+ response = authenticated_client.get(url)
- self.assertEqual(response.status_code,
- status.HTTP_200_OK)
- self.assertEqual(response._headers['content-type'][1],
- 'application/json')
+ assert response.status_code == status.HTTP_200_OK
+ assert 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'
- },
+ metadata = {
+ '@xmlns': ['http://www.w3.org/2005/Atom'],
+ '@xmlns:codemeta': 'https://doi.org/10.5063/SCHEMA/CODEMETA-2.0',
+ 'author': [
+ 'some awesome author',
+ 'another one',
+ 'no one',
+ {
+ '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:dateCreated': ['2017-10-07T15:17:08Z',
+ '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:name': 'GNU General Public License v3.0 only'},
+ {'codemeta:name': 'CeCILL '
+ 'Free '
+ 'Software '
+ 'License '
+ 'Agreement '
+ 'v1.1'}],
'codemeta:programmingLanguage': [
- 'php', 'python', 'C'
+ 'php',
+ 'python',
+ 'C'
],
'codemeta:runtimePlatform': 'phpstorm',
'codemeta:url': 'https://hal-test.archives-ouvertes.fr/hal-01243065', # noqa
'codemeta:version': '1',
- 'external_identifier': 'hal-01243065',
+ 'external_identifier': [
+ 'some-external-id',
+ 'hal-01243065'
+ ],
'id': 'hal-01243065',
- 'title': 'Composing a Web of Audio Applications'
+ 'title': 'Composing a Web of Audio '
+ 'Applications',
+ 'url': 'https://hal-test.archives-ouvertes.fr/some-external-id'
}
-
- expected_origin_metadata = {
- 'metadata': expected_metadata,
- 'provider': {
- 'metadata': {},
- 'provider_name': 'hal',
- 'provider_type': 'deposit_client',
- 'provider_url': 'https://hal-test.archives-ouvertes.fr/'
+ expected_meta = {
+ 'branch_name': 'master',
+ 'origin': {
+ 'type': 'deposit',
+ 'url': 'https://hal-test.archives-ouvertes.fr/hal-01243065'
},
- 'tool': {
- 'configuration': {
- 'sword_version': '2'
+ 'origin_metadata': {
+ 'metadata': metadata,
+ 'provider': {
+ 'metadata': {},
+ 'provider_name': '',
+ 'provider_type': 'deposit_client',
+ 'provider_url': 'https://hal-test.archives-ouvertes.fr/'
},
- '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
+ 'tool': {
+ 'configuration': {'sword_version': '2'},
+ 'name': 'swh-deposit',
+ 'version': '0.0.1'
}
},
- '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,
+ 'revision': {
+ 'author': SWH_PERSON,
+ 'committer': SWH_PERSON,
+ 'committer_date': {'negative_utc': False,
+ 'offset': 120,
+ 'timestamp': {'microseconds': 0,
+ 'seconds': 1493820527}},
+ 'date': {
+ 'negative_utc': False,
+ 'offset': 0,
+ 'timestamp': {'microseconds': 0, 'seconds': 1507389428}
+ },
+ 'message': '%s: Deposit %s in collection %s' % (
+ deposit_collection.name,
+ deposit.id,
+ deposit_collection.name
+ ),
+ 'metadata': metadata,
+ 'synthetic': True,
+ 'type': 'tar'
+ }
}
+ assert data == expected_meta
- 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 % ''
+def test_read_metadata_4(
+ authenticated_client, deposit_collection, atom_dataset,
+ partial_deposit):
+ """dateCreated/datePublished not provided, revision uses complete_date
- deposit_id = self.create_deposit_partial_with_data_in_args(
- codemeta_entry_data)
+ """
+ deposit = partial_deposit
+ codemeta_entry_data = atom_dataset['metadata'] % b''
+ deposit = update_deposit_with_metadata(
+ authenticated_client, deposit_collection, deposit,
+ 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()
+ # will use the deposit completed date as fallback date
+ deposit.complete_date = '2016-04-06'
+ deposit.save()
- url = self.private_deposit_url(deposit_id)
- response = self.client.get(url)
+ for url in private_get_raw_url_endpoints(deposit_collection, deposit):
+ response = authenticated_client.get(url)
- self.assertEqual(response.status_code,
- status.HTTP_200_OK)
- self.assertEqual(response._headers['content-type'][1],
- 'application/json')
+ assert response.status_code == status.HTTP_200_OK
+ assert 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 = {
+ 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'
- },
+ '@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: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: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:url':
+ 'https://hal-test.archives-ouvertes.fr/hal-01243065',
'codemeta:version': '1',
'external_identifier': 'hal-01243065',
'id': 'hal-01243065',
- 'title': 'Composing a Web of Audio Applications'
+ 'title': 'Composing a Web of Audio '
+ 'Applications'
+ }
+
+ expected_origin = {
+ 'type': 'deposit',
+ 'url': 'https://hal-test.archives-ouvertes.fr/%s' % (
+ deposit.external_id)
}
expected_origin_metadata = {
- 'metadata': expected_metadata,
+ 'metadata': metadata,
'provider': {
'metadata': {},
- 'provider_name': 'hal',
+ 'provider_name': '',
'provider_type': 'deposit_client',
'provider_url': 'https://hal-test.archives-ouvertes.fr/'
},
'tool': {
- 'configuration': {
- 'sword_version': '2'
- },
+ '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
- }
- },
+ '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,
+ 'timestamp': {'microseconds': 0, 'seconds': 1459900800}},
+ 'message': '%s: Deposit %s in collection %s' % (
+ deposit_collection.name, deposit.id, deposit_collection.name
+ ),
+ 'metadata': 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)
+ assert 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.
+def test_read_metadata_5(
+ authenticated_client, deposit_collection, partial_deposit,
+ atom_dataset):
+ """dateCreated/datePublished provided, revision uses author/committer
+ date
- """
- # add metadata to the deposit with multiple datePublished/dateCreated
- codemeta_entry_data = self.template_metadata % """
+ If multiple dateCreated provided, the first occurrence (of
+ dateCreated) is selected. If multiple datePublished provided,
+ the first occurrence (of datePublished) is selected.
+
+ """
+ deposit = partial_deposit
+ # add metadata to the deposit with multiple datePublished/dateCreated
+ codemeta_entry_data = atom_dataset['metadata'] % b"""
2015-04-06T17:08:47+02:00
2017-05-03T16:08:47+02:00
2016-04-06T17:08:47+02:00
2018-05-03T16:08:47+02:00
"""
+ deposit = update_deposit_with_metadata(
+ authenticated_client, deposit_collection, deposit,
+ codemeta_entry_data)
- deposit_id = self.create_deposit_partial_with_data_in_args(
- codemeta_entry_data)
- url = self.private_deposit_url(deposit_id)
- response = self.client.get(url)
+ for url in private_get_raw_url_endpoints(deposit_collection, deposit):
+ response = authenticated_client.get(url)
- self.assertEqual(response.status_code,
- status.HTTP_200_OK)
- self.assertEqual(response._headers['content-type'][1],
- 'application/json')
+ assert response.status_code == status.HTTP_200_OK
+ assert response._headers['content-type'][1] == 'application/json'
data = response.json()
expected_origin = {
'type': 'deposit',
- 'url': 'https://hal-test.archives-ouvertes.fr/hal-01243065'
+ 'url': 'https://hal-test.archives-ouvertes.fr/external-id-partial'
}
- expected_metadata = {
+
+ 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'
- },
+ '@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: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': 'GNU '
+ 'General '
+ 'Public '
+ 'License '
+ 'v3.0 '
+ 'only'},
{
- 'codemeta:name':
- 'CeCILL Free Software License Agreement v1.1'
+ 'codemeta:name': 'CeCILL '
+ 'Free '
+ 'Software '
+ 'License '
+ 'Agreement '
+ 'v1.1'
}
],
- 'codemeta:programmingLanguage': [
- 'php', 'python', 'C'
- ],
+ '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'
+ 'title': 'Composing a Web of Audio '
+ 'Applications'
}
expected_origin_metadata = {
- 'metadata': expected_metadata,
+ 'metadata': metadata,
'provider': {
'metadata': {},
- 'provider_name': 'hal',
+ 'provider_name': '',
'provider_type': 'deposit_client',
- 'provider_url': 'https://hal-test.archives-ouvertes.fr/'
- },
+ 'provider_url': 'https://hal-test.archives-ouvertes.fr/'},
'tool': {
- 'configuration': {
- 'sword_version': '2'
- },
+ '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,
+ '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': '%s: Deposit %s in collection %s' % (
+ deposit_collection.name, deposit.id, deposit_collection.name
+ ),
+ 'metadata': metadata,
'synthetic': True,
'type': 'tar'
}
expected_meta = {
'branch_name': 'master',
'origin': expected_origin,
'origin_metadata': expected_origin_metadata,
- 'revision': expected_revision,
+ 'revision': expected_revision
}
- self.assertEqual(data, expected_meta)
+ assert data == expected_meta
- def test_access_to_nonexisting_deposit_returns_404_response(self):
- """Read unknown collection should return a 404 response
- """
- unknown_id = '999'
- url = self.private_deposit_url(unknown_id)
- response = self.client.get(url)
- self.assertEqual(response.status_code,
- status.HTTP_404_NOT_FOUND)
- self.assertIn('Deposit with id %s does not exist' % unknown_id,
- response.content.decode('utf-8'))
+def test_access_to_nonexisting_deposit_returns_404_response(
+ authenticated_client, deposit_collection, ):
+ """Read unknown collection should return a 404 response
-
-class DepositReadMetadataTest2(DepositReadMetadataTest):
- def private_deposit_url(self, deposit_id):
- return reverse(PRIVATE_GET_DEPOSIT_METADATA+'-nc',
- args=[deposit_id])
+ """
+ unknown_id = 999
+ try:
+ Deposit.objects.get(pk=unknown_id)
+ except Deposit.DoesNotExist:
+ assert True
+
+ for url in private_get_raw_url_endpoints(deposit_collection, unknown_id):
+ response = authenticated_client.get(url)
+ assert response.status_code == status.HTTP_404_NOT_FOUND
+ msg = 'Deposit with id %s does not exist' % unknown_id
+ assert msg in response.content.decode('utf-8')