Skip to content
This repository has been archived by the owner on Feb 27, 2021. It is now read-only.

Commit

Permalink
Add file url to metadata + better tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Beck committed Nov 21, 2019
1 parent 6b4cafd commit d49265b
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 10 deletions.
19 changes: 17 additions & 2 deletions deposit/darkarchive/protocol.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from django.contrib.sites.models import Site

from deposit.darkarchive.forms import DarkArchiveForm
from deposit.protocol import RepositoryProtocol

Expand Down Expand Up @@ -56,6 +58,18 @@ def _get_eissn(self):
return self.publication.journal.essn


def _get_embargo(self, form):
"""
Takes the embargo date from the form and returns it as isoformatted string or None
:param form: django form (BaseMetadataForm)
:returns: string
"""
embargo = form.cleaned_data.get('embargo', None)
if embargo is not None:
embargo = embargo.isoformat()
return embargo


def _get_issn(self):
"""
Returns the issn if available or `None`
Expand All @@ -77,7 +91,7 @@ def _get_license(self, license_chooser):
return d


def _get_metadata(self, form):
def _get_metadata(self, form, pdf):
"""
Creates metadata ready to be converted into JSON.
Mainly we create a dictionary with some types as content that serialize well into JSON
Expand All @@ -98,7 +112,8 @@ def _get_metadata(self, form):
'doctype' : self.paper.doctype,
'doi' : self.publication.doi,
'eissn' : self._get_eissn(),
'embargo' : form.cleaned_data.get('embargo', None),
'embargo' : self._get_embargo(form),
'file_url' : 'https://{}{}'.format(Site.objects.get_current(), pdf.get_absolute_url()),
'issn' : self._get_issn(),
'issue' : self.publication.issue,
'journal' : self.publication.full_journal_title(),
Expand Down
49 changes: 41 additions & 8 deletions deposit/darkarchive/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import os
import pytest

from django import forms

from deposit.models import License
from deposit.models import LicenseChooser
Expand Down Expand Up @@ -37,7 +38,7 @@ class TestDarkArchiveProtocol(MetaTestProtocol):
"""

@pytest.mark.write_darkarchive_examples
def test_write_dark_archive_examples(self, db, upload_data, user_leibniz):
def test_write_dark_archive_examples(self, db, upload_data, user_leibniz, uploaded_pdf):
"""
This is not really a test. It just outputs metadata examples that the protocol generates.
Ususally this test is omitted, you can run it explicetely with "-m write_darkarchive_examples".
Expand Down Expand Up @@ -73,10 +74,10 @@ def test_write_dark_archive_examples(self, db, upload_data, user_leibniz):
licenses = LicenseChooser.objects.by_repository(repository=self.protocol.repository)
data['license'] = lc.pk

form = self.protocol.form_class(licenses=licenses, data=data)
form = self.protocol.form_class(licenses=licenses, embargo='optional', data=data)
form.is_valid()

md = self.protocol._get_metadata(form)
md = self.protocol._get_metadata(form, uploaded_pdf)

f_path = os.path.join(BASE_DIR, 'doc', 'sphinx', 'examples', 'darkarchive')
f_name = os.path.join(f_path, upload_data['load_name'] + '.json')
Expand Down Expand Up @@ -148,6 +149,24 @@ def test_get_eissn_no_journal(self, dummy_oairecord):
assert self.protocol._get_eissn() == None


@pytest.mark.parametrize('value', [None, '2019-01-01'])
def test_get_embargo(self, value):
class test_form(forms.Form):
embargo = forms.DateField(
required=False
)

data = {
'embargo' : value
}
form = test_form(data=data)
valid = form.is_valid()
if not valid:
raise AssertionError("Form not valid")
assert self.protocol._get_embargo(form) == value



@pytest.mark.parametrize('issn', [None, '2343-2345'])
def test_get_issn(self, dummy_oairecord, dummy_journal, issn):
"""
Expand Down Expand Up @@ -190,7 +209,7 @@ def test_get_license(self, license_standard):
assert l.get('transmit_id') == transmit_id


def test_get_metadata(self, upload_data, license_chooser, embargo, depositing_user):
def test_get_metadata(self, upload_data, uploaded_pdf, license_chooser, embargo, depositing_user):
"""
Test if the metadata is correctly generated
"""
Expand All @@ -204,23 +223,37 @@ def test_get_metadata(self, upload_data, license_chooser, embargo, depositing_us
else:
data['abstract'] = upload_data['abstract']

licenses = None
if license_chooser:
data['license'] = license_chooser.pk
licenses = LicenseChooser.objects.by_repository(repository=self.protocol.repository)

if embargo is not 'none':
data['embargo'] = upload_data.get('embargo', None)
if embargo == 'required':
data['embargo'] = '2019-10-10'

data['email'] = depositing_user.email

form = self.protocol.form_class(data=data)
form.is_valid()
form = self.protocol.form_class(licenses=licenses, embargo=embargo, data=data)
valid = form.is_valid()
if not valid:
raise AssertionError("Form not valid")

md = self.protocol._get_metadata(form)
md = self.protocol._get_metadata(form, uploaded_pdf)

md_fields = ['abstract', 'authors', 'date', 'depositor', 'doctype', 'doi', 'eissn', 'embargo', 'issn', 'issue', 'journal', 'page', 'publisher', 'title', 'volume', ]
md_fields = ['abstract', 'authors', 'date', 'depositor', 'doctype', 'doi', 'eissn', 'embargo', 'file_url', 'issn', 'issue', 'journal', 'page', 'publisher', 'title', 'volume', ]

assert all(k in md for k in md_fields) == True

# Assertion for some fields
if license_chooser:
assert md.get('license') != None
if embargo is 'optional':
assert md.get('embargo') == upload_data.get('embargo')
elif embargo is 'required':
assert md.get('embargo') == '2019-10-10'


def test_str(self):
"""
Expand Down

0 comments on commit d49265b

Please sign in to comment.