brickfrog commited on
Commit
022dce0
·
verified ·
1 Parent(s): 62ca4de

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. tests/test_logging_module.py +107 -0
tests/test_logging_module.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ import os
3
+ import sys
4
+ from datetime import datetime
5
+ from ankigen.logging import setup_logger
6
+
7
+
8
+ def test_setup_logger_returns_logger():
9
+ """1) setup_logger returns a logging.Logger"""
10
+ logger = setup_logger("test_returns_logger")
11
+ assert isinstance(logger, logging.Logger)
12
+ assert logger.name == "test_returns_logger"
13
+
14
+
15
+ def test_setup_logger_handlers(tmp_path, monkeypatch):
16
+ """2) Logger has exactly 2 handlers (StreamHandler + FileHandler)"""
17
+ # Redirect home directory to tmp_path to avoid creating files in actual home
18
+ monkeypatch.setattr(
19
+ "ankigen.logging.os.path.expanduser", lambda x: str(tmp_path) if x == "~" else x
20
+ )
21
+
22
+ logger = setup_logger("test_handlers")
23
+
24
+ # Check number of handlers
25
+ assert len(logger.handlers) == 2
26
+
27
+ handler_types = [type(h) for h in logger.handlers]
28
+ # One should be StreamHandler (for console)
29
+ assert any(
30
+ issubclass(t, logging.StreamHandler) and not issubclass(t, logging.FileHandler)
31
+ for t in handler_types
32
+ )
33
+ # One should be FileHandler
34
+ assert any(issubclass(t, logging.FileHandler) for t in handler_types)
35
+
36
+ # Verify StreamHandler uses stdout
37
+ console_handler = next(
38
+ h
39
+ for h in logger.handlers
40
+ if isinstance(h, logging.StreamHandler)
41
+ and not isinstance(h, logging.FileHandler)
42
+ )
43
+ assert console_handler.stream == sys.stdout
44
+
45
+
46
+ def test_file_handler_path_pattern(tmp_path, monkeypatch):
47
+ """3) File handler writes to the correct path pattern"""
48
+ monkeypatch.setattr(
49
+ "ankigen.logging.os.path.expanduser", lambda x: str(tmp_path) if x == "~" else x
50
+ )
51
+
52
+ name = "test_path"
53
+ logger = setup_logger(name)
54
+
55
+ file_handler = next(
56
+ h for h in logger.handlers if isinstance(h, logging.FileHandler)
57
+ )
58
+ log_file_path = file_handler.baseFilename
59
+
60
+ timestamp = datetime.now().strftime("%Y%m%d")
61
+ # Expected pattern: ~/.ankigen/logs/{name}_{YYYYMMDD}.log
62
+ expected_path = tmp_path / ".ankigen" / "logs" / f"{name}_{timestamp}.log"
63
+
64
+ assert os.path.abspath(log_file_path) == os.path.abspath(str(expected_path))
65
+ # Check if the directory was created
66
+ assert os.path.exists(os.path.dirname(log_file_path))
67
+
68
+
69
+ def test_setup_logger_clears_old_handlers(tmp_path, monkeypatch):
70
+ """4) Calling setup_logger twice with same name clears old handlers (no duplicates)"""
71
+ monkeypatch.setattr(
72
+ "ankigen.logging.os.path.expanduser", lambda x: str(tmp_path) if x == "~" else x
73
+ )
74
+
75
+ name = "test_clear_handlers"
76
+ logger = setup_logger(name)
77
+ assert len(logger.handlers) == 2
78
+ initial_handlers = list(logger.handlers)
79
+
80
+ # Call again with same name
81
+ logger2 = setup_logger(name)
82
+ assert logger is logger2
83
+ assert len(logger2.handlers) == 2
84
+
85
+ # Ensure handlers were replaced, not accumulated
86
+ for handler in initial_handlers:
87
+ assert handler not in logger2.handlers
88
+
89
+
90
+ def test_custom_log_level_respected():
91
+ """5) Custom log_level is respected"""
92
+ name_debug = "test_log_level_debug"
93
+ logger_debug = setup_logger(name_debug, log_level=logging.DEBUG)
94
+ assert logger_debug.level == logging.DEBUG
95
+
96
+ name_info = "test_log_level_info"
97
+ logger_info = setup_logger(name_info, log_level=logging.INFO)
98
+ assert logger_info.level == logging.INFO
99
+
100
+
101
+ def test_custom_name_creates_distinct_logger():
102
+ """6) Custom name creates a distinct logger"""
103
+ logger1 = setup_logger("logger1")
104
+ logger2 = setup_logger("logger2")
105
+ assert logger1.name == "logger1"
106
+ assert logger2.name == "logger2"
107
+ assert logger1 is not logger2