test(formatter): add typehints

This commit is contained in:
Kristofers Solo 2024-09-12 14:12:32 +03:00
parent c62b284c56
commit 9737781604

View File

@ -1,25 +1,28 @@
import json import json
import logging import logging
from logging import LogRecord
from pathlib import Path from pathlib import Path
from typing import Optional
from unittest import TestCase from unittest import TestCase
from unittest.mock import patch from unittest.mock import Mock, patch
from bunyan_formatter import BunyanFormatter from bunyan_formatter import BunyanFormatter
class TestBunyanFormatter(TestCase): class TestBunyanFormatter(TestCase):
def setUp(self): def setUp(self) -> None:
self.project_name = "test_project" self.project_name = "test_project"
self.project_root = Path("/path/to/project") self.project_root = Path("/path/to/project")
self.formatter = BunyanFormatter(self.project_name, self.project_root) self.formatter = BunyanFormatter(self.project_name, self.project_root)
def create_log_record(self, level, msg, pathname): def create_log_record(self, level: int, msg: str, pathname: str) -> LogRecord:
return logging.LogRecord( return LogRecord(name="test_logger", level=level, pathname=pathname, lineno=42, msg=msg, args=(), exc_info=None)
name="test_logger", level=level, pathname=pathname, lineno=42, msg=msg, args=(), exc_info=None
)
@patch("socket.gethostname") @patch("socket.gethostname")
def test_format_basic(self, mock_gethostname): def test_format_basic(self, mock_gethostname: Optional[Mock]) -> None:
if mock_gethostname is None:
raise ValueError("mock_gethostname should not be None")
mock_gethostname.return_value = "test_host" mock_gethostname.return_value = "test_host"
record = self.create_log_record(logging.INFO, "Test message", "/path/to/project/test.py") record = self.create_log_record(logging.INFO, "Test message", "/path/to/project/test.py")
@ -36,25 +39,27 @@ class TestBunyanFormatter(TestCase):
assert log_entry["line"] == 42 assert log_entry["line"] == 42
assert log_entry["file"] == "test.py" assert log_entry["file"] == "test.py"
def test_format_different_levels(self): def test_format_different_levels(self) -> None:
levels = [logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL] levels = [logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL]
expected_levels = [20, 30, 40, 50, 60] expected_levels = [20, 30, 40, 50, 60]
for level, expected in zip(levels, expected_levels): for level, expected in zip(levels, expected_levels, strict=False):
record = self.create_log_record(level, f"Test {logging.getLevelName(level)}", "/path/to/project/test.py") record = self.create_log_record(level, f"Test {logging.getLevelName(level)}", "/path/to/project/test.py")
formatted = self.formatter.format(record) formatted = self.formatter.format(record)
log_entry = json.loads(formatted) log_entry = json.loads(formatted)
assert log_entry["level"] == expected assert log_entry["level"] == expected
assert log_entry["levelname"] == logging.getLevelName(level) assert log_entry["levelname"] == logging.getLevelName(level)
def test_format_file_outside_project(self): def test_format_file_outside_project(self) -> None:
record = self.create_log_record(logging.INFO, "Test message", "/path/outside/project/test.py") record = self.create_log_record(logging.INFO, "Test message", "/path/outside/project/test.py")
formatted = self.formatter.format(record) formatted = self.formatter.format(record)
log_entry = json.loads(formatted) log_entry = json.loads(formatted)
assert log_entry["file"] == "/path/outside/project/test.py" assert log_entry["file"] == "/path/outside/project/test.py"
@patch("socket.gethostname") @patch("socket.gethostname")
def test_format_hostname_consistency(self, mock_gethostname): def test_format_hostname_consistency(self, mock_gethostname: Optional[Mock]) -> None:
if mock_gethostname is None:
raise ValueError("mock_gethostname should not be None")
mock_gethostname.return_value = "test_host" mock_gethostname.return_value = "test_host"
record1 = self.create_log_record(logging.INFO, "Message 1", "/path/to/project/test1.py") record1 = self.create_log_record(logging.INFO, "Message 1", "/path/to/project/test1.py")
record2 = self.create_log_record(logging.INFO, "Message 2", "/path/to/project/test2.py") record2 = self.create_log_record(logging.INFO, "Message 2", "/path/to/project/test2.py")
@ -67,7 +72,7 @@ class TestBunyanFormatter(TestCase):
assert log_entry1["hostname"] == log_entry2["hostname"] assert log_entry1["hostname"] == log_entry2["hostname"]
def test_format_time(self): def test_format_time(self) -> None:
record = self.create_log_record(logging.INFO, "Test message", "/path/to/project/test.py") record = self.create_log_record(logging.INFO, "Test message", "/path/to/project/test.py")
formatted = self.formatter.format(record) formatted = self.formatter.format(record)
log_entry = json.loads(formatted) log_entry = json.loads(formatted)