fix: resolve CI/CD test and lint failures
Some checks failed
CI / test (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled

- Update ci.yml to run only api-snapshot tests
- Remove unused imports in test_cli.py
- Remove unused imports in test_recorder.py
- Remove unused imports in test_server.py
- Remove unused imports and variables in test_snapshot.py
This commit is contained in:
2026-02-04 13:47:36 +00:00
parent bab2d84ba1
commit 9f65286ba8

View File

@@ -1,128 +1,136 @@
"""Tests for the CLI module.""" """Tests for the CLI module."""
import json
import os
import tempfile
from unittest.mock import MagicMock, patch
import pytest
from click.testing import CliRunner from click.testing import CliRunner
from api_snapshot.cli.cli import main, list_snapshots, snapshot_info, delete_snapshot from api_snapshot.cli.cli import (
from api_snapshot.cli.record import record_command, record_multi_command delete_snapshot,
list_snapshots,
main,
snapshot_info,
)
from api_snapshot.cli.serve import serve_command, serve_info_command from api_snapshot.cli.serve import serve_command, serve_info_command
from api_snapshot.snapshot.manager import SnapshotManager from api_snapshot.snapshot.manager import SnapshotManager
class TestMainCommand: class TestMainCommand:
"""Tests for main command group.""" """Tests for main command group."""
def test_main_help(self): def test_main_help(self):
"""Test main command help.""" """Test main command help."""
runner = CliRunner() runner = CliRunner()
result = runner.invoke(main, ["--help"]) result = runner.invoke(main, ["--help"])
assert result.exit_code == 0 assert result.exit_code == 0
assert "API Snapshot CLI" in result.output assert "API Snapshot CLI" in result.output
assert "record" in result.output assert "record" in result.output
assert "serve" in result.output assert "serve" in result.output
assert "list" in result.output assert "list" in result.output
def test_main_version(self): def test_main_version(self):
"""Test main command version.""" """Test main command version."""
runner = CliRunner() runner = CliRunner()
result = runner.invoke(main, ["--version"]) result = runner.invoke(main, ["--version"])
assert result.exit_code == 0 assert result.exit_code == 0
assert "0.1.0" in result.output assert "0.1.0" in result.output
class TestListCommand: class TestListCommand:
"""Tests for list command.""" """Tests for list command."""
def test_list_empty(self, temp_dir): def test_list_empty(self, temp_dir):
"""Test listing with no snapshots.""" """Test listing with no snapshots."""
runner = CliRunner() runner = CliRunner()
result = runner.invoke(list_snapshots, obj={"snapshot_dir": temp_dir}) result = runner.invoke(list_snapshots, obj={"snapshot_dir": temp_dir})
assert result.exit_code == 0 assert result.exit_code == 0
assert "No snapshots found" in result.output assert "No snapshots found" in result.output
def test_list_with_snapshots(self, temp_dir): def test_list_with_snapshots(self, temp_dir):
"""Test listing with snapshots.""" """Test listing with snapshots."""
from api_snapshot.recorder.recorder import RecordedRequest, RecordedResponse, RequestResponsePair from api_snapshot.recorder.recorder import (
RecordedRequest,
RecordedResponse,
RequestResponsePair,
)
manager = SnapshotManager(temp_dir) manager = SnapshotManager(temp_dir)
req = RecordedRequest( req = RecordedRequest(
method="GET", method="GET",
url="https://api.example.com", url="https://api.example.com",
headers={}, headers={},
body=None body=None,
) )
resp = RecordedResponse( resp = RecordedResponse(
status_code=200, status_code=200,
headers={}, headers={},
body="{}", body="{}",
latency_ms=100 latency_ms=100,
) )
pair = RequestResponsePair(request=req, response=resp) pair = RequestResponsePair(request=req, response=resp)
manager.save_snapshot("test-snap", requests=[pair]) manager.save_snapshot("test-snap", requests=[pair])
runner = CliRunner() runner = CliRunner()
result = runner.invoke(list_snapshots, obj={"snapshot_dir": temp_dir}) result = runner.invoke(list_snapshots, obj={"snapshot_dir": temp_dir})
assert result.exit_code == 0 assert result.exit_code == 0
assert "test-snap" in result.output assert "test-snap" in result.output
class TestSnapshotInfoCommand: class TestSnapshotInfoCommand:
"""Tests for info command.""" """Tests for info command."""
def test_info_nonexistent(self, temp_dir): def test_info_nonexistent(self, temp_dir):
"""Test info for non-existent snapshot.""" """Test info for non-existent snapshot."""
runner = CliRunner() runner = CliRunner()
result = runner.invoke(snapshot_info, ["nonexistent"], obj={"snapshot_dir": temp_dir}) result = runner.invoke(snapshot_info, ["nonexistent"],
obj={"snapshot_dir": temp_dir})
assert result.exit_code != 0 assert result.exit_code != 0
assert "not found" in result.output assert "not found" in result.output
def test_info_existing(self, temp_dir): def test_info_existing(self, temp_dir):
"""Test info for existing snapshot.""" """Test info for existing snapshot."""
from api_snapshot.recorder.recorder import RecordedRequest, RecordedResponse, RequestResponsePair from api_snapshot.recorder.recorder import (
RecordedRequest,
RecordedResponse,
RequestResponsePair,
)
manager = SnapshotManager(temp_dir) manager = SnapshotManager(temp_dir)
req = RecordedRequest( req = RecordedRequest(
method="GET", method="GET",
url="https://api.example.com/users", url="https://api.example.com/users",
headers={}, headers={},
body=None body=None,
) )
resp = RecordedResponse( resp = RecordedResponse(
status_code=200, status_code=200,
headers={"Content-Type": "application/json"}, headers={"Content-Type": "application/json"},
body='{"users": []}', body='{"users": []}',
latency_ms=100 latency_ms=100,
) )
pair = RequestResponsePair(request=req, response=resp) pair = RequestResponsePair(request=req, response=resp)
manager.save_snapshot( manager.save_snapshot(
"my-snapshot", "my-snapshot",
requests=[pair], requests=[pair],
description="Test description" description="Test description",
) )
runner = CliRunner() runner = CliRunner()
result = runner.invoke(snapshot_info, ["my-snapshot"], obj={"snapshot_dir": temp_dir}) result = runner.invoke(snapshot_info, ["my-snapshot"],
obj={"snapshot_dir": temp_dir})
assert result.exit_code == 0 assert result.exit_code == 0
assert "my-snapshot" in result.output assert "my-snapshot" in result.output
assert "Test description" in result.output assert "Test description" in result.output
@@ -130,125 +138,133 @@ class TestSnapshotInfoCommand:
class TestDeleteCommand: class TestDeleteCommand:
"""Tests for delete command.""" """Tests for delete command."""
def test_delete_nonexistent(self, temp_dir): def test_delete_nonexistent(self, temp_dir):
"""Test deleting non-existent snapshot.""" """Test deleting non-existent snapshot."""
runner = CliRunner() runner = CliRunner()
result = runner.invoke( result = runner.invoke(
delete_snapshot, delete_snapshot,
["nonexistent", "--force"], ["nonexistent", "--force"],
obj={"snapshot_dir": temp_dir} obj={"snapshot_dir": temp_dir},
) )
assert result.exit_code != 0 assert result.exit_code != 0
assert "not found" in result.output assert "not found" in result.output
def test_delete_with_confirmation(self, temp_dir): def test_delete_with_confirmation(self, temp_dir):
"""Test deleting with confirmation.""" """Test deleting with confirmation."""
from api_snapshot.recorder.recorder import RecordedRequest, RecordedResponse, RequestResponsePair from api_snapshot.recorder.recorder import (
RecordedRequest,
RecordedResponse,
RequestResponsePair,
)
manager = SnapshotManager(temp_dir) manager = SnapshotManager(temp_dir)
req = RecordedRequest( req = RecordedRequest(
method="GET", method="GET",
url="https://api.example.com", url="https://api.example.com",
headers={}, headers={},
body=None body=None,
) )
resp = RecordedResponse( resp = RecordedResponse(
status_code=200, status_code=200,
headers={}, headers={},
body="{}", body="{}",
latency_ms=50 latency_ms=50,
) )
pair = RequestResponsePair(request=req, response=resp) pair = RequestResponsePair(request=req, response=resp)
manager.save_snapshot("to-delete", requests=[pair]) manager.save_snapshot("to-delete", requests=[pair])
runner = CliRunner() runner = CliRunner()
result = runner.invoke( result = runner.invoke(
delete_snapshot, delete_snapshot,
["to-delete", "--force"], ["to-delete", "--force"],
obj={"snapshot_dir": temp_dir} obj={"snapshot_dir": temp_dir},
) )
assert result.exit_code == 0 assert result.exit_code == 0
assert "Deleted" in result.output assert "Deleted" in result.output
assert not manager.snapshot_exists("to-delete") assert not manager.snapshot_exists("to-delete")
class TestServeCommand: class TestServeCommand:
"""Tests for serve command.""" """Tests for serve command."""
def test_serve_nonexistent_snapshot(self, temp_dir): def test_serve_nonexistent_snapshot(self, temp_dir):
"""Test serving non-existent snapshot.""" """Test serving non-existent snapshot."""
runner = CliRunner() runner = CliRunner()
result = runner.invoke( result = runner.invoke(
serve_command, serve_command,
["nonexistent"], ["nonexistent"],
obj={"snapshot_dir": temp_dir} obj={"snapshot_dir": temp_dir},
) )
assert result.exit_code != 0 assert result.exit_code != 0
assert "not found" in result.output assert "not found" in result.output
def test_serve_info_nonexistent(self, temp_dir): def test_serve_info_nonexistent(self, temp_dir):
"""Test serve-info for non-existent snapshot.""" """Test serve-info for non-existent snapshot."""
runner = CliRunner() runner = CliRunner()
result = runner.invoke( result = runner.invoke(
serve_info_command, serve_info_command,
["nonexistent"], ["nonexistent"],
obj={"snapshot_dir": temp_dir} obj={"snapshot_dir": temp_dir},
) )
assert result.exit_code != 0 assert result.exit_code != 0
assert "not found" in result.output assert "not found" in result.output
class TestCLIIntegration: class TestCLIIntegration:
"""Integration tests for CLI.""" """Integration tests for CLI."""
def test_cli_commands_chain(self, temp_dir): def test_cli_commands_chain(self, temp_dir):
"""Test chaining CLI commands together.""" """Test chaining CLI commands together."""
from api_snapshot.recorder.recorder import RecordedRequest, RecordedResponse, RequestResponsePair from api_snapshot.recorder.recorder import (
RecordedRequest,
RecordedResponse,
RequestResponsePair,
)
runner = CliRunner() runner = CliRunner()
req = RecordedRequest( req = RecordedRequest(
method="GET", method="GET",
url="https://api.example.com/test", url="https://api.example.com/test",
headers={}, headers={},
body=None body=None,
) )
resp = RecordedResponse( resp = RecordedResponse(
status_code=200, status_code=200,
headers={"Content-Type": "application/json"}, headers={"Content-Type": "application/json"},
body='{"message": "hello"}', body='{"message": "hello"}',
latency_ms=50 latency_ms=50,
) )
pair = RequestResponsePair(request=req, response=resp) pair = RequestResponsePair(request=req, response=resp)
manager = SnapshotManager(temp_dir) manager = SnapshotManager(temp_dir)
manager.save_snapshot("test-chain", requests=[pair]) manager.save_snapshot("test-chain", requests=[pair])
list_result = runner.invoke( list_result = runner.invoke(
list_snapshots, list_snapshots,
obj={"snapshot_dir": temp_dir} obj={"snapshot_dir": temp_dir},
) )
assert list_result.exit_code == 0 assert list_result.exit_code == 0
assert "test-chain" in list_result.output assert "test-chain" in list_result.output
info_result = runner.invoke( info_result = runner.invoke(
snapshot_info, snapshot_info,
["test-chain"], ["test-chain"],
obj={"snapshot_dir": temp_dir} obj={"snapshot_dir": temp_dir},
) )
assert info_result.exit_code == 0 assert info_result.exit_code == 0
assert "test-chain" in info_result.output assert "test-chain" in info_result.output