generated from unai/python_boilerplate
feat: add include_text and exclude_text filters to settings and playlist tests
This commit is contained in:
@@ -175,3 +175,133 @@ class TestSettings:
|
||||
# No debe lanzar excepción
|
||||
settings = Settings()
|
||||
assert not hasattr(settings, "unknown_field")
|
||||
|
||||
# ========================================
|
||||
# Tests para include_text y exclude_text
|
||||
# ========================================
|
||||
|
||||
def test_settings_include_text_default_empty_list(self, monkeypatch):
|
||||
"""Test: include_text tiene valor por defecto lista vacía."""
|
||||
monkeypatch.setenv("HOST", "http://test.com")
|
||||
monkeypatch.setenv("USERNAME", "user")
|
||||
monkeypatch.setenv("PASSWORD", "pass")
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=None)
|
||||
|
||||
assert settings.include_text == []
|
||||
assert isinstance(settings.include_text, list)
|
||||
|
||||
def test_settings_exclude_text_default_empty_list(self, monkeypatch):
|
||||
"""Test: exclude_text tiene valor por defecto lista vacía."""
|
||||
monkeypatch.setenv("HOST", "http://test.com")
|
||||
monkeypatch.setenv("USERNAME", "user")
|
||||
monkeypatch.setenv("PASSWORD", "pass")
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=None)
|
||||
|
||||
assert settings.exclude_text == []
|
||||
assert isinstance(settings.exclude_text, list)
|
||||
|
||||
def test_settings_include_text_from_env_json(self, monkeypatch):
|
||||
"""Test: include_text acepta formato JSON desde variable de entorno."""
|
||||
monkeypatch.setenv("HOST", "http://test.com")
|
||||
monkeypatch.setenv("USERNAME", "user")
|
||||
monkeypatch.setenv("PASSWORD", "pass")
|
||||
monkeypatch.setenv("INCLUDE_TEXT", '["ESPN", "CNN"]')
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=None)
|
||||
|
||||
assert settings.include_text == ["ESPN", "CNN"]
|
||||
|
||||
def test_settings_exclude_text_from_env_json(self, monkeypatch):
|
||||
"""Test: exclude_text acepta formato JSON desde variable de entorno."""
|
||||
monkeypatch.setenv("HOST", "http://test.com")
|
||||
monkeypatch.setenv("USERNAME", "user")
|
||||
monkeypatch.setenv("PASSWORD", "pass")
|
||||
monkeypatch.setenv("EXCLUDE_TEXT", '["Adult", "XXX"]')
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=None)
|
||||
|
||||
assert settings.exclude_text == ["Adult", "XXX"]
|
||||
|
||||
def test_settings_include_and_exclude_together(self, monkeypatch):
|
||||
"""Test: include_text y exclude_text pueden usarse juntos."""
|
||||
monkeypatch.setenv("HOST", "http://test.com")
|
||||
monkeypatch.setenv("USERNAME", "user")
|
||||
monkeypatch.setenv("PASSWORD", "pass")
|
||||
monkeypatch.setenv("INCLUDE_TEXT", '["Sports", "News"]')
|
||||
monkeypatch.setenv("EXCLUDE_TEXT", '["Adult"]')
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=None)
|
||||
|
||||
assert settings.include_text == ["Sports", "News"]
|
||||
assert settings.exclude_text == ["Adult"]
|
||||
|
||||
def test_settings_include_text_single_value(self, monkeypatch):
|
||||
"""Test: include_text acepta un solo valor en lista."""
|
||||
monkeypatch.setenv("HOST", "http://test.com")
|
||||
monkeypatch.setenv("USERNAME", "user")
|
||||
monkeypatch.setenv("PASSWORD", "pass")
|
||||
monkeypatch.setenv("INCLUDE_TEXT", '["OnlyThis"]')
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=None)
|
||||
|
||||
assert settings.include_text == ["OnlyThis"]
|
||||
assert len(settings.include_text) == 1
|
||||
|
||||
def test_settings_exclude_text_single_value(self, monkeypatch):
|
||||
"""Test: exclude_text acepta un solo valor en lista."""
|
||||
monkeypatch.setenv("HOST", "http://test.com")
|
||||
monkeypatch.setenv("USERNAME", "user")
|
||||
monkeypatch.setenv("PASSWORD", "pass")
|
||||
monkeypatch.setenv("EXCLUDE_TEXT", '["BlockThis"]')
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=None)
|
||||
|
||||
assert settings.exclude_text == ["BlockThis"]
|
||||
assert len(settings.exclude_text) == 1
|
||||
|
||||
def test_settings_include_text_empty_json_array(self, monkeypatch):
|
||||
"""Test: include_text acepta array JSON vacío."""
|
||||
monkeypatch.setenv("HOST", "http://test.com")
|
||||
monkeypatch.setenv("USERNAME", "user")
|
||||
monkeypatch.setenv("PASSWORD", "pass")
|
||||
monkeypatch.setenv("INCLUDE_TEXT", "[]")
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=None)
|
||||
|
||||
assert settings.include_text == []
|
||||
|
||||
def test_settings_from_env_file_with_filters(self, tmp_path, monkeypatch):
|
||||
"""Test: Settings lee filtros desde archivo .env."""
|
||||
env_file = tmp_path / ".env"
|
||||
env_file.write_text(
|
||||
'HOST=http://test.com\n'
|
||||
'USERNAME=user\n'
|
||||
'PASSWORD=pass\n'
|
||||
'INCLUDE_TEXT=["HBO", "ESPN"]\n'
|
||||
'EXCLUDE_TEXT=["Adult"]\n'
|
||||
)
|
||||
|
||||
from m3u_list_builder.config import Settings
|
||||
|
||||
settings = Settings(_env_file=str(env_file))
|
||||
|
||||
assert settings.include_text == ["HBO", "ESPN"]
|
||||
assert settings.exclude_text == ["Adult"]
|
||||
|
||||
Reference in New Issue
Block a user