This commit is contained in:
Mikan
2026-03-09 21:42:02 +03:00
commit 9ad75f11e5
19 changed files with 1520 additions and 0 deletions

82
tests/test_config.py Normal file
View File

@@ -0,0 +1,82 @@
import json
import os
import tempfile
from unittest.mock import patch
import pytest
from time_tracker.core.config import load_config, save_config
def test_load_config_creates_default_if_not_exists():
""" creates default when file doesn't exist"""
with tempfile.NamedTemporaryFile(suffix='.json', delete=False) as tmp:
tmp_path = tmp.name
# Remove the file so it doesn't exist
os.unlink(tmp_path)
# Mock the config file path
with patch('time_tracker.core.config.CONFIG_FILE', tmp_path):
config = load_config()
# Check default values
assert config['tracking_enabled'] is True
assert config['window_rules']['work'] == ['PyCharm', 'VS Code']
assert config['window_rules']['distraction'] == ['YouTube', 'Twitter']
assert config.get('current_task_id') is None
# Verify file was created
assert os.path.exists(tmp_path)
def test_save_and_load_config():
"""Test saving and loading config preserves data"""
with tempfile.NamedTemporaryFile(suffix='.json', delete=False) as tmp:
tmp_path = tmp.name
# Clean up after ourselves
if os.path.exists(tmp_path):
os.unlink(tmp_path)
test_config = {
'tracking_enabled': False,
'current_task_id': 'TEST-123',
'window_rules': {
'work': ['Editor'],
'distraction': ['Social Media']
}
}
# Mock the config file path
with patch('time_tracker.core.config.CONFIG_FILE', tmp_path):
save_config(test_config)
loaded_config = load_config()
assert loaded_config['tracking_enabled'] == False
assert loaded_config['current_task_id'] == 'TEST-123'
assert loaded_config['window_rules']['work'] == ['Editor']
assert loaded_config['window_rules']['distraction'] == ['Social Media']
def test_load_config_preserves_existing_values():
"""Test that loading config doesn't overwrite existing values unnecessarily"""
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as tmp:
initial_config = {
'tracking_enabled': True,
'current_task_id': 'EXISTING-123',
'window_rules': {
'work': ['Custom Editor'],
'distraction': ['Gaming App']
}
}
json.dump(initial_config, tmp)
tmp_path = tmp.name
# Mock the config file path
with patch('time_tracker.core.config.CONFIG_FILE', tmp_path):
loaded_config = load_config()
assert loaded_config['tracking_enabled'] == True
assert loaded_config['current_task_id'] == 'EXISTING-123'
assert loaded_config['window_rules']['work'] == ['Custom Editor']
assert loaded_config['window_rules']['distraction'] == ['Gaming App']