Initial upload: ConfDoc v0.1.0 - Config validation and documentation generator
This commit is contained in:
136
tests/test_cli.py
Normal file
136
tests/test_cli.py
Normal file
@@ -0,0 +1,136 @@
|
||||
import pytest
|
||||
from unittest.mock import patch, MagicMock
|
||||
from typer.testing import CliRunner
|
||||
|
||||
from confdoc.main import app
|
||||
|
||||
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
class TestCLIValidate:
|
||||
def test_validate_valid_config(self):
|
||||
with runner.isolated_filesystem():
|
||||
config_content = '{"name": "test", "value": 123}'
|
||||
schema_content = '''{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string"},
|
||||
"value": {"type": "integer"}
|
||||
},
|
||||
"required": ["name"]
|
||||
}'''
|
||||
|
||||
with open("config.json", "w") as f:
|
||||
f.write(config_content)
|
||||
with open("schema.json", "w") as f:
|
||||
f.write(schema_content)
|
||||
|
||||
result = runner.invoke(app, ["validate", "config.json", "--schema", "schema.json"])
|
||||
assert result.exit_code == 0
|
||||
assert "valid" in result.output.lower()
|
||||
|
||||
def test_validate_file_not_found(self):
|
||||
result = runner.invoke(app, ["validate", "nonexistent.json"])
|
||||
assert result.exit_code == 1
|
||||
assert "Error" in result.output
|
||||
|
||||
def test_validate_invalid_config(self):
|
||||
with runner.isolated_filesystem():
|
||||
config_content = '{"name": 123}'
|
||||
schema_content = '''{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string"}
|
||||
},
|
||||
"required": ["name"]
|
||||
}'''
|
||||
|
||||
with open("config.json", "w") as f:
|
||||
f.write(config_content)
|
||||
with open("schema.json", "w") as f:
|
||||
f.write(schema_content)
|
||||
|
||||
result = runner.invoke(app, ["validate", "config.json", "--schema", "schema.json"])
|
||||
assert result.exit_code == 1
|
||||
assert "validation failed" in result.output.lower() or "error" in result.output.lower()
|
||||
|
||||
|
||||
class TestCLIDoc:
|
||||
def test_doc_generates_output(self):
|
||||
with runner.isolated_filesystem():
|
||||
schema_content = '''{
|
||||
"title": "Test Schema",
|
||||
"type": "object",
|
||||
"properties": {"name": {"type": "string"}}
|
||||
}'''
|
||||
|
||||
with open("schema.json", "w") as f:
|
||||
f.write(schema_content)
|
||||
|
||||
result = runner.invoke(app, ["doc", "schema.json"])
|
||||
assert result.exit_code == 0
|
||||
assert "Test Schema" in result.output or "Configuration Documentation" in result.output
|
||||
|
||||
def test_doc_writes_to_file(self):
|
||||
with runner.isolated_filesystem():
|
||||
schema_content = '{"title": "Test", "type": "object", "properties": {}}'
|
||||
|
||||
with open("schema.json", "w") as f:
|
||||
f.write(schema_content)
|
||||
|
||||
result = runner.invoke(app, ["doc", "schema.json", "--output", "docs.md"])
|
||||
assert result.exit_code == 0
|
||||
import os
|
||||
assert os.path.exists("docs.md")
|
||||
|
||||
with open("docs.md") as f:
|
||||
content = f.read()
|
||||
assert "Test" in content or "Configuration" in content
|
||||
|
||||
|
||||
class TestCLIInit:
|
||||
def test_init_creates_schema(self):
|
||||
with runner.isolated_filesystem():
|
||||
result = runner.invoke(app, ["init", "new_schema.json"])
|
||||
assert result.exit_code == 0
|
||||
|
||||
import os
|
||||
assert os.path.exists("new_schema.json")
|
||||
|
||||
import json
|
||||
with open("new_schema.json") as f:
|
||||
schema = json.load(f)
|
||||
assert "properties" in schema
|
||||
|
||||
def test_init_from_config(self):
|
||||
with runner.isolated_filesystem():
|
||||
config_content = '{"name": "test", "value": 123}'
|
||||
|
||||
with open("config.json", "w") as f:
|
||||
f.write(config_content)
|
||||
|
||||
result = runner.invoke(app, ["init", "new_schema.json", "--config", "config.json"])
|
||||
assert result.exit_code == 0
|
||||
|
||||
|
||||
class TestCLIHelp:
|
||||
def test_main_help(self):
|
||||
result = runner.invoke(app, ["--help"])
|
||||
assert result.exit_code == 0
|
||||
assert "ConfDoc" in result.output
|
||||
assert "validate" in result.output
|
||||
assert "doc" in result.output
|
||||
assert "init" in result.output
|
||||
|
||||
def test_validate_help(self):
|
||||
result = runner.invoke(app, ["validate", "--help"])
|
||||
assert result.exit_code == 0
|
||||
assert "config" in result.output
|
||||
assert "schema" in result.output
|
||||
|
||||
def test_doc_help(self):
|
||||
result = runner.invoke(app, ["doc", "--help"])
|
||||
assert result.exit_code == 0
|
||||
assert "schema" in result.output
|
||||
assert "output" in result.output
|
||||
Reference in New Issue
Block a user