def test_set_full_name(subschema): expected = {'full_name': 'Carberry, Josiah'} builder = SignatureBuilder() builder.set_full_name('Josiah Carberry') assert_field_valid(expected, builder.obj, 'full_name', subschema)
def test_curate(subschema): expected = {'curated_relation': True} builder = SignatureBuilder() builder.curate() assert_field_valid(expected, builder.obj, 'curated_relation', subschema)
def test_signature_builder(subschema): expected = { 'full_name': 'Smith, John', } builder = SignatureBuilder() builder.set_full_name('Smith, John') result = builder.obj assert expected == result assert validate(result, subschema) is None
def test_add_raw_affiliation(subschema): expected = { 'raw_affiliations': [ { 'value': 'Josiah Carberry', 'source': 'source', }, ], } builder = SignatureBuilder() builder.add_raw_affiliation('Josiah Carberry', 'source') assert_field_valid(expected, builder.obj, 'raw_affiliations', subschema)
def test_set_uid(subschema): expected = { 'ids': [ { 'value': 'Josiah.Stinkney.Carberry.1', 'schema': 'INSPIRE BAI', }, { 'value': '0000-0002-1825-0097', 'schema': 'ORCID', }, { 'value': 'INSPIRE-12345678', 'schema': 'INSPIRE ID', }, ], } builder = SignatureBuilder() builder.set_uid('Josiah.Stinkney.Carberry.1') builder.set_uid('0000-0003-2635-0212') builder.set_uid('0000-0002-1825-0097') # expect overwrite builder.set_uid('INSPIRE-12345678') assert_field_valid(expected, builder.obj, 'ids', subschema)
def test_add_affiliation(subschema): expected = { 'affiliations': [ { 'value': 'Institution', 'curated_relation': True, 'record': { '$ref': 'http://reference' }, }, ], } builder = SignatureBuilder() builder.add_affiliation('Institution', True, {'$ref': 'http://reference'}) assert_field_valid(expected, builder.obj, 'affiliations', subschema)
def test_signature_builder_existing_author(subschema): existing = { 'full_name': 'Smith, John', } expected = { 'full_name': 'Smith, John', 'emails': [ '*****@*****.**', ], 'ids': [ { 'value': '0000-0003-2635-0212', 'schema': 'ORCID', }, ], } builder = SignatureBuilder(existing) builder.add_email('*****@*****.**') builder.set_uid('0000-0003-2635-0212') result = builder.obj assert expected == result assert result is existing assert validate(result, subschema) is None
def test_add_inspire_role(subschema): expected = {'inspire_roles': ['supervisor', 'editor']} builder = SignatureBuilder() builder.add_inspire_role('supervisor') builder.add_inspire_role('editor') assert_field_valid(expected, builder.obj, 'inspire_roles', subschema)
def test_add_credit_role(subschema): expected = {'credit_roles': ['Conceptualization', 'Software']} builder = SignatureBuilder() builder.add_credit_role('Conceptualization') builder.add_credit_role('Software') assert_field_valid(expected, builder.obj, 'credit_roles', subschema)
def test_ensure_list_field(): expected = {'created': ['new'], 'existing': ['old', 'new']} builder = SignatureBuilder({'existing': ['old']}) builder._ensure_list_field('created', 'new') builder._ensure_list_field('existing', 'new') result = builder.obj assert expected == result
def test_public_method_ignores_none_params(field_name): builder = SignatureBuilder() field = getattr(builder, field_name) if not inspect.ismethod(field) or field_name.startswith('_'): return argc = len(inspect.getargspec(field).args) - 1 if argc == 0: return argv = [None] * argc field(*argv) assert builder.obj == {}
def test_add_email(subschema): expected = { 'emails': [ '*****@*****.**', '*****@*****.**', ] } builder = SignatureBuilder() builder.add_email('*****@*****.**') builder.add_email('*****@*****.**') assert_field_valid(expected, builder.obj, 'emails', subschema)
def test_add_alternative_name(subschema): expected = { 'alternative_names': [ u'Petrovich Sidorov, Ivan', u'Петрович Сидоров, Иван', ] } builder = SignatureBuilder() builder.add_alternative_name(u'Petrovich Sidorov, Ivan') builder.add_alternative_name(u'Петрович Сидоров, Иван') assert_field_valid(expected, builder.obj, 'alternative_names', subschema)
def make_author(self, full_name, affiliations=(), roles=(), raw_affiliations=(), source=None, ids=(), emails=(), alternative_names=(), record=None): """Make a subrecord representing an author. Args: full_name(str): full name of the author. If not yet in standard Inspire form, it will be normalized. affiliations(List[str]): Inspire normalized affiliations of the author. roles(List[str]): Inspire roles of the author. raw_affiliations(List[str]): raw affiliation strings of the author. source(str): source for the affiliations when ``affiliations_normalized`` is ``False``. ids(List[Tuple[str,str]]): list of ids of the author, whose elements are of the form ``(schema, value)``. emails(List[str]): email addresses of the author. alternative_names(List[str]): alternative names of the author. record(dict): reference to the author record Returns: dict: a schema-compliant subrecord. """ builder = SignatureBuilder() builder.set_full_name(full_name) builder.set_record(record) for affiliation in affiliations: builder.add_affiliation(affiliation) for role in roles: builder.add_inspire_role(role) for raw_affiliation in raw_affiliations: builder.add_raw_affiliation(raw_affiliation, source or self.source) for id_schema, id_value in ids: if id_schema and id_value: builder.set_uid(id_value, schema=id_schema) for email in emails: builder.add_email(email) for alternative_name in alternative_names: builder.add_alternative_name(alternative_name) return builder.obj