86 lines
2.9 KiB
Python
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()
|