~ knotless Search/
↑↓ move↵ open⇧↵ all results

grain.social/grain-ios

1 collaborator
0
1
main
75 lines · 2.8 KB Raw History
@testable import Grain
import XCTest

final class NominatimResultTests: GrainTestCase {
    /// Reverse-geocoding a spot in Kansas City returns a `county` field. It must not
    /// leak into the stored `name` — we want "Kansas City, Missouri, United States",
    /// not "Kansas City, Jackson County, Missouri, United States".
    func testReverseGeocode_KansasCity_ExcludesCounty() {
        let json: [String: Any] = [
            "place_id": 12345,
            "lat": "39.0997",
            "lon": "-94.5786",
            "display_name": "Kansas City, Jackson County, Missouri, 64108, United States",
            "address": [
                "city": "Kansas City",
                "county": "Jackson County",
                "state": "Missouri",
                "country": "United States",
                "country_code": "us",
                "postcode": "64108",
            ],
        ]

        let result = NominatimResult(from: json)
        XCTAssertNotNil(result)
        XCTAssertEqual(result?.name, "Kansas City, Missouri, United States")
        XCTAssertFalse(result?.name.contains("County") ?? true,
                       "Name must not include county")
    }

    /// POI with a `name` from Nominatim should use that name as-is.
    func testReverseGeocode_POI_UsesPlaceName() {
        let json: [String: Any] = [
            "place_id": 54321,
            "lat": "37.7749",
            "lon": "-122.4194",
            "name": "Blue Bottle Coffee",
            "display_name": "Blue Bottle Coffee, Mint Plaza, San Francisco, California, United States",
            "address": [
                "amenity": "Blue Bottle Coffee",
                "city": "San Francisco",
                "county": "San Francisco County",
                "state": "California",
                "country": "United States",
                "country_code": "us",
            ],
        ]

        let result = NominatimResult(from: json)
        XCTAssertEqual(result?.name, "Blue Bottle Coffee")
    }

    /// Structured address dict must contain locality/region/country — never county.
    func testReverseGeocode_AddressExcludesCounty() {
        let json: [String: Any] = [
            "place_id": 12345,
            "lat": "39.0997",
            "lon": "-94.5786",
            "display_name": "anything",
            "address": [
                "city": "Kansas City",
                "county": "Jackson County",
                "state": "Missouri",
                "country": "United States",
                "country_code": "us",
            ],
        ]

        let result = NominatimResult(from: json)
        XCTAssertEqual(result?.address?["locality"]?.stringValue, "Kansas City")
        XCTAssertEqual(result?.address?["region"]?.stringValue, "Missouri")
        XCTAssertEqual(result?.address?["country"]?.stringValue, "US")
        XCTAssertNil(result?.address?["county"])
    }
}