def test_load_author_positions():
    data = {
        'positions': [
            {
                'institution': 'Colgate University',
                'start_date': '1994-02-01',
                'end_date': '1995-01-31',
                'rank': 'PHD',
                'current': False,
            },
        ],
    }

    result = Author().load(data).data
    schema = load_schema('authors')
    subschema = schema['properties']['positions']

    expected = {
        '_collections': ['Authors'],
        'positions': [
            {
                'current': False,
                'curated_relation': False,
                'end_date': '1995-01-31',
                'institution': 'Colgate University',
                'rank': 'PHD',
                'start_date': '1994-02-01',
            },
        ],
    }

    assert validate(expected['positions'], subschema) is None
    assert expected == result
def test_dump_author_project_membership():
    data = {
        'project_membership': [
            {
                'institution': 'Colgate University',
                'start_date': '1994-02-01',
                'end_date': '1995-01-31',
                'rank': 'PHD',
                'current': False,
            },
        ],
    }

    result = Author().dump(data).data
    schema = load_schema('authors')
    subschema = schema['properties']['positions']

    expected = {
        'project_membership': [
            {
                'institution': 'Colgate University',
                'start_date': '1994-02-01',
                'end_date': '1995-01-31',
                'rank': 'PHD',
                'current': False,
            },
        ],
    }
    assert validate(data['project_membership'], subschema) is None
    assert expected == result
def test_load_author_project_membership():
    data = {
        'project_membership': [{
            'name': 'pariatur',
            'start_date': '1997-05-01',
            'end_date': '2001-12-31',
            'record': {
                '$ref': 'http://180'
            },
            'current': True
        }],
    }

    result = Author().load(data).data
    schema = load_schema('authors')
    subschema = schema['properties']['project_membership']

    expected = {
        '_collections': ['Authors'],
        'project_membership': [
            {
                'curated_relation': False,
                'current': True,
                'end_date': '2001-12-31',
                'name': 'pariatur',
                'record': {
                    '$ref': 'http://180'
                },
                'start_date': '1997-05-01',
            },
        ],
    }

    assert validate(expected['project_membership'], subschema) is None
    assert expected == result
def test_load_author_acquisition_source():
    data = {
        'acquisition_source': {
            'method': 'submitter',
            'submission_number': '12',
            'internal_uid': 1,
            'email': '*****@*****.**',
            'orcid': '0000-0001-8528-2091',
        },
    }
    schema = load_schema('authors')
    subschema = schema['properties']['acquisition_source']

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'acquisition_source': {
            'method': 'submitter',
            'submission_number': '12',
            'internal_uid': 1,
            'email': '*****@*****.**',
            'orcid': '0000-0001-8528-2091',
        },
    }

    assert validate(result['acquisition_source'], subschema) is None
    assert expected == result
def test_dump_author_advisors():
    data = {
        'advisors': [
            {
                'degree_type':
                'bachelor',
                'ids': [{
                    'schema': 'DESY',
                    'value': 'DESY-55924820881'
                }, {
                    'schema': 'SCOPUS',
                    'value': '7039712595'
                }, {
                    'schema': 'SCOPUS',
                    'value': '8752067273'
                }],
                'name':
                'occaecat qui sint in id',
                'record': {
                    '$ref': 'http://1js40iZ'
                }
            },
        ]
    }
    schema = load_schema('authors')
    subschema = schema['properties']['advisors']

    result = Author().dump(data).data
    expected = {
        'advisors': [
            {
                'degree_type':
                'bachelor',
                'ids': [{
                    'schema': 'DESY',
                    'value': 'DESY-55924820881'
                }, {
                    'schema': 'SCOPUS',
                    'value': '7039712595'
                }, {
                    'schema': 'SCOPUS',
                    'value': '8752067273'
                }],
                'name':
                'occaecat qui sint in id',
                'record': {
                    '$ref': 'http://1js40iZ'
                }
            },
        ]
    }

    assert validate(data['advisors'], subschema) is None
    assert expected == result
def test_load_author_display_name():
    data = {'display_name': 'Jessica Jones'}

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'name': {
            'preferred_name': 'Jessica Jones'
        }
    }

    assert expected == result
def test_dump_author_given_and_family_name_jimmy_case():
    data = {
        'name': {
            'value': 'Jimmy',
        },
    }

    result = Author().dump(data).data
    expected = {
        'given_name': 'Jimmy',
    }

    assert expected == result
