mirror of
https://github.com/gmbrax/Pilgrim.git
synced 2026-11-10 03:40:16 +00:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ec0c8a6f71 | ||
|
|
9d0bc50350 | ||
|
|
83e7db9ce1 |
@@ -26,6 +26,7 @@ class Photo(Base):
|
|||||||
)
|
)
|
||||||
|
|
||||||
fk_travel_diary_id = Column(Integer, ForeignKey("travel_diaries.id"), nullable=False)
|
fk_travel_diary_id = Column(Integer, ForeignKey("travel_diaries.id"), nullable=False)
|
||||||
|
travel_diary = relationship("TravelDiary", back_populates="photos")
|
||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
Index('idx_photo_hash_diary', 'hash', 'fk_travel_diary_id'),
|
Index('idx_photo_hash_diary', 'hash', 'fk_travel_diary_id'),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class TravelDiary(Base):
|
|||||||
name = Column(String, nullable=False)
|
name = Column(String, nullable=False)
|
||||||
directory_name = Column(String, nullable=False, unique=True)
|
directory_name = Column(String, nullable=False, unique=True)
|
||||||
entries = relationship("Entry", back_populates="travel_diary", cascade="all, delete-orphan")
|
entries = relationship("Entry", back_populates="travel_diary", cascade="all, delete-orphan")
|
||||||
|
photos = relationship("Photo", back_populates="travel_diary", cascade="all, delete-orphan")
|
||||||
|
|
||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
UniqueConstraint('directory_name', name='uq_travel_diary_directory_name'),
|
UniqueConstraint('directory_name', name='uq_travel_diary_directory_name'),
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
import pytest
|
||||||
|
import tomli
|
||||||
|
from pathlib import Path
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pilgrim.utils.config_manager import ConfigManager, SingletonMeta
|
||||||
|
from pilgrim.utils.directory_manager import DirectoryManager
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def clean_singleton():
|
||||||
|
SingletonMeta._instances = {}
|
||||||
|
|
||||||
|
@patch('pilgrim.utils.config_manager.DirectoryManager.get_config_directory')
|
||||||
|
def test_create_default_config_if_not_exists_with_decorator(mock_get_config_dir, tmp_path: Path, clean_singleton):
|
||||||
|
mock_get_config_dir.return_value = str(tmp_path)
|
||||||
|
manager = ConfigManager()
|
||||||
|
config_file = tmp_path / "config.toml"
|
||||||
|
assert not config_file.exists()
|
||||||
|
manager.read_config()
|
||||||
|
assert config_file.exists()
|
||||||
|
assert manager.database_type == "sqlite"
|
||||||
|
|
||||||
|
@patch('pilgrim.utils.config_manager.DirectoryManager.get_config_directory')
|
||||||
|
def test_read_existing_config_with_decorator(mock_get_config_dir, tmp_path: Path, clean_singleton):
|
||||||
|
mock_get_config_dir.return_value = str(tmp_path)
|
||||||
|
custom_config_content = """
|
||||||
|
[database]
|
||||||
|
url = "/custom/path/to/db.sqlite"
|
||||||
|
type = "custom_sqlite"
|
||||||
|
[settings.diary]
|
||||||
|
auto_open_diary_on_startup = "MyCustomDiary"
|
||||||
|
auto_open_on_creation = true
|
||||||
|
"""
|
||||||
|
config_file = tmp_path / "config.toml"
|
||||||
|
config_file.write_text(custom_config_content)
|
||||||
|
|
||||||
|
manager = ConfigManager()
|
||||||
|
manager.read_config()
|
||||||
|
assert manager.database_url == "/custom/path/to/db.sqlite"
|
||||||
|
assert manager.database_type == "custom_sqlite"
|
||||||
|
|
||||||
|
@patch('pilgrim.utils.config_manager.DirectoryManager.get_config_directory')
|
||||||
|
def test_save_config_writes_changes_to_file_with_decorator(mock_get_config_dir, tmp_path: Path, clean_singleton):
|
||||||
|
mock_get_config_dir.return_value = str(tmp_path)
|
||||||
|
manager = ConfigManager()
|
||||||
|
manager.read_config()
|
||||||
|
manager.set_database_url("/novo/caminho.db")
|
||||||
|
manager.set_auto_open_new_diary(True)
|
||||||
|
manager.save_config()
|
||||||
|
config_file = tmp_path / "config.toml"
|
||||||
|
with open(config_file, "rb") as f:
|
||||||
|
data = tomli.load(f)
|
||||||
|
assert data["database"]["url"] == "/novo/caminho.db"
|
||||||
|
assert data["settings"]["diary"]["auto_open_on_creation"] is True
|
||||||
|
|
||||||
|
@patch('pilgrim.utils.config_manager.DirectoryManager.get_config_directory')
|
||||||
|
def test_read_config_raises_error_on_malformed_toml(mock_get_config_dir, tmp_path: Path, clean_singleton):
|
||||||
|
mock_get_config_dir.return_value = str(tmp_path)
|
||||||
|
invalid_toml_content = """
|
||||||
|
[database]
|
||||||
|
url = /caminho/sem/aspas
|
||||||
|
"""
|
||||||
|
config_file = tmp_path / "config.toml"
|
||||||
|
config_file.write_text(invalid_toml_content)
|
||||||
|
manager = ConfigManager()
|
||||||
|
with pytest.raises(ValueError, match="Invalid TOML configuration"):
|
||||||
|
manager.read_config()
|
||||||
Reference in New Issue
Block a user