Commit 9c298a5d authored by Pierre Smeyers's avatar Pierre Smeyers
Browse files

test: add pytest tests

parent 57d7d02d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ include:
    inputs:
      image: "registry.hub.docker.com/library/python:3.12"
      ruff-enabled: true
      pytest-enabled: true
      package-enabled: true
      release-enabled: true
      sbom-disabled: true

tests/helper.py

0 → 100644
+44 −0
Original line number Diff line number Diff line
from tbc_check import checker


def make_var_fixture(name: str, description: str, default: str, type: checker.TbcVarType):
    input_name = name.lower().replace("_","-")
    input_type = None
    if type == checker.TbcVarType.boolean:
        input_type = "boolean"
    elif type == checker.TbcVarType.text:
        input_type = "string"

    return {
        "tbc_var": checker.TbcVar(
            name=name,
            description=description,
            type=type,
            default=default
        ),
        "var_prefix": "",
        "tpl_spec": {
            "spec": {
                "inputs" : {
                    input_name: {
                        "description": description,
                        "type": input_type,
                        "default": default
                    }
                }
            }
        },
        "tpl_body": {
            "variables": {
                name: f"$[[ inputs.{input_name} ]]"
            }
        },
        "root_kicker": None,
        "doc_vars": [checker.DocVar(
            var_name=name,
            input_name=input_name,
            description=description,
            default_cell=f"`{default}`",
            lock=False
        )]
    }
+35 −0
Original line number Diff line number Diff line
import pytest

from tbc_check import checker


def test_check_job_good_jobs(capfd: pytest.CaptureFixture[str]):
    tpl_body = {
        "workflow": None,
        "variables": None,
        "stages": None,
        ".hidden": None,
        "prefix-job1": {},
        "prefix-job2": {},
    }

    res = checker._check_job("prefix-job1", tpl_body, "prefix")
    out, err = capfd.readouterr()
    assert out == ("")


def test_check_job_bad_jobs(capfd: pytest.CaptureFixture[str]):
    tpl_body = {
        "workflow": None,
        "variables": None,
        "stages": None,
        ".hidden": None,
        "bad-prefix-job1": {},
        "bad-prefix-job2": {},
    }

    res = checker._check_job("bad-prefix-job1", tpl_body, "prefix")
    out, err = capfd.readouterr()
    assert out == (
        "  \x1b[0;31m✕ job <bad-prefix-job1>: doesn't start with prefix (prefix)\x1b[0m\n"
    )
+73 −0
Original line number Diff line number Diff line
import helper
import pytest

from tbc_check import checker

KICKER_VAR_STRING = helper.make_var_fixture(
    name="A_STRING",
    description="string var",
    type=checker.TbcVarType.text,
    default="some_value",
)

KICKER_VAR_STRING_W_EMPTY_DEFAULT = helper.make_var_fixture(
    name="A_STRING", description="string var", type=checker.TbcVarType.text, default=""
)

KICKER_VAR_IMAGE = helper.make_var_fixture(
    name="TEST_IMAGE",
    description="test image",
    type=checker.TbcVarType.text,
    default="registry.hub.docker.com/library/test:latest",
)

KICKER_VAR_IMAGE_W_NO_REGISTRY = helper.make_var_fixture(
    name="TEST_IMAGE",
    description="test image",
    type=checker.TbcVarType.text,
    default="test:latest",
)

KICKER_VAR_IMAGE_W_UNCOMMON_HOST = helper.make_var_fixture(
    name="TEST_IMAGE",
    description="test image",
    type=checker.TbcVarType.text,
    default="registry.acme.tbc/test:latest",
)


def test_check_var_a_string(capfd: pytest.CaptureFixture[str]):
    res = checker._check_var(**KICKER_VAR_STRING)
    out, err = capfd.readouterr()
    assert out == ("  \x1b[0;32m✓\x1b[0m <A_STRING/a-string>: OK\n")


def test_check_var_a_string_w_empty_default(capfd: pytest.CaptureFixture[str]):
    res = checker._check_var(**KICKER_VAR_STRING_W_EMPTY_DEFAULT)
    out, err = capfd.readouterr()
    assert out == (
        "  \x1b[0;31m✕ <A_STRING>: empty default shall be omitted in Kicker\x1b[0m\n"
    )


def test_check_var_image_registry_good(capfd: pytest.CaptureFixture[str]):
    res = checker._check_var(**KICKER_VAR_IMAGE)
    out, err = capfd.readouterr()
    assert out == ("  \x1b[0;32m✓\x1b[0m <TEST_IMAGE/test-image>: OK\n")


def test_check_var_image_registry_bad(capfd: pytest.CaptureFixture[str]):
    res = checker._check_var(**KICKER_VAR_IMAGE_W_NO_REGISTRY)
    out, err = capfd.readouterr()
    assert out == (
        "  \x1b[0;31m✕ <TEST_IMAGE>: container images must explicitly specify the registry\x1b[0m\n"
    )


# def test_check_var_image_registry_uncommon(capfd: pytest.CaptureFixture[str]):
#     res = checker._check_var(**KICKER_VAR_IMAGE_W_UNCOMMON_HOST)
#     out, err = capfd.readouterr()
#     assert out == (
#         "  \x1b[0;33m⚠ <TEST_IMAGE/test-image> uses a less common registry host 'registry.acme.tbc'\x1b[0m\n"
#         "  \x1b[0;32m✓\x1b[0m <TEST_IMAGE/test-image>: OK\n"
#     )