https://github.com/manubot/manubot.git
Raw File
Tip revision: 5e2eeebe6ad32853c0de051f7a8b2676d770ed59 authored by Daniel Himmelstein on 07 October 2018, 12:03:30 UTC
Prepare v0.2.0 release
Tip revision: 5e2eeeb
test_manubot.py
import pathlib
import subprocess

import pytest

from manubot.process.util import (
    add_author_affiliations,
    read_jsons,
)

directory = pathlib.Path(__file__).parent.resolve()

# List of manuscripts for testing. All subdirectories of ./manuscripts
manuscripts = [path.name for path in
               directory.joinpath('manuscripts').iterdir() if path.is_dir()]


@pytest.mark.parametrize("manuscript", manuscripts)
def test_example_manuscript(manuscript):
    """
    Test command line execution of manubot to build an example manuscript.
    """
    manuscript_dir = directory.joinpath('manuscripts', manuscript)
    args = [
        'manubot',
        'process',
        '--log-level', 'INFO',
        '--content-directory', str(manuscript_dir.joinpath('content')),
        '--output-directory', str(manuscript_dir.joinpath('output')),
    ]
    if manuscript == 'variables':
        args.extend([
            '--template-variables-path',
            str(manuscript_dir.joinpath('content/template-variables.json')),
        ])
    process = subprocess.run(
        args,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
    )
    print(process.args)
    print(process.stderr.decode())
    assert process.returncode == 0


def test_read_jsons_empty():
    paths = []
    user_variables = read_jsons(paths)
    assert isinstance(user_variables, dict) and not user_variables


def test_read_jsons():
    """
    Test reading multiple JSON files, from both local paths and URLs.
    """
    local_path = 'manuscripts/variables/content/template-variables.json'
    local_path = directory.joinpath(local_path)
    paths = [
        'https://git.io/vbkqm',
        'https://git.io/vbkqm',
        'namespace_1=https://git.io/vbkqm',
        'namespace_2=https://git.io/vbkqm',
        f'namespace_2={local_path}',
        f'namespace_3={local_path}',
    ]
    user_variables = read_jsons(paths)
    assert 'namespace_1' in user_variables
    assert 'namespace_2' in user_variables
    assert 'namespace_3' in user_variables
    assert user_variables['generated_by'] == 'Manubot'
    assert 'violet' in user_variables['namespace_1']['rainbow']
    assert 'yellow' in user_variables['namespace_2']['rainbow']
    assert 'orange' in user_variables['namespace_3']['rainbow']


def test_add_author_affiliations_empty():
    variables = {}
    variables['authors'] = [
        {'name': 'Jane Roe'},
        {'name': 'John Doe'},
    ]
    returned_variables = add_author_affiliations(variables)
    assert variables is returned_variables
    assert 'affiliations' not in variables
    for author in variables['authors']:
        assert 'affiliation_numbers' not in author


def test_add_author_affiliations():
    variables = {}
    variables['authors'] = [
        # Deprecated affiliations format (as a string that's `; ` separated)
        {'name': 'Jane Roe', 'affiliations': 'Department of Doe, University of Roe; Peppertea University'},
        # Prefered affiliations format as a list
        {'name': 'John Doe', 'affiliations': ['Unique University', 'Peppertea University']},
    ]
    with pytest.warns(DeprecationWarning):
        returned_variables = add_author_affiliations(variables)
    assert variables is returned_variables
    assert variables['affiliations'] == [
        {'affiliation': 'Department of Doe, University of Roe', 'affiliation_number': 1},
        {'affiliation': 'Peppertea University', 'affiliation_number': 2},
        {'affiliation': 'Unique University', 'affiliation_number': 3},
    ]
    authors = variables['authors']
    assert authors[0]['affiliations'] == [
        'Department of Doe, University of Roe',
        'Peppertea University',
    ]
    assert authors[0]['affiliation_numbers'] == [1, 2]
    assert authors[1]['affiliation_numbers'] == [2, 3]
back to top