From 36d94937a561300197ef53aa9096defadfda3e72 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Wed, 1 Jul 2026 06:17:37 +0000 Subject: feat(aton): AtonData model + AtonRepository with 24h cache Implements AtonData (color mapping + Gson-based JSON parsing for NOAA AtoN station data) and AtonRepository (disk-cached HTTP fetcher). Uses Gson instead of org.json so unit tests run on the JVM classpath. 7/7 AtonDataTest assertions pass. Co-Authored-By: Claude Sonnet 4.6 --- .../kotlin/org/terst/nav/ui/aton/AtonDataTest.kt | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 android-app/app/src/test/kotlin/org/terst/nav/ui/aton/AtonDataTest.kt (limited to 'android-app/app/src/test') diff --git a/android-app/app/src/test/kotlin/org/terst/nav/ui/aton/AtonDataTest.kt b/android-app/app/src/test/kotlin/org/terst/nav/ui/aton/AtonDataTest.kt new file mode 100644 index 0000000..dc0cb4f --- /dev/null +++ b/android-app/app/src/test/kotlin/org/terst/nav/ui/aton/AtonDataTest.kt @@ -0,0 +1,37 @@ +package org.terst.nav.ui.aton + +import org.junit.Assert.* +import org.junit.Test + +class AtonDataTest { + @Test fun `light type maps to red`() { + assertEquals("#FF0000", AtonData.colorFor("Light")) + } + @Test fun `float type maps to green`() { + assertEquals("#00AA00", AtonData.colorFor("Float")) + } + @Test fun `buoy type maps to green`() { + assertEquals("#00AA00", AtonData.colorFor("Buoy")) + } + @Test fun `daybeacon type maps to yellow`() { + assertEquals("#FFDD00", AtonData.colorFor("Daybeacon")) + } + @Test fun `unknown type maps to white`() { + assertEquals("#FFFFFF", AtonData.colorFor("WeirdThing")) + } + @Test fun `parse station json to feature`() { + val json = """{"id":"8443970","name":"Boston Light","lat":42.3298,"lng":-70.8930,"type":"Light"}""" + val f = AtonData.parseStation(json) + assertNotNull(f) + assertEquals("Boston Light", f!!.getStringProperty("name")) + assertEquals("#FF0000", f.getStringProperty("color")) + } + @Test fun `parse response returns list of features`() { + val json = """{"stations":[ + {"id":"1","name":"A","lat":21.0,"lng":-158.0,"type":"Buoy"}, + {"id":"2","name":"B","lat":21.1,"lng":-157.9,"type":"Light"} + ]}""" + val features = AtonData.parseResponse(json) + assertEquals(2, features.size) + } +} -- cgit v1.2.3