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

96 lines
3.1 KiB
Python

#!/usr/bin/env python3
from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from unittest.mock import patch
from redmine_ticket_entities import extract_entities
from redmine_tickets import (
is_closed_status,
maybe_convert_to_textile,
resolve_body_text,
build_parser,
inject_default_sync_command,
)
import argparse
class OpenOnlyTest(unittest.TestCase):
def test_closed(self):
self.assertTrue(is_closed_status({"status": {"name": "Closed", "is_closed": True}}))
self.assertTrue(is_closed_status({"status": {"name": "Closed"}}))
self.assertFalse(is_closed_status({"status": {"name": "New"}}))
class EntityTightenTest(unittest.TestCase):
def test_item_no_and_noise(self):
text = "Order ID: 1013179 UPS 1ZT33T62A898848403 item 212345678 SKU-ABC-99 order-mode responsive-title"
ents = extract_entities(text)
types = {e["type"]: e["value"] for e in ents}
self.assertEqual("1ZT33T62A898848403", types.get("tracking_ups"))
self.assertIn("order_id", types)
self.assertEqual("1013179", types["order_id"])
self.assertEqual("212345678", types.get("item_no"))
# HTML noise should not become order_id
values = [e["value"] for e in ents if e["type"] == "order_id"]
self.assertNotIn("responsive-title", values)
self.assertNotIn("lation-mode", values)
class BodyFileTextileTest(unittest.TestCase):
def test_body_file(self):
with tempfile.TemporaryDirectory() as td:
p = Path(td) / "note.md"
p.write_text("# Hello\n\nWorld", encoding="utf-8")
ns = argparse.Namespace(body=None, body_file=p, to_textile=False)
self.assertIn("Hello", resolve_body_text(ns))
def test_to_textile_without_pandoc(self):
with patch("shutil.which", return_value=None):
out = maybe_convert_to_textile("plain")
self.assertEqual("plain", out)
class CliFlagsTest(unittest.TestCase):
def test_flags(self):
args = build_parser().parse_args(
inject_default_sync_command(
[
"search",
"--open-only",
"--where",
"assigned_to IS NULL",
"--max-tickets",
"5",
]
)
)
self.assertTrue(args.open_only)
args2 = build_parser().parse_args(
inject_default_sync_command(
["browse", "--open-only", "--no-preview", "--once"]
)
)
self.assertTrue(args2.open_only)
self.assertTrue(args2.no_preview)
args3 = build_parser().parse_args(
inject_default_sync_command(
[
"note",
"--issue-id",
"1",
"--body-file",
"/tmp/x",
"--to-textile",
"--private",
]
)
)
self.assertTrue(args3.to_textile)
if __name__ == "__main__":
unittest.main()