summaryrefslogtreecommitdiff
path: root/android-app/app/src/test/kotlin/org
diff options
context:
space:
mode:
Diffstat (limited to 'android-app/app/src/test/kotlin/org')
-rw-r--r--android-app/app/src/test/kotlin/org/terst/nav/data/model/LogbookEntryTest.kt67
-rw-r--r--android-app/app/src/test/kotlin/org/terst/nav/data/model/TideModelTest.kt56
2 files changed, 123 insertions, 0 deletions
diff --git a/android-app/app/src/test/kotlin/org/terst/nav/data/model/LogbookEntryTest.kt b/android-app/app/src/test/kotlin/org/terst/nav/data/model/LogbookEntryTest.kt
new file mode 100644
index 0000000..fc4580c
--- /dev/null
+++ b/android-app/app/src/test/kotlin/org/terst/nav/data/model/LogbookEntryTest.kt
@@ -0,0 +1,67 @@
+package org.terst.nav.data.model
+
+import org.junit.Assert.*
+import org.junit.Test
+
+class LogbookEntryTest {
+
+ @Test
+ fun `LogbookEntry holds all required fields`() {
+ val entry = LogbookEntry(
+ timestampMs = 1_000_000L,
+ lat = 41.39,
+ lon = -71.202,
+ sogKnots = 6.2,
+ cogDegrees = 225.0,
+ windKnots = 15.0,
+ windDirectionDeg = 225.0,
+ baroHpa = 1018.0,
+ depthMeters = 14.0,
+ event = "Departed slip",
+ notes = "Crew ready"
+ )
+ assertEquals(1_000_000L, entry.timestampMs)
+ assertEquals(41.39, entry.lat, 1e-9)
+ assertEquals(-71.202, entry.lon, 1e-9)
+ assertEquals(6.2, entry.sogKnots, 1e-9)
+ assertEquals(225.0, entry.cogDegrees, 1e-9)
+ assertEquals(15.0, entry.windKnots)
+ assertEquals(225.0, entry.windDirectionDeg)
+ assertEquals(1018.0, entry.baroHpa)
+ assertEquals(14.0, entry.depthMeters)
+ assertEquals("Departed slip", entry.event)
+ assertEquals("Crew ready", entry.notes)
+ }
+
+ @Test
+ fun `LogbookEntry optional fields default to null`() {
+ val entry = LogbookEntry(
+ timestampMs = 0L,
+ lat = 0.0,
+ lon = 0.0,
+ sogKnots = 0.0,
+ cogDegrees = 0.0
+ )
+ assertNull(entry.windKnots)
+ assertNull(entry.windDirectionDeg)
+ assertNull(entry.baroHpa)
+ assertNull(entry.depthMeters)
+ assertNull(entry.event)
+ assertNull(entry.notes)
+ }
+
+ @Test
+ fun `LogbookEntry data class equality`() {
+ val a = LogbookEntry(100L, 10.0, 20.0, 5.0, 90.0)
+ val b = LogbookEntry(100L, 10.0, 20.0, 5.0, 90.0)
+ assertEquals(a, b)
+ }
+
+ @Test
+ fun `LogbookEntry data class copy`() {
+ val original = LogbookEntry(100L, 10.0, 20.0, 5.0, 90.0, event = "anchor")
+ val copy = original.copy(sogKnots = 3.0)
+ assertEquals(3.0, copy.sogKnots, 1e-9)
+ assertEquals("anchor", copy.event)
+ }
+}
diff --git a/android-app/app/src/test/kotlin/org/terst/nav/data/model/TideModelTest.kt b/android-app/app/src/test/kotlin/org/terst/nav/data/model/TideModelTest.kt
new file mode 100644
index 0000000..0a6f4bb
--- /dev/null
+++ b/android-app/app/src/test/kotlin/org/terst/nav/data/model/TideModelTest.kt
@@ -0,0 +1,56 @@
+package com.example.androidapp.data.model
+
+import org.junit.Assert.*
+import org.junit.Test
+
+class TideModelTest {
+
+ @Test
+ fun `TideConstituent holds all fields`() {
+ val c = TideConstituent("M2", 28.9841042, 0.85, 120.0)
+ assertEquals("M2", c.name)
+ assertEquals(28.9841042, c.speedDegPerHour, 1e-7)
+ assertEquals(0.85, c.amplitudeMeters, 1e-9)
+ assertEquals(120.0, c.phaseDeg, 1e-9)
+ }
+
+ @Test
+ fun `TidePrediction holds timestamp and height`() {
+ val p = TidePrediction(1_700_000_000_000L, 2.34)
+ assertEquals(1_700_000_000_000L, p.timestampMs)
+ assertEquals(2.34, p.heightMeters, 1e-9)
+ }
+
+ @Test
+ fun `TidePrediction data class equality`() {
+ val p1 = TidePrediction(1_000L, 1.5)
+ val p2 = TidePrediction(1_000L, 1.5)
+ assertEquals(p1, p2)
+ }
+
+ @Test
+ fun `TideStation holds all fields and constituents`() {
+ val c = TideConstituent("K1", 15.0410686, 0.3, 45.0)
+ val station = TideStation(
+ id = "9447130",
+ name = "Seattle, WA",
+ lat = 47.602,
+ lon = -122.339,
+ datumOffsetMeters = 1.8,
+ constituents = listOf(c)
+ )
+ assertEquals("9447130", station.id)
+ assertEquals("Seattle, WA", station.name)
+ assertEquals(47.602, station.lat, 1e-9)
+ assertEquals(-122.339, station.lon, 1e-9)
+ assertEquals(1.8, station.datumOffsetMeters, 1e-9)
+ assertEquals(1, station.constituents.size)
+ assertEquals("K1", station.constituents[0].name)
+ }
+
+ @Test
+ fun `TideStation with empty constituents is valid`() {
+ val station = TideStation("test", "Test", 0.0, 0.0, 0.0, emptyList())
+ assertTrue(station.constituents.isEmpty())
+ }
+}