Skip to content

Module manubot.process.tests.test_metadata

View Source
import copy

import pytest

from ..ci import get_continuous_integration_parameters

from ..metadata import (

    get_header_includes,

    get_manuscript_urls,

    get_thumbnail_url,

)

def test_get_header_includes_description_abstract():

    # test that abstract and description set different fields if both supplied

    variables = {

        "pandoc": {"abstract": "value for abstract"},

        "manubot": {"description": "value for description"},

    }

    header_includes = get_header_includes(copy.deepcopy(variables))

    assert (

        '<meta name="citation_abstract" content="value for abstract" />'

        in header_includes

    )

    assert (

        '<meta name="description" content="value for description" />' in header_includes

    )

    # test that abstract is used for description if description is not defined

    del variables["manubot"]["description"]

    header_includes = get_header_includes(copy.deepcopy(variables))

    assert (

        '<meta name="citation_abstract" content="value for abstract" />'

        in header_includes

    )

    assert '<meta name="description" content="value for abstract" />' in header_includes

    # test that if neither abstract nor description is defined, neither are inserted

    del variables["pandoc"]["abstract"]

    header_includes = get_header_includes(copy.deepcopy(variables))

    assert 'meta name="citation_abstract"' not in header_includes

    assert 'meta name="description"' not in header_includes

ci_params = get_continuous_integration_parameters() or {}

local_only = pytest.mark.skipif(

    ci_params, reason="skipping on CI build since test assumes local behavior"

)

ci_only = pytest.mark.skipif(

    not ci_params,

    reason="skipping on local build since test assumes supported CI behavior",

)

repo_raw_url_template = (

    f"https://github.com/{ci_params.get('repo_slug', '')}"

    f"/raw/{ci_params.get('triggering_commit', '')}/"

)

example_thumbnail_url = (

    repo_raw_url_template + "manubot/process/tests/manuscripts/example/thumbnail.png"

)

@pytest.mark.parametrize(

    ("thumbnail", "expected"),

    [

        pytest.param(None, None, id="None-on-local", marks=local_only),

        pytest.param("", None, id="empty-on-local", marks=local_only),

        pytest.param(None, example_thumbnail_url, id="None-on-ci", marks=ci_only),

        pytest.param("", example_thumbnail_url, id="empty-on-ci", marks=ci_only),

        pytest.param(

            "path/to/thumbnail.png", None, id="local-path-on-local", marks=local_only

        ),

        pytest.param(

            "path/to/thumbnail.png",

            repo_raw_url_template + "path/to/thumbnail.png",

            id="local-path-on-ci",

            marks=ci_only,

        ),

        pytest.param(

            "http://example.com/thumbnail.png",

            "http://example.com/thumbnail.png",

            id="url-http",

        ),

        pytest.param(

            "https://example.com/thumbnail.png",

            "https://example.com/thumbnail.png",

            id="url-https",

        ),

    ],

)

def test_get_thumbnail_url(thumbnail, expected):

    thumbnail_url = get_thumbnail_url(thumbnail)

    assert expected == thumbnail_url

@pytest.mark.parametrize(

    ("html_url", "expected"),

    [

        pytest.param(None, {}, id="html_url-none-local", marks=local_only),

        pytest.param(

            "https://example.com/manuscript/",

            {

                "html_url": "https://example.com/manuscript/",

                "pdf_url": "https://example.com/manuscript/manuscript.pdf",

            },

            id="html_url-set-local",

            marks=local_only,

        ),

        pytest.param(

            None,

            {

                "html_url": "https://manubot.github.io/manubot/",

                "pdf_url": "https://manubot.github.io/manubot/manuscript.pdf",

                "html_url_versioned": f"https://manubot.github.io/manubot/v/{ci_params.get('commit')}/",

                "pdf_url_versioned": f"https://manubot.github.io/manubot/v/{ci_params.get('commit')}/manuscript.pdf",

            },

            id="html_url-none-ci",

            marks=ci_only,

        ),

        pytest.param(

            "https://example.com/manuscript/",

            {

                "html_url": "https://example.com/manuscript/",

                "pdf_url": "https://example.com/manuscript/manuscript.pdf",

                "html_url_versioned": f"https://example.com/manuscript/v/{ci_params.get('commit')}/",

                "pdf_url_versioned": f"https://example.com/manuscript/v/{ci_params.get('commit')}/manuscript.pdf",

            },

            id="html_url-set-ci",

            marks=ci_only,

        ),

    ],

)

