mirror of
https://github.com/kristoferssolo/bunyan-formatter.git
synced 2025-10-21 17:20:35 +00:00
test(formatter): add typehints
This commit is contained in:
parent
c62b284c56
commit
9737781604
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user