121 lines
4.0 KiB
Python
121 lines
4.0 KiB
Python
"""Integration tests for the CLI."""
|
|
|
|
import json
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
from click.testing import CliRunner
|
|
|
|
from envschema.cli import cli
|
|
|
|
|
|
class TestValidateCommand:
|
|
"""Tests for the validate command."""
|
|
|
|
def test_validate_missing_schema(self):
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["validate", "/nonexistent/schema.json"])
|
|
assert result.exit_code == 2
|
|
|
|
def test_validate_empty_env(self, tmp_path):
|
|
schema_file = tmp_path / "schema.json"
|
|
schema_file.write_text(json.dumps({
|
|
"version": "1.0",
|
|
"envVars": []
|
|
}))
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["validate", str(schema_file)])
|
|
assert result.exit_code == 0
|
|
|
|
def test_validate_missing_required(self, tmp_path):
|
|
schema_file = tmp_path / "schema.json"
|
|
schema_file.write_text(json.dumps({
|
|
"version": "1.0",
|
|
"envVars": [
|
|
{"name": "REQUIRED_VAR", "required": True}
|
|
]
|
|
}))
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["validate", str(schema_file), "--no-env"])
|
|
assert result.exit_code == 1
|
|
assert "REQUIRED_VAR" in result.output
|
|
|
|
def test_validate_with_valid_env(self, tmp_path):
|
|
schema_file = tmp_path / "schema.json"
|
|
schema_file.write_text(json.dumps({
|
|
"version": "1.0",
|
|
"envVars": [
|
|
{"name": "TEST_VAR", "type": "str", "required": True}
|
|
]
|
|
}))
|
|
env_file = tmp_path / ".env"
|
|
env_file.write_text("TEST_VAR=value\n")
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["validate", str(schema_file), "--file", str(env_file), "--no-env"])
|
|
assert result.exit_code == 0
|
|
|
|
def test_validate_json_output(self, tmp_path):
|
|
schema_file = tmp_path / "schema.json"
|
|
schema_file.write_text(json.dumps({
|
|
"version": "1.0",
|
|
"envVars": []
|
|
}))
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["validate", str(schema_file), "--format", "json"])
|
|
assert result.exit_code == 0
|
|
data = json.loads(result.output)
|
|
assert data["is_valid"] is True
|
|
|
|
|
|
class TestGenerateCommand:
|
|
"""Tests for the generate command."""
|
|
|
|
def test_generate_empty_schema(self, tmp_path):
|
|
schema_file = tmp_path / "schema.json"
|
|
schema_file.write_text(json.dumps({
|
|
"version": "1.0",
|
|
"envVars": []
|
|
}))
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["generate", str(schema_file)])
|
|
assert result.exit_code == 0
|
|
|
|
def test_generate_with_vars(self, tmp_path):
|
|
schema_file = tmp_path / "schema.json"
|
|
schema_file.write_text(json.dumps({
|
|
"version": "1.0",
|
|
"envVars": [
|
|
{"name": "TEST_VAR", "description": "A test variable"},
|
|
{"name": "REQUIRED_VAR", "required": True}
|
|
]
|
|
}))
|
|
output_file = tmp_path / ".env.example"
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["generate", str(schema_file), "--output", str(output_file)])
|
|
assert result.exit_code == 0
|
|
content = output_file.read_text()
|
|
assert "TEST_VAR=" in content
|
|
assert "# REQUIRED" in content
|
|
|
|
|
|
class TestCheckCommand:
|
|
"""Tests for the check command."""
|
|
|
|
def test_check_valid_schema(self, tmp_path):
|
|
schema_file = tmp_path / "schema.json"
|
|
schema_file.write_text(json.dumps({
|
|
"version": "1.0",
|
|
"envVars": [
|
|
{"name": "TEST_VAR", "type": "str"}
|
|
]
|
|
}))
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["check", str(schema_file)])
|
|
assert result.exit_code == 0
|
|
assert "Schema is valid" in result.output
|
|
|
|
def test_check_missing_file(self):
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["check", "/nonexistent/schema.json"])
|
|
assert result.exit_code == 2 |