From f7c40d48c0727a96843c85990cc36ae5a9ac6888 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Sat, 07 Feb 2026 23:42:43 +0000
Subject: [PATCH] Add integration test for binary
---
tests/test_config.py | 149 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 149 insertions(+), 0 deletions(-)
diff --git a/tests/test_config.py b/tests/test_config.py
new file mode 100644
index 0000000..55194af
--- /dev/null
+++ b/tests/test_config.py
@@ -0,0 +1,149 @@
+"""Tests for configuration loading and validation."""
+
+import pytest
+from pathlib import Path
+from tempfile import NamedTemporaryFile
+
+from archbuild.config import (
+ Config,
+ load_config,
+ migrate_vars_sh,
+ save_config,
+ BuildingConfig,
+ RepositoryConfig,
+)
+
+
+class TestConfig:
+ """Tests for Config model."""
+
+ def test_minimal_config(self):
+ """Test minimal valid configuration."""
+ config = Config(
+ repository=RepositoryConfig(
+ name="test",
+ path=Path("/repo"),
+ build_dir=Path("/build"),
+ )
+ )
+ assert config.repository.name == "test"
+ assert config.building.parallel is True # default
+ assert config.building.max_workers == 4 # default
+
+ def test_building_config_defaults(self):
+ """Test BuildingConfig defaults."""
+ config = BuildingConfig()
+ assert config.parallel is True
+ assert config.max_workers == 4
+ assert config.clean is True
+ assert config.retry_attempts == 3
+
+ def test_max_workers_validation(self):
+ """Test max_workers bounds."""
+ with pytest.raises(ValueError):
+ BuildingConfig(max_workers=0)
+ with pytest.raises(ValueError):
+ BuildingConfig(max_workers=100)
+
+ def test_log_level_validation(self):
+ """Test log level validation."""
+ config = Config(
+ repository=RepositoryConfig(
+ name="test",
+ path=Path("/repo"),
+ build_dir=Path("/build"),
+ ),
+ log_level="debug",
+ )
+ assert config.log_level == "DEBUG"
+
+ with pytest.raises(ValueError):
+ Config(
+ repository=RepositoryConfig(
+ name="test",
+ path=Path("/repo"),
+ build_dir=Path("/build"),
+ ),
+ log_level="invalid",
+ )
+
+
+class TestLoadConfig:
+ """Tests for config file loading."""
+
+ def test_load_yaml(self, tmp_path):
+ """Test loading YAML config file."""
+ config_file = tmp_path / "config.yaml"
+ config_file.write_text("""
+repository:
+ name: myrepo
+ path: /repo/x86_64
+ build_dir: /repo/build
+building:
+ max_workers: 8
+""")
+ config = load_config(config_file)
+ assert config.repository.name == "myrepo"
+ assert config.building.max_workers == 8
+
+ def test_file_not_found(self):
+ """Test error on missing config file."""
+ with pytest.raises(FileNotFoundError):
+ load_config(Path("/nonexistent/config.yaml"))
+
+
+class TestMigrateVarsSh:
+ """Tests for vars.sh migration."""
+
+ def test_migrate_basic(self, tmp_path):
+ """Test basic vars.sh migration."""
+ vars_file = tmp_path / "vars.sh"
+ vars_file.write_text("""
+REPODIR=/repo/x86_64
+BUILDDIR=/repo/build
+REPONAME=myrepo
+PARALLEL=Y
+SIGN=N
+NUM_OLD=5
+""")
+ data = migrate_vars_sh(vars_file)
+
+ assert data["repository"]["name"] == "myrepo"
+ assert data["repository"]["path"] == "/repo/x86_64"
+ assert data["building"]["parallel"] is True
+ assert data["signing"]["enabled"] is False
+ assert data["retention"]["keep_versions"] == 5
+
+ def test_migrate_with_export(self, tmp_path):
+ """Test migration handles export statements."""
+ vars_file = tmp_path / "vars.sh"
+ vars_file.write_text("""
+export REPONAME="testrepo"
+export REPODIR="/test/repo"
+export BUILDDIR="/test/build"
+""")
+ data = migrate_vars_sh(vars_file)
+
+ assert data["repository"]["name"] == "testrepo"
+
+
+class TestSaveConfig:
+ """Tests for config saving."""
+
+ def test_round_trip(self, tmp_path):
+ """Test config save/load round trip."""
+ config = Config(
+ repository=RepositoryConfig(
+ name="test",
+ path=Path("/repo"),
+ build_dir=Path("/build"),
+ ),
+ building=BuildingConfig(max_workers=6),
+ )
+
+ config_file = tmp_path / "config.yaml"
+ save_config(config, config_file)
+
+ loaded = load_config(config_file)
+ assert loaded.repository.name == "test"
+ assert loaded.building.max_workers == 6
--
Gitblit v1.10.0