Files
redmine/tests/test_contact_set_and_bridge.py
Jason Thistlethwaite 9ee9eb3ec6 Organized
2026-10-17 20:50:35 -04:00

86 lines
2.9 KiB
Python

#!/usr/bin/env python3
from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from unittest.mock import MagicMock
from redmine_ticket_contacts import contact_id_from_issue
from redmine_ticket_drafts import KIND_CONTACT_FIELDS, add_draft, kind_label, load_draft, normalize_kind
from redmine_tickets import apply_draft_to_redmine, build_parser, inject_default_sync_command
class ContactBridgeTest(unittest.TestCase):
def test_contact_id_from_issue(self):
self.assertEqual(
99,
contact_id_from_issue({"helpdesk_ticket": {"contact_id": 99}}),
)
self.assertEqual(
7,
contact_id_from_issue({"helpdesk_ticket": {"contact": {"id": 7, "email": "a@b.c"}}}),
)
self.assertIsNone(contact_id_from_issue({"subject": "x"}))
class ContactDraftTest(unittest.TestCase):
def test_kind(self):
self.assertEqual(KIND_CONTACT_FIELDS, normalize_kind("contact_fields"))
self.assertIn("CONTACT UPDATE", kind_label(KIND_CONTACT_FIELDS))
def test_queue_and_apply_mock(self):
with tempfile.TemporaryDirectory() as td:
path = add_draft(
Path(td),
contact_id=42,
kind=KIND_CONTACT_FIELDS,
fields={"tag_list": ["maybe-customer"], "company": "Acme"},
base_url="http://192.168.50.170",
)
_p, draft = load_draft(Path(td), path.stem)
self.assertEqual(42, draft["contact_id"])
self.assertIsNone(draft["issue_id"])
client = MagicMock()
result = apply_draft_to_redmine(
client,
draft,
impersonate_user="rebot",
allow_customer_email=False,
)
client.update_contact.assert_called_once()
self.assertEqual(42, result["contact_id"])
self.assertFalse(result["emailed_customer"])
def test_cli_parse(self):
args = build_parser().parse_args(
inject_default_sync_command(
[
"--project",
"customer-service",
"contact-set",
"--contact-id",
"14",
"--add-tag",
"maybe-customer",
"--company",
"Test Co",
]
)
)
self.assertEqual("contact-set", args.command)
self.assertEqual(14, args.contact_id)
self.assertEqual(["maybe-customer"], args.add_tag)
args2 = build_parser().parse_args(
inject_default_sync_command(
["--project", "customer-service", "ticket-contact", "--issue-id", "41934", "--show"]
)
)
self.assertEqual("ticket-contact", args2.command)
self.assertTrue(args2.show)
if __name__ == "__main__":
unittest.main()