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

92 lines
2.8 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_attachments import (
attachments_from_issue,
pick_attachment,
safe_filename,
upload_file_token,
)
from redmine_tickets import build_parser, inject_default_sync_command
class AttachmentHelpersTest(unittest.TestCase):
def test_pick_and_safe(self):
atts = [{"id": 1, "filename": "a.pdf"}, {"id": 2, "filename": "b.pdf"}]
self.assertEqual(2, pick_attachment(atts, 2)["id"])
with self.assertRaises(LookupError):
pick_attachment(atts, None)
self.assertEqual(1, pick_attachment([atts[0]], None)["id"])
self.assertEqual("foo_bar.pdf", safe_filename("foo/bar.pdf"))
def test_attachments_from_issue(self):
self.assertEqual([], attachments_from_issue({}))
self.assertEqual(1, len(attachments_from_issue({"attachments": [{"id": 9}]})))
def test_cli_parse(self):
args = build_parser().parse_args(
inject_default_sync_command(
[
"--project",
"customer-service",
"attachments",
"list",
"--issue-id",
"1",
"--refresh",
]
)
)
self.assertEqual("attachments", args.command)
self.assertEqual("list", args.attachments_command)
self.assertTrue(args.refresh)
args2 = build_parser().parse_args(
inject_default_sync_command(
[
"attachments",
"upload",
"--issue-id",
"2",
"--file",
"/tmp/x.pdf",
"--apply",
]
)
)
self.assertEqual("upload", args2.attachments_command)
self.assertTrue(args2.apply)
def test_upload_token_mock(self):
with tempfile.TemporaryDirectory() as td:
path = Path(td) / "note.txt"
path.write_text("hello", encoding="utf-8")
class FakeResp:
def read(self):
return b'{"upload":{"token":"tok.123","id":1}}'
def __enter__(self):
return self
def __exit__(self, *a):
return False
with patch("redmine_ticket_attachments.urllib_request.urlopen", return_value=FakeResp()):
upload = upload_file_token(
base_url="http://192.168.50.170",
api_key="x",
path=path,
)
self.assertEqual("tok.123", upload["token"])
self.assertEqual("note.txt", upload["filename"])
if __name__ == "__main__":
unittest.main()