Viewing files at commit 5dd811a1487aCommit detailsView latest

Browse files
tests/test_oak_field_map.py 77 lines · 2.8 KB · python
1
from __future__ import annotations
2
3
import json
4
import subprocess
5
import sys
6
import unittest
7
from pathlib import Path
8
from unittest import mock
9
10
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts"))
11
12
import oak_field_map
13
14
15
class OakFieldMapTest(unittest.TestCase):
16
    def test_inspect_repo_is_read_only_and_summarizes_remote_open_branches(self) -> None:
17
        outputs = {
18
            ("oak", "status", "--json"): {
19
                "branch": "mrmrs-work",
20
                "head": "abcdef0123456789",
21
                "unmerged_commit_count": 0,
22
                "changes": [],
23
            },
24
            ("oak", "branch", "list", "--remote", "--status", "open", "--json"): [
25
                {"name": "main", "head": "1111111111119999"},
26
                {
27
                    "name": "mrmrs-open",
28
                    "head": "2222222222229999",
29
                    "description": "Clear PR description\n\nMore detail",
30
                },
31
            ],
32
            ("oak", "log", "-n", "8", "--json"): [
33
                {
34
                    "hash": "3333333333339999",
35
                    "branch": "main",
36
                    "description_or_subject": "Recent landing",
37
                }
38
            ],
39
        }
40
        calls: list[tuple[str, ...]] = []
41
42
        def fake_run(command, cwd, check, text, stdout, stderr):
43
            del cwd, check, text, stdout, stderr
44
            key = tuple(command)
45
            calls.append(key)
46
            return subprocess.CompletedProcess(command, 0, json.dumps(outputs[key]), "")
47
48
        with mock.patch("subprocess.run", side_effect=fake_run):
49
            field = oak_field_map.inspect_repo(Path("/tmp/worker/oak"))
50
51
        self.assertEqual(
52
            calls,
53
            [
54
                ("oak", "status", "--json"),
55
                ("oak", "branch", "list", "--remote", "--status", "open", "--json"),
56
                ("oak", "log", "-n", "8", "--json"),
57
            ],
58
        )
59
        self.assertEqual(field["remote_main"]["head"], "1111111111119999")
60
        self.assertEqual(field["remote_non_main_open_branches"][0]["name"], "mrmrs-open")
61
        rendered = oak_field_map.render_markdown([field])
62
        self.assertIn("Open non-main remote branches:", rendered)
63
        self.assertIn("`mrmrs-open` `222222222222` - Clear PR description", rendered)
64
        self.assertIn("`333333333333` `main` Recent landing", rendered)
65
66
    def test_main_returns_nonzero_when_a_probe_fails(self) -> None:
67
        def fake_run(command, cwd, check, text, stdout, stderr):
68
            del command, cwd, check, text, stdout, stderr
69
            return subprocess.CompletedProcess(["oak"], 7, "", "not an oak repo")
70
71
        with mock.patch("subprocess.run", side_effect=fake_run):
72
            with mock.patch("builtins.print"):
73
                self.assertEqual(oak_field_map.main(["--repo", "/tmp/nope"]), 1)
74
75
76
if __name__ == "__main__":
77
    unittest.main()