"""Tests for merge_pr.py. Mocks api_request and credentials. """ import sys import unittest from unittest.mock import patch sys.path.insert(0, str(__import__("pathlib").Path(__file__).resolve().parent.parent)) import merge_pr # noqa: E402 FAKE_CREDS = "Basic dGVzdHVzZXI6dGVzdHBhc3M=" class TestArgParsing(unittest.TestCase): @patch("merge_pr.api_request") @patch("merge_pr.get_auth_header", return_value=FAKE_CREDS) def test_minimal_required_args(self, _auth, mock_api): rc = merge_pr.main(["--pr-number", "81"]) self.assertEqual(rc, 0) mock_api.assert_called_once() def test_missing_pr_number_exits(self): with self.assertRaises(SystemExit): merge_pr.main([]) class TestAPIPayload(unittest.TestCase): @patch("merge_pr.api_request") @patch("merge_pr.get_auth_header", return_value=FAKE_CREDS) def test_payload_fields(self, _auth, mock_api): rc = merge_pr.main([ "--pr-number", "81", "--do", "squash", "--title", "Squash title", "--message", "Squash message", "--force", ]) self.assertEqual(rc, 0) mock_api.assert_called_once() method, url, auth, payload = mock_api.call_args[0] self.assertEqual(method, "POST") self.assertEqual(auth, FAKE_CREDS) self.assertEqual(payload["Do"], "squash") self.assertEqual(payload["MergeTitleField"], "Squash title") self.assertEqual(payload["MergeMessageField"], "Squash message") self.assertEqual(payload["force_merge"], True) @patch("merge_pr.api_request") @patch("merge_pr.get_auth_header", return_value=FAKE_CREDS) def test_url_construction(self, _auth, mock_api): merge_pr.main(["--pr-number", "81", "--remote", "prgs"]) url = mock_api.call_args[0][1] self.assertEqual( url, "https://gitea.prgs.cc/api/v1/repos/Scaled-Tech-Consulting/Timesheet/pulls/81/merge" ) if __name__ == "__main__": unittest.main()