def test_returns_dois_from_the_resolved_record(record):
    record.return_value = [{
        'control_number': 123,
        'dois': [
            {
                'value': '10.1103/PhysRevD.94.054021',
            },
        ],
    }]

    hep_schema = load_schema('hep')
    subschema = hep_schema['properties']['references']
    schema = ReferenceItemSchemaV1()
    dump = {
        'record': {
            '$ref': 'http://localhost:5000/api/literature/123',
        }
    }
    assert validate([dump], subschema) is None

    expected = {
        'control_number': 123,
        'dois': [
            {
                'value': '10.1103/PhysRevD.94.054021',
            },
        ],
    }
    result = schema.dumps(dump).data
    assert expected == json.loads(result)
def test_returns_arxiv_eprints_from_the_resolved_record(record):
    record.return_value = [{
        'control_number': 123,
        'arxiv_eprints': [
            {
                'value': '1606.09129',
                'categories': 'hep',
            },
        ]
    }]

    hep_schema = load_schema('hep')
    subschema = hep_schema['properties']['references']
    schema = ReferenceItemSchemaV1()
    dump = {
        'record': {
            '$ref': 'http://localhost:5000/api/literature/123',
        }
    }
    assert validate([dump], subschema) is None

    expected = {
        'control_number': 123,
        'arxiv_eprint': [
            {
                'value': '1606.09129'
            }
        ]
    }
    result = schema.dumps(dump).data
    assert expected == json.loads(result)
def test_returns_no_misc_if_titles_persent_in_the_resolved_record(record):
    record.return_value = [{
        'control_number': 123,
        'titles': [
            {
                'source': 'arXiv',
                'title': 'Theoretical limit of residual amplitude modulation in electro-optic modulators'
            },
            {
                'source': 'arXiv',
                'title': 'Fundamental level of residual amplitude modulation in phase modulation processes'
            },
        ],
    }]

    hep_schema = load_schema('hep')
    subschema = hep_schema['properties']['references']
    schema = ReferenceItemSchemaV1()
    dump = {
        'record': {
            '$ref': 'http://localhost:5000/api/literature/123',
        },
        'reference': {
            'label': '123',
            'misc': [
                'A misc',
            ]
        }
    }
    assert validate([dump], subschema) is None

    result = schema.dumps(dump).data
    assert 'misc' not in json.loads(result)
def test_returns_no_misc_if_title_persent():
    hep_schema = load_schema('hep')
    subschema = hep_schema['properties']['references']
    schema = ReferenceItemSchemaV1()
    dump = {
        'reference': {
            'title': {
                'title': 'Jessica Jones',
            },
            'misc': [
                'A Misc',
            ]
        }
    }
    expected = {
        'titles': [
            {
                'title': 'Jessica Jones'
            }
        ]
    }

    assert validate([dump], subschema) is None

    result = schema.dumps(dump).data
    assert expected == json.loads(result)
def test_returns_empty_if_no_reference_or_record_field():
    schema = ReferenceItemSchemaV1()
    dump = {}
    expected = {}

    result = schema.dumps(dump).data
    assert expected == json.loads(result)
def test_returns_non_empty_fields_if_some_fields_missing():
    schema = ReferenceItemSchemaV1()
    dump = {
        'reference': {
            'label': '123',
            'control_number': 123,
        },
    }
    expected = {
        'label': '123',
        'control_number': 123,
    }

    result = schema.dumps(dump).data
    assert expected == json.loads(result)
def test_forces_collaborations_to_be_object_if_reference_not_linked():
    schema = ReferenceItemSchemaV1()
    dump = {
        'reference': {
            'collaborations': ['CMS', 'LHCb'],
        },
    }
    expected = {
        'collaborations': [
            {'value': 'CMS'},
            {'value': 'LHCb'},
        ],
    }

    result = schema.dumps(dump).data
    assert expected == json.loads(result)
def test_returns_non_empty_fields():
    schema = ReferenceItemSchemaV1()
    dump = {
        'reference': {
            'label': '123',
            'control_number': 123,
            'authors': [
                {
                    'full_name': 'Jessica, Jones',
                },
            ],
            'publication_info': {
                'journal_title': 'Alias Investigations',
            },
            'title': {
                'title': 'Jessica Jones',
            },
        }
    }
    expected = {
        'label':
        '123',
        'control_number':
        123,
        'authors': [{
            'first_name': 'Jones',
            'full_name': 'Jessica, Jones',
            'last_name': 'Jessica'
        }],
        'publication_info': [{
            'journal_title': 'Alias Investigations',
        }],
        'titles': [{
            'title': 'Jessica Jones'
        }]
    }

    result = schema.dumps(dump).data

    assert expected == json.loads(result)
def test_returns_only_first_misc():
    hep_schema = load_schema('hep')
    subschema = hep_schema['properties']['references']
    schema = ReferenceItemSchemaV1()

    dump = {
        'reference': {
            'label': '123',
            'misc': [
                'A Misc',
                'Another Misc',
            ]
        }
    }

    expected = {
        'label': '123',
        'misc': 'A Misc',
    }
    assert validate([dump], subschema) is None

    result = schema.dumps(dump).data
    assert expected == json.loads(result)
def test_returns_non_empty_fields():
    schema = ReferenceItemSchemaV1()
    dump = {
        'reference': {
            'label': '123',
            'authors': [
                {
                    'full_name': 'Jessica, Jones',
                },
            ],
            'publication_info': {
                'journal_title': 'Alias Investigations',
            },
            'title': {
                'title': 'Jessica Jones',
            },
            'arxiv_eprint': '1207.7214',
            'dois': [
                '10.1016/j.physletb.2012.08.020',
            ],
            'urls': [
                {
                    'value': 'http://www.claymath.org/prize-problems',
                },
                {
                    'value': 'http://www.arthurjaffe.com',
                },
            ],
            'collaborations': [
                'CMS',
                'ATLAS Team'
            ]
        }
    }
    expected = {
        'label': '123',
        'authors': [
            {
                'first_name': 'Jones',
                'full_name': 'Jessica, Jones',
                'last_name': 'Jessica'
            }
        ],
        'publication_info': [{
            'journal_title': 'Alias Investigations',
        }],
        'titles': [
            {
                'title': 'Jessica Jones'
            }
        ],
        'arxiv_eprint': [
            {
                'value': '1207.7214',
            }
        ],
        'dois': [
            {
                'value': '10.1016/j.physletb.2012.08.020',
            },
        ],
        'urls': [
            {
                'value': 'http://www.claymath.org/prize-problems',
            },
            {
                'value': 'http://www.arthurjaffe.com',
            },
        ],
        'collaborations': [
            {
                'value': 'CMS'
            }
        ],
        'collaborations_with_suffix': [
            {
                'value': 'ATLAS Team'
            },
        ],
    }

    result = schema.dumps(dump).data
    assert expected == json.loads(result)