Files
sentinel/tests/tools/test_bump_action.py
2024-02-15 17:01:50 +00:00

122 lines
2.2 KiB
Python

import subprocess
from unittest import mock
import pytest
from tools.bump_action import main
@pytest.fixture
def workflow_and_action(tmp_path):
base = tmp_path.joinpath("root")
base.joinpath(".github/workflows").mkdir(parents=True)
workflow = base.joinpath(".github/workflows/main.yml")
base.joinpath(".github/actions/myaction").mkdir(parents=True)
action = base.joinpath(".github/actions/myaction/action.yml")
yield base, workflow, action
def test_main_noop(workflow_and_action, capsys):
base, workflow, action = workflow_and_action
workflow_src = """\
name: main
on:
push:
jobs:
main:
runs-on: ubuntu-latest
steps:
- run: echo hi
"""
action_src = """\
name: my-action
inputs:
arg:
required: true
runs:
using: composite
steps:
- run: echo hi
shell: bash
"""
workflow.write_text(workflow_src)
action.write_text(action_src)
assert main(("actions/whatever", "v1.2.3", f"--base-dir={base}")) == 0
out, err = capsys.readouterr()
assert out == err == ""
def test_main_upgrades_action(workflow_and_action, capsys):
base, workflow, action = workflow_and_action
workflow_src = """\
name: main
on:
push:
jobs:
main:
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
"""
workflow_expected = """\
name: main
on:
push:
jobs:
main:
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
"""
action_src = """\
name: my-action
inputs:
arg:
required: true
runs:
using: composite
steps:
- uses: actions/[email protected]
"""
action_expected = """\
name: my-action
inputs:
arg:
required: true
runs:
using: composite
steps:
- uses: actions/[email protected]
"""
workflow.write_text(workflow_src)
action.write_text(action_src)
with mock.patch.object(subprocess, "call", return_value=123):
assert main(("actions/whatever", "v1.2.3", f"--base-dir={base}")) == 123
out, err = capsys.readouterr()
assert (
out
== f"""\
{workflow} upgrading actions/whatever...
{action} upgrading actions/whatever...
freezing...
"""
)
assert workflow.read_text() == workflow_expected
assert action.read_text() == action_expected