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

97 lines
3.3 KiB
Python

#!/usr/bin/env python3
from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from redmine_ticket_meta import (
normalize_name,
resolve_id_by_name,
users_from_memberships,
)
from redmine_ticket_contacts import (
ContactCache,
contact_display_name,
filter_contacts,
primary_email,
)
from redmine_tickets import build_fields_payload_from_args, build_parser, inject_default_sync_command
class MetaResolveTest(unittest.TestCase):
def test_resolve_status(self):
statuses = [{"id": 1, "name": "New"}, {"id": 5, "name": "Closed"}]
self.assertEqual(5, resolve_id_by_name(statuses, "closed"))
self.assertEqual(5, resolve_id_by_name(statuses, "5"))
def test_users_from_memberships(self):
users = users_from_memberships(
[
{"user": {"id": 2, "name": "Jason T.", "login": "jason"}},
{"user": {"id": 2, "name": "Jason T."}},
{"group": {"id": 9, "name": "CS"}},
]
)
self.assertEqual(1, len(users))
self.assertEqual(2, resolve_id_by_name(users, "jason", name_keys=("name", "login")))
def test_set_fields_name_cli_parse(self):
args = build_parser().parse_args(
inject_default_sync_command(
[
"--project",
"customer-service",
"set-fields",
"--issue-id",
"1",
"--status",
"Closed",
"--assigned-to",
"unassigned",
]
)
)
self.assertEqual("Closed", args.status_name)
self.assertEqual("unassigned", args.assignee_name)
# build with resolved
payload = build_fields_payload_from_args(
args,
resolved_ids={"status_id": 5, "assigned_to_id": 0},
)
self.assertEqual(5, payload["status_id"])
self.assertIsNone(payload["assigned_to_id"])
class ContactsCacheTest(unittest.TestCase):
def test_write_filter(self):
with tempfile.TemporaryDirectory() as td:
cache = ContactCache(Path(td))
cache.write_contact(
{
"id": 7,
"name": "Ada Lovelace",
"email": "ada@example.com",
"company": "Analytical Engines",
"updated_on": "2026-07-01T00:00:00Z",
"tag_list": ["customer", "vip"],
}
)
loaded = cache.load_contact(7)
self.assertEqual("Ada Lovelace", contact_display_name(loaded))
self.assertEqual("ada@example.com", primary_email(loaded))
allc = list(cache.iter_contacts())
hits = filter_contacts(allc, query="analytical", tag="customer")
self.assertEqual(1, len(hits))
self.assertFalse(cache.should_fetch({"id": 7, "updated_on": "2026-07-01T00:00:00Z"}))
self.assertTrue(cache.should_fetch({"id": 7, "updated_on": "2026-07-02T00:00:00Z"}))
class NormalizeTest(unittest.TestCase):
def test_normalize(self):
self.assertEqual("jason t.", normalize_name(" Jason T. "))
if __name__ == "__main__":
unittest.main()