173 lines
4.3 KiB
Python
173 lines
4.3 KiB
Python
"""Tests for formatting module."""
|
|
|
|
import pytest
|
|
|
|
from finn_eiendom import formatting
|
|
|
|
|
|
def test_render_ad_json():
|
|
"""Test rendering ad as JSON."""
|
|
ad = {
|
|
"finnkode": "123456",
|
|
"title": "Nice apartment",
|
|
"address": "Hovedstreet 1",
|
|
"asking_price": 5000000,
|
|
"area_m2": 80,
|
|
}
|
|
result = formatting.render_ad(ad, "json")
|
|
assert "123456" in result
|
|
assert "Nice apartment" in result
|
|
assert isinstance(result, str)
|
|
|
|
|
|
def test_render_ad_markdown():
|
|
"""Test rendering ad as Markdown."""
|
|
ad = {
|
|
"finnkode": "123456",
|
|
"title": "Nice apartment",
|
|
"address": "Hovedstreet 1",
|
|
"asking_price": 5000000,
|
|
"area_m2": 80,
|
|
}
|
|
result = formatting.render_ad(ad, "markdown")
|
|
assert "Nice apartment" in result
|
|
assert "Hovedstreet 1" in result
|
|
assert "#" in result # Markdown headers
|
|
|
|
|
|
def test_render_shortlist_json():
|
|
"""Test rendering shortlist as JSON."""
|
|
data = {
|
|
"shortlist": [
|
|
{
|
|
"finnkode": "1",
|
|
"title": "Ad 1",
|
|
"address": "Street 1",
|
|
"asking_price": 5000000,
|
|
"area_m2": 80,
|
|
},
|
|
{
|
|
"finnkode": "2",
|
|
"title": "Ad 2",
|
|
"address": "Street 2",
|
|
"asking_price": 4500000,
|
|
"area_m2": 75,
|
|
},
|
|
]
|
|
}
|
|
result = formatting.render_shortlist(data, "json")
|
|
assert "Ad 1" in result
|
|
assert "Ad 2" in result
|
|
|
|
|
|
def test_render_shortlist_markdown():
|
|
"""Test rendering shortlist as Markdown."""
|
|
data = {
|
|
"shortlist": [
|
|
{
|
|
"finnkode": "1",
|
|
"title": "Ad 1",
|
|
"address": "Street 1",
|
|
"asking_price": 5000000,
|
|
"area_m2": 80,
|
|
},
|
|
]
|
|
}
|
|
result = formatting.render_shortlist(data, "markdown")
|
|
assert "Ad 1" in result
|
|
assert "Street 1" in result
|
|
|
|
|
|
def test_render_shortlist_table():
|
|
"""Test rendering shortlist as table."""
|
|
data = {
|
|
"shortlist": [
|
|
{
|
|
"finnkode": "1",
|
|
"title": "Ad 1",
|
|
"address": "Street 1",
|
|
"asking_price": 5000000,
|
|
"area_m2": 80,
|
|
},
|
|
]
|
|
}
|
|
result = formatting.render_shortlist(data, "table")
|
|
assert "|" in result # Table format
|
|
|
|
|
|
def test_render_comparison():
|
|
"""Test rendering comparison."""
|
|
data = {
|
|
"listings": [
|
|
{
|
|
"finnkode": "1",
|
|
"title": "Ad 1",
|
|
"address": "Street 1",
|
|
"asking_price": 5000000,
|
|
"area_m2": 80,
|
|
},
|
|
{
|
|
"finnkode": "2",
|
|
"title": "Ad 2",
|
|
"address": "Street 2",
|
|
"asking_price": 4500000,
|
|
"area_m2": 75,
|
|
},
|
|
]
|
|
}
|
|
result = formatting.render_comparison(data, "markdown")
|
|
assert "Comparison" in result
|
|
assert "Ad 1" in result
|
|
assert "Ad 2" in result
|
|
|
|
|
|
def test_render_diff():
|
|
"""Test rendering diff."""
|
|
data = {
|
|
"new_ads": [
|
|
{
|
|
"title": "New Ad",
|
|
"address": "New Street",
|
|
"asking_price": 5000000,
|
|
},
|
|
],
|
|
"removed_ads": [],
|
|
"changed_ads": [],
|
|
}
|
|
result = formatting.render_diff(data, "markdown")
|
|
assert "New" in result
|
|
assert "New Ad" in result
|
|
|
|
|
|
def test_render_cache_stats():
|
|
"""Test rendering cache stats."""
|
|
data = {
|
|
"total_finn_ads": 100,
|
|
"total_eiendom_units": 50,
|
|
"total_search_runs": 10,
|
|
"cache_size_mb": 25.5,
|
|
"last_updated": "2024-01-01",
|
|
}
|
|
result = formatting.render_cache_stats(data, "json")
|
|
assert "100" in result
|
|
assert "50" in result
|
|
|
|
|
|
def test_format_validation():
|
|
"""Test that invalid formats raise ValueError."""
|
|
with pytest.raises(ValueError):
|
|
formatting.render_ad({}, "invalid")
|
|
|
|
|
|
def test_render_unit():
|
|
"""Test rendering Eiendom unit."""
|
|
unit = {
|
|
"unit_code": "code123",
|
|
"address": "Hovedstreet 1",
|
|
"rooms": 3,
|
|
"estimated_selling_price": 5000000,
|
|
}
|
|
result = formatting.render_unit(unit, "markdown")
|
|
assert "Hovedstreet 1" in result
|
|
assert "3" in result
|