#!/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()