File size: 1,319 Bytes
b0d0019
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
"""
Unit tests for the preprocessing pipeline.
"""

import pytest
import pandas as pd

from app.services.preprocessing import extract_city, filter_by_city, dataframe_to_json_string


def test_extract_city_known():
    assert extract_city("123 Street, Cairo, Egypt") == "Cairo"
    assert extract_city("Near Luxor Temple, Luxor") == "Luxor"


def test_extract_city_none():
    assert extract_city(None) is None
    assert extract_city(float("nan")) is None


def test_extract_city_unknown():
    result = extract_city("Some unknown village far away")
    assert result is None


def test_filter_by_city():
    df = pd.DataFrame({
        "name": ["Place A", "Place B", "Place C"],
        "city": ["Cairo", "Luxor", "Cairo"],
    })
    filtered = filter_by_city(df, "Cairo")
    assert len(filtered) == 2
    assert set(filtered["name"]) == {"Place A", "Place C"}


def test_filter_by_city_case_insensitive():
    df = pd.DataFrame({"name": ["X"], "city": ["Luxor"]})
    filtered = filter_by_city(df, "luxor")
    assert len(filtered) == 1


def test_dataframe_to_json_string():
    df = pd.DataFrame({"a": [1, 2], "b": ["x", "y"]})
    result = dataframe_to_json_string(df)
    import json
    parsed = json.loads(result)
    assert isinstance(parsed, list)
    assert len(parsed) == 2
    assert parsed[0]["a"] == 1