diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 5c69a7f..b5e86e9 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -36,6 +36,13 @@ jobs: exit(1) " + - name: Run unit tests + run: | + docker run --rm -v "$PWD":/app -w /app python:3.13-alpine sh -c " + pip install --no-cache-dir -r requirements-dev.txt && + pytest -v + " + - name: Check deprecation warnings run: | docker run --rm adguard-cidre:ci python -W error::DeprecationWarning -c "import blocklist_scheduler" 2>&1 | tee deprecation.log || true diff --git a/.gitignore b/.gitignore index d0d192d..2ebddc0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /adguard/*.log /tmp/ +__pycache__/ +.pytest_cache/ diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..a635c5c --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +pythonpath = . diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..8594477 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,4 @@ +requests +pyyaml +schedule +pytest diff --git a/tests/test_blocklist_scheduler.py b/tests/test_blocklist_scheduler.py new file mode 100644 index 0000000..3fd64aa --- /dev/null +++ b/tests/test_blocklist_scheduler.py @@ -0,0 +1,41 @@ +import pytest + +import blocklist_scheduler as bs + + +def test_backup_first_start_creates_backup_when_missing(tmp_path, monkeypatch): + adguard_yaml = tmp_path / "AdGuardHome.yaml" + adguard_yaml.write_text("original: config\n") + first_backup = tmp_path / "AdGuardHome.yaml.first-start.bak" + + monkeypatch.setattr(bs, "ADGUARD_YAML", adguard_yaml) + monkeypatch.setattr(bs, "FIRST_BACKUP", first_backup) + + bs.backup_first_start() + + assert first_backup.read_text() == "original: config\n" + + +def test_backup_first_start_does_not_overwrite_existing_backup(tmp_path, monkeypatch): + adguard_yaml = tmp_path / "AdGuardHome.yaml" + adguard_yaml.write_text("new: config\n") + first_backup = tmp_path / "AdGuardHome.yaml.first-start.bak" + first_backup.write_text("pristine: original\n") + + monkeypatch.setattr(bs, "ADGUARD_YAML", adguard_yaml) + monkeypatch.setattr(bs, "FIRST_BACKUP", first_backup) + + bs.backup_first_start() + + assert first_backup.read_text() == "pristine: original\n" + + +def test_backup_first_start_raises_if_adguard_yaml_missing(tmp_path, monkeypatch): + adguard_yaml = tmp_path / "AdGuardHome.yaml" + first_backup = tmp_path / "AdGuardHome.yaml.first-start.bak" + + monkeypatch.setattr(bs, "ADGUARD_YAML", adguard_yaml) + monkeypatch.setattr(bs, "FIRST_BACKUP", first_backup) + + with pytest.raises(FileNotFoundError): + bs.backup_first_start()