def test_dump_author_display_name():
    data = {
        'name': {
            'preferred_name': 'Jessica Jones',
        }
    }

    result = Author().dump(data).data
    expected = {
        'display_name': 'Jessica Jones',
    }

    assert expected == result
def test_dump_author_given_and_family_name_normal_case():
    data = {
        'name': {
            'value': 'Jones, Jessica',
        },
    }

    result = Author().dump(data).data
    expected = {
        'family_name': 'Jones',
        'given_name': 'Jessica',
    }

    assert expected == result
def test_dump_author_given_and_family_name_multiple_names_case():
    data = {
        'name': {
            'value': 'Jones Castle, Jessica Frank',
        },
    }

    result = Author().dump(data).data
    expected = {
        'family_name': 'Jones Castle',
        'given_name': 'Jessica Frank',
    }

    assert expected == result
def test_dump_author_status():
    data = {
        'status': 'active',
    }

    result = Author().dump(data).data
    schema = load_schema('authors')
    subschema = schema['properties']['status']

    expected = {
        'status': 'active',
    }
    assert validate(data['status'], subschema) is None
    assert expected == result
def test_load_author_given_and_family_name_jimmy_case():
    data = {
        'given_name': 'Jimmy',
    }

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'name': {
            'value': 'Jimmy',
        },
    }

    assert expected == result
def test_load_author_given_and_family_name_normal_case_with_unicode():
    data = {
        'family_name': u'Gérard',
        'given_name': u'Jessica',
    }

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'name': {
            'value': u'Gérard, Jessica',
        },
    }

    assert expected == result
def test_dump_author_comments():
    data = {
        '_private_notes': [
            {
                'value': 'THIS IS A NOTE',
            },
        ],
    }
    schema = load_schema('authors')
    subschema = schema['properties']['_private_notes']

    result = Author().dump(data).data

    assert validate(data['_private_notes'], subschema) is None
    assert 'comments' not in result
def test_load_author_given_and_family_name_multiple_names_case():
    data = {
        'family_name': 'Jones Castle',
        'given_name': 'Jessica Frank',
    }

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'name': {
            'value': 'Jones Castle, Jessica Frank',
        },
    }

    assert expected == result
def test_load_author_status():
    data = {
        'status': 'active',
    }

    result = Author().load(data).data
    schema = load_schema('authors')
    subschema = schema['properties']['status']

    expected = {
        '_collections': ['Authors'],
        'status': 'active',
    }

    assert validate(expected['status'], subschema) is None
    assert expected == result
def test_dump_author_orcid():
    data = {
        'ids': [
            {
                'value': '0000-0002-7638-5686',
                'schema': 'ORCID',
            },
        ],
    }
    schema = load_schema('authors')
    subschema = schema['properties']['ids']

    result = Author().dump(data).data
    expected = {'orcid': '0000-0002-7638-5686'}

    assert validate(data['ids'], subschema) is None
    assert expected == result
def test_dump_author_native_name():
    data = {
        'name': {
            'value': 'Jones, Jessica',
            'native_names': [
                'Τζέσικα Τζόουνς',
            ]
        }
    }

    result = Author().dump(data).data
    expected = {
        'native_name': 'Τζέσικα Τζόουνς',
        'family_name': 'Jones',
        'given_name': 'Jessica',
    }

    assert expected == result
def test_load_author_bai():
    data = {'bai': 'T.Zivko.1'}
    schema = load_schema('authors')
    subschema = schema['properties']['ids']

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'ids': [
            {
                'value': 'T.Zivko.1',
                'schema': 'INSPIRE BAI',
            },
        ],
    }

    assert validate(expected['ids'], subschema) is None
    assert expected == result
def test_dump_author_without_blog():
    data = {
        'urls': [
            {
                'value': 'https://www.linkedin.com/in/example-12345/',
                'description': 'something_else',
            },
        ],
    }

    result = Author().dump(data).data
    expected = {
        'websites': [
            'https://www.linkedin.com/in/example-12345/',
        ]
    }

    assert expected == result
def test_load_author_comments():
    data = {
        'comments': 'THIS IS A NOTE',
    }
    schema = load_schema('authors')
    subschema = schema['properties']['_private_notes']

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        '_private_notes': [
            {
                'value': 'THIS IS A NOTE',
            },
        ],
    }

    assert validate(expected['_private_notes'], subschema) is None
    assert expected == result
