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

75 lines
2.6 KiB
Python

#!/usr/bin/env python3
from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from redmine_ticket_entities import extract_entities, extract_entities_from_issue
from redmine_ticket_control_export import export_control_tag_jsonl
from redmine_ticket_control_tags import add_tag, load_store
from redmine_tickets import KNOWN_COMMANDS, build_parser, inject_default_sync_command
class EntityExtractTest(unittest.TestCase):
def test_patterns(self):
text = (
"Order 123-4567890-1234567 UPS 1Z999AA10123456784 "
"Item # SKU-ABC-99 USPS 9400111899223344556677"
)
types = {e["type"] for e in extract_entities(text)}
self.assertIn("tracking_ups", types)
self.assertIn("tracking_usps", types)
self.assertIn("order_amazon", types)
self.assertIn("item_or_sku", types)
def test_noise_suppressed(self):
htmlish = "order-mode responsive-title order-text"
hits = extract_entities(htmlish)
self.assertEqual([], hits)
def test_from_issue(self):
issue = {
"subject": "RET 1ZY228K59066639253",
"description": "Order ID: 1013179 shipped",
"journals": [],
}
ents = extract_entities_from_issue(issue)
types = {e["type"] for e in ents}
self.assertIn("tracking_ups", types)
self.assertIn("order_id", types)
class ControlExportTest(unittest.TestCase):
def test_export(self):
with tempfile.TemporaryDirectory() as td:
cache = Path(td)
add_tag(cache, tag="spammy", issue_id=7, properties=["subject"], annotation="x")
store = load_store(cache)
out = cache / "out.jsonl"
n = export_control_tag_jsonl(
cache_dir=cache,
tags_payload=store,
issues_by_id={7: {"id": 7, "subject": "hello", "status": {"name": "New"}}},
out_path=out,
)
self.assertEqual(1, n)
line = out.read_text(encoding="utf-8").strip()
self.assertIn("spammy", line)
self.assertIn('"issue_id": 7', line)
class CliRegistrationTest(unittest.TestCase):
def test_known_commands(self):
self.assertIn("entities", KNOWN_COMMANDS)
self.assertIn("browse", KNOWN_COMMANDS)
args = build_parser().parse_args(
inject_default_sync_command(["entities", "show", "--issue-id", "1"])
)
self.assertEqual("entities", args.command)
self.assertEqual("show", args.entities_command)
if __name__ == "__main__":
unittest.main()