def test_get_manuscript_urls(html_url, expected):

    urls = get_manuscript_urls(html_url)

    assert urls == expected

Variables

ci_only
ci_params
example_thumbnail_url
local_only
repo_raw_url_template

Functions

test_get_header_includes_description_abstract

def test_get_header_includes_description_abstract(

)
View Source
def test_get_header_includes_description_abstract():

    # test that abstract and description set different fields if both supplied

    variables = {

        "pandoc": {"abstract": "value for abstract"},

        "manubot": {"description": "value for description"},

    }

    header_includes = get_header_includes(copy.deepcopy(variables))

    assert (

        '<meta name="citation_abstract" content="value for abstract" />'

        in header_includes

    )

    assert (

        '<meta name="description" content="value for description" />' in header_includes

    )

    # test that abstract is used for description if description is not defined

    del variables["manubot"]["description"]

    header_includes = get_header_includes(copy.deepcopy(variables))

    assert (

        '<meta name="citation_abstract" content="value for abstract" />'

        in header_includes

    )

    assert '<meta name="description" content="value for abstract" />' in header_includes

    # test that if neither abstract nor description is defined, neither are inserted

    del variables["pandoc"]["abstract"]

    header_includes = get_header_includes(copy.deepcopy(variables))

    assert 'meta name="citation_abstract"' not in header_includes

    assert 'meta name="description"' not in header_includes

test_get_manuscript_urls

def test_get_manuscript_urls(
    html_url,
    expected
)
View Source
@pytest.mark.parametrize(

    ("html_url", "expected"),

    [

        pytest.param(None, {}, id="html_url-none-local", marks=local_only),

        pytest.param(

            "https://example.com/manuscript/",

            {

                "html_url": "https://example.com/manuscript/",

                "pdf_url": "https://example.com/manuscript/manuscript.pdf",

            },

            id="html_url-set-local",

            marks=local_only,

        ),

        pytest.param(

            None,

            {

                "html_url": "https://manubot.github.io/manubot/",

                "pdf_url": "https://manubot.github.io/manubot/manuscript.pdf",

                "html_url_versioned": f"https://manubot.github.io/manubot/v/{ci_params.get('commit')}/",

                "pdf_url_versioned": f"https://manubot.github.io/manubot/v/{ci_params.get('commit')}/manuscript.pdf",

            },

            id="html_url-none-ci",

            marks=ci_only,

        ),

        pytest.param(

            "https://example.com/manuscript/",

            {

                "html_url": "https://example.com/manuscript/",

                "pdf_url": "https://example.com/manuscript/manuscript.pdf",

                "html_url_versioned": f"https://example.com/manuscript/v/{ci_params.get('commit')}/",

                "pdf_url_versioned": f"https://example.com/manuscript/v/{ci_params.get('commit')}/manuscript.pdf",

            },

            id="html_url-set-ci",

            marks=ci_only,

        ),

    ],

)

def test_get_manuscript_urls(html_url, expected):

    urls = get_manuscript_urls(html_url)

    assert urls == expected

test_get_thumbnail_url

def test_get_thumbnail_url(
    thumbnail,
    expected
)
View Source
@pytest.mark.parametrize(

    ("thumbnail", "expected"),

    [

        pytest.param(None, None, id="None-on-local", marks=local_only),

        pytest.param("", None, id="empty-on-local", marks=local_only),

        pytest.param(None, example_thumbnail_url, id="None-on-ci", marks=ci_only),

        pytest.param("", example_thumbnail_url, id="empty-on-ci", marks=ci_only),

        pytest.param(

            "path/to/thumbnail.png", None, id="local-path-on-local", marks=local_only

        ),

        pytest.param(

            "path/to/thumbnail.png",

            repo_raw_url_template + "path/to/thumbnail.png",

            id="local-path-on-ci",

            marks=ci_only,

        ),

        pytest.param(

            "http://example.com/thumbnail.png",

            "http://example.com/thumbnail.png",

            id="url-http",

        ),

        pytest.param(

            "https://example.com/thumbnail.png",

            "https://example.com/thumbnail.png",

            id="url-https",

        ),

    ],

)

def test_get_thumbnail_url(thumbnail, expected):

    thumbnail_url = get_thumbnail_url(thumbnail)

    assert expected == thumbnail_url