def test_load_author_native_name():
    data = {
        'native_name': 'Τζέσικα Τζόουνς',
        'family_name': 'Jones',
        'given_name': 'Jessica',
    }

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'name': {
            'value': 'Jones, Jessica',
            'native_names': [
                'Τζέσικα Τζόουνς',
            ]
        }
    }

    assert expected == result
def test_load_author_blog():
    data = {
        'blog': 'https:/myblog.com',
    }
    schema = load_schema('authors')
    subschema = schema['properties']['urls']

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'urls': [
            {
                'value': 'https:/myblog.com',
                'description': 'blog',
            },
        ],
    }
    assert validate(expected['urls'], subschema) is None
    assert expected == result
def test_dump_author_linkedin():
    data = {
        'ids': [
            {
                'value': 'https:/linkedin.com',
                'schema': 'LINKEDIN',
            },
        ],
    }
    schema = load_schema('authors')
    subschema = schema['properties']['ids']

    result = Author().dump(data).data
    expected = {
        'linkedin': 'https:/linkedin.com',
    }

    assert validate(data['ids'], subschema) is None
    assert expected == result
def test_dump_author_twitter():
    data = {
        'ids': [
            {
                'value': 'https:/twitter.com',
                'schema': 'TWITTER',
            },
        ],
    }
    schema = load_schema('authors')
    subschema = schema['properties']['ids']

    result = Author().dump(data).data
    expected = {
        'twitter': 'https:/twitter.com',
    }

    assert validate(data['ids'], subschema) is None
    assert expected == result
def test_dump_author_websites():
    data = {
        'urls': [
            {
                'value': 'http://website.com',
            },
        ],
    }

    result = Author().dump(data).data
    schema = load_schema('authors')
    subschema = schema['properties']['urls']

    expected = {
        'websites': [
            'http://website.com',
        ],
    }
    assert validate(data['urls'], subschema) is None
    assert expected == result
def test_dump_author_public_emails():
    data = {
        'email_addresses': [
            {
                'value': '*****@*****.**',
            },
        ],
    }

    result = Author().dump(data).data
    schema = load_schema('authors')
    subschema = schema['properties']['email_addresses']

    expected = {
        'public_emails': [
            '*****@*****.**',
        ],
    }
    assert validate(data['email_addresses'], subschema) is None
    assert expected == result
def test_dump_author_arxiv_categories():
    data = {
        'arxiv_categories': [
            'math.CV',
            'astro-ph.HE',
            'econ.EM',
        ],
    }
    schema = load_schema('authors')
    subschema = schema['properties']['arxiv_categories']

    result = Author().dump(data).data
    expected = {
        'arxiv_categories': [
            'math.CV',
            'astro-ph.HE',
            'econ.EM',
        ],
    }

    assert validate(data['arxiv_categories'], subschema) is None
    assert expected == result
def test_load_author_advisors():
    data = {
        'advisors': [
            {
                'degree_type':
                'bachelor',
                'ids': [
                    {
                        'schema': 'DESY',
                        'value': 'DESY-55924820881'
                    },
                    {
                        'schema': 'SCOPUS',
                        'value': '7039712595'
                    },
                    {
                        'schema': 'SCOPUS',
                        'value': '8752067273'
                    },
                ],
                'name':
                'occaecat qui sint in id',
                'record': {
                    '$ref': 'http://1js40iZ'
                }
            },
        ]
    }
    schema = load_schema('authors')
    subschema = schema['properties']['advisors']

    result = Author().load(data).data
    expected = {
        '_collections': ['Authors'],
        'advisors': [
            {
                'curated_relation':
                False,
                'degree_type':
                'bachelor',
                'name':
                'Id, Occaecat Qui Sint In',
                'ids': [{
                    'schema': 'DESY',
                    'value': 'DESY-55924820881'
                }, {
                    'schema': 'SCOPUS',
                    'value': '7039712595'
                }, {
                    'schema': 'SCOPUS',
                    'value': '8752067273'
                }],
                'record': {
                    '$ref': 'http://1js40iZ'
                }
            },
        ]
    }

    assert validate(result['advisors'], subschema) is None
    assert expected == result