mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 16:55:40 +00:00
29c4b97622
Some initial tests for verify docs functionality. Differential Revision: https://phabricator.services.mozilla.com/D60299 --HG-- extra : moz-landing-system : lando
148 lines
5.4 KiB
Python
148 lines
5.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
"""
|
|
There are some basic tests run as part of the Decision task to make sure
|
|
documentation exists for taskgraph functionality.
|
|
These functions are defined in taskgraph.generator and call
|
|
taskgraph.util.verify.verify_docs with different parameters to do the
|
|
actual checking.
|
|
"""
|
|
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
import os.path
|
|
|
|
import pytest
|
|
import taskgraph.util.verify
|
|
from taskgraph.util.verify import (
|
|
DocPaths,
|
|
verify_docs
|
|
)
|
|
from taskgraph import GECKO
|
|
from mozunit import main
|
|
|
|
FF_DOCS_BASE = os.path.join(GECKO, 'taskcluster', 'docs')
|
|
EXTRA_DOCS_BASE = os.path.abspath(os.path.join(os.path.dirname(__file__), 'docs'))
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_single_doc_path(monkeypatch):
|
|
"""Set a single path containing documentation"""
|
|
mocked_documentation_paths = DocPaths()
|
|
mocked_documentation_paths.add(FF_DOCS_BASE)
|
|
monkeypatch.setattr(taskgraph.util.verify, "documentation_paths", mocked_documentation_paths)
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_two_doc_paths(monkeypatch):
|
|
"""Set two paths containing documentation"""
|
|
mocked_documentation_paths = DocPaths()
|
|
mocked_documentation_paths.add(FF_DOCS_BASE)
|
|
mocked_documentation_paths.add(EXTRA_DOCS_BASE)
|
|
monkeypatch.setattr(taskgraph.util.verify, "documentation_paths", mocked_documentation_paths)
|
|
|
|
|
|
@pytest.mark.usefixtures("mock_single_doc_path")
|
|
class PyTestSingleDocPath:
|
|
"""
|
|
Taskcluster documentation for Firefox is in a single directory. Check the tests
|
|
running at build time to make sure documentation exists, actually work themselves.
|
|
"""
|
|
def test_heading(self):
|
|
"""
|
|
Look for a headings in filename matching identifiers. This is used when making sure
|
|
documentation exists for kinds and attributes.
|
|
"""
|
|
verify_docs(
|
|
filename="kinds.rst",
|
|
identifiers=['build', 'packages', 'toolchain'],
|
|
appearing_as="heading"
|
|
)
|
|
with pytest.raises(Exception, match='missing from doc file'):
|
|
verify_docs(
|
|
filename="kinds.rst",
|
|
identifiers=['build', 'packages', 'badvalue'],
|
|
appearing_as="heading"
|
|
)
|
|
|
|
def test_inline_literal(self):
|
|
"""
|
|
Look for inline-literals in filename. Used when checking documentation for decision
|
|
task parameters and run-using functions.
|
|
"""
|
|
verify_docs(
|
|
filename="parameters.rst",
|
|
identifiers=['base_repository', 'head_repository', 'owner'],
|
|
appearing_as="inline-literal"
|
|
)
|
|
with pytest.raises(Exception, match='missing from doc file'):
|
|
verify_docs(
|
|
filename="parameters.rst",
|
|
identifiers=['base_repository', 'head_repository', 'badvalue'],
|
|
appearing_as="inline-literal"
|
|
)
|
|
|
|
|
|
@pytest.mark.usefixtures("mock_two_doc_paths")
|
|
class PyTestTwoDocPaths:
|
|
"""
|
|
Thunderbird extends Firefox's taskgraph with additional kinds. The documentation
|
|
for Thunderbird kinds are in its repository, and documentation_paths will have
|
|
two places to look for files. Run the same tests as for a single documentation
|
|
path, and cover additional possible scenarios.
|
|
"""
|
|
def test_heading(self):
|
|
"""
|
|
Look for a headings in filename matching identifiers. This is used when
|
|
making sure documentation exists for kinds and attributes.
|
|
The first test looks for headings that are all within the first doc path,
|
|
the second test is new and has a heading found in the second path.
|
|
The final check has a identifier that will not match and should
|
|
produce an error.
|
|
"""
|
|
verify_docs(
|
|
filename="kinds.rst",
|
|
identifiers=['build', 'packages', 'toolchain'],
|
|
appearing_as="heading"
|
|
)
|
|
verify_docs(
|
|
filename="kinds.rst",
|
|
identifiers=['build', 'packages', 'newkind'],
|
|
appearing_as="heading"
|
|
)
|
|
with pytest.raises(Exception, match='missing from doc file'):
|
|
verify_docs(
|
|
filename="kinds.rst",
|
|
identifiers=['build', 'packages', 'badvalue'],
|
|
appearing_as="heading"
|
|
)
|
|
|
|
def test_inline_literal(self):
|
|
"""
|
|
Look for inline-literals in filename. Used when checking documentation for decision
|
|
task parameters and run-using functions. As with the heading tests,
|
|
the second check looks for an identifier in the added documentation path.
|
|
"""
|
|
verify_docs(
|
|
filename="parameters.rst",
|
|
identifiers=['base_repository', 'head_repository', 'owner'],
|
|
appearing_as="inline-literal"
|
|
)
|
|
verify_docs(
|
|
filename="parameters.rst",
|
|
identifiers=['base_repository', 'head_repository', 'newparameter'],
|
|
appearing_as="inline-literal"
|
|
)
|
|
with pytest.raises(Exception, match='missing from doc file'):
|
|
verify_docs(
|
|
filename="parameters.rst",
|
|
identifiers=['base_repository', 'head_repository', 'badvalue'],
|
|
appearing_as="inline-literal"
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|