Files
schema2mock/old_tests/test_diff_engine.py

130 lines
4.0 KiB
Python

"""Tests for diff engine."""
import pytest
from datetime import datetime
from http_log_explorer.analyzers import DiffEngine
from http_log_explorer.models import HTTPEntry, Request, Response
def make_entry(
method: str = "GET",
url: str = "https://api.example.com/test",
status: int = 200,
req_headers: dict | None = None,
resp_headers: dict | None = None,
req_body: str | None = None,
resp_body: str | None = None,
) -> HTTPEntry:
"""Create a test HTTPEntry."""
return HTTPEntry(
id=f"entry-{method}-{status}",
request=Request(
method=method,
url=url,
headers=req_headers or {"Content-Type": "application/json"},
body=req_body,
),
response=Response(
status=status,
status_text="OK",
headers=resp_headers or {"Content-Type": "application/json"},
body=resp_body,
),
timestamp=datetime.now(),
)
class TestDiffEngine:
"""Tests for DiffEngine."""
def test_diff_same_entries(self):
"""Test diffing identical entries."""
entry1 = make_entry()
entry2 = make_entry()
engine = DiffEngine()
result = engine.diff(entry1, entry2)
assert not engine.has_differences(result)
assert result.status1 == result.status2
def test_diff_status_change(self):
"""Test diffing entries with different status codes."""
entry1 = make_entry(status=200)
entry2 = make_entry(status=404)
engine = DiffEngine()
result = engine.diff(entry1, entry2)
assert result.status_changed
assert result.status1 == 200
assert result.status2 == 404
def test_diff_url_change(self):
"""Test diffing entries with different URLs."""
entry1 = make_entry(url="https://api.example.com/users")
entry2 = make_entry(url="https://api.example.com/posts")
engine = DiffEngine()
result = engine.diff(entry1, entry2)
assert result.url_changed
def test_diff_headers_change(self):
"""Test diffing entries with different headers."""
entry1 = make_entry(
req_headers={"Content-Type": "application/json", "X-Request-ID": "123"}
)
entry2 = make_entry(
req_headers={"Content-Type": "application/json", "X-Request-ID": "456"}
)
engine = DiffEngine()
result = engine.diff(entry1, entry2)
assert len(result.request_headers_diff) > 0
def test_diff_headers_added_removed(self):
"""Test detecting added/removed headers."""
entry1 = make_entry(req_headers={"Content-Type": "application/json"})
entry2 = make_entry(req_headers={"Authorization": "Bearer token"})
engine = DiffEngine()
result = engine.diff(entry1, entry2)
assert any("+ Authorization:" in s for s in result.request_headers_diff)
assert any("- Content-Type:" in s for s in result.request_headers_diff)
def test_diff_body_change(self):
"""Test diffing entries with different bodies."""
entry1 = make_entry(resp_body='{"id": 1, "name": "Alice"}')
entry2 = make_entry(resp_body='{"id": 1, "name": "Bob"}')
engine = DiffEngine()
result = engine.diff(entry1, entry2)
assert len(result.response_body_diff) > 0
def test_unified_diff_output(self):
"""Test unified diff output formatting."""
entry1 = make_entry(status=200)
entry2 = make_entry(status=404)
engine = DiffEngine()
result = engine.diff(entry1, entry2)
output = engine.unified_diff_output(result)
assert "Status: 200 -> 404" in output
def test_no_differences(self):
"""Test output when no differences exist."""
entry1 = make_entry()
entry2 = make_entry()
engine = DiffEngine()
result = engine.diff(entry1, entry2)
output = engine.unified_diff_output(result)
assert "No differences found" in output