diff --git a/app/src/main/java/com/geeksville/mesh/ui/metrics/EnvironmentMetrics.kt b/app/src/main/java/com/geeksville/mesh/ui/metrics/EnvironmentMetrics.kt index 9cc0f988c..60019edc6 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/metrics/EnvironmentMetrics.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/metrics/EnvironmentMetrics.kt @@ -127,9 +127,11 @@ fun EnvironmentMetricsScreen(viewModel: MetricsViewModel = hiltViewModel()) { val temperatureFahrenheit = celsiusToFahrenheit(telemetry.environmentMetrics.temperature) val soilTemperatureFahrenheit = celsiusToFahrenheit(telemetry.environmentMetrics.soilTemperature) telemetry.copy { - environmentMetrics = telemetry.environmentMetrics.copy { temperature = temperatureFahrenheit } environmentMetrics = - telemetry.environmentMetrics.copy { soilTemperature = soilTemperatureFahrenheit } + telemetry.environmentMetrics.copy { + temperature = temperatureFahrenheit + soilTemperature = soilTemperatureFahrenheit + } } } } else { diff --git a/app/src/test/java/com/geeksville/mesh/ui/metrics/EnvironmentMetricsTest.kt b/app/src/test/java/com/geeksville/mesh/ui/metrics/EnvironmentMetricsTest.kt new file mode 100644 index 000000000..e9276d79d --- /dev/null +++ b/app/src/test/java/com/geeksville/mesh/ui/metrics/EnvironmentMetricsTest.kt @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2025 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.geeksville.mesh.ui.metrics + +import com.geeksville.mesh.TelemetryProtos +import com.geeksville.mesh.copy +import com.geeksville.mesh.util.UnitConversions.celsiusToFahrenheit +import org.junit.Assert.assertEquals +import org.junit.Test + +class EnvironmentMetricsTest { + + @Test + fun `temperature and soil temperature are converted to Fahrenheit when isFahrenheit is true`() { + val initialTemperatureCelsius = 25.0f + val initialSoilTemperatureCelsius = 15.0f + val expectedTemperatureFahrenheit = celsiusToFahrenheit(initialTemperatureCelsius) + val expectedSoilTemperatureFahrenheit = celsiusToFahrenheit(initialSoilTemperatureCelsius) + + val telemetry = + TelemetryProtos.Telemetry.newBuilder() + .setEnvironmentMetrics( + TelemetryProtos.EnvironmentMetrics.newBuilder() + .setTemperature(initialTemperatureCelsius) + .setSoilTemperature(initialSoilTemperatureCelsius) + .build(), + ) + .setTime(1000) + .build() + + val data = listOf(telemetry) + + val isFahrenheit = true + + val processedTelemetries = + if (isFahrenheit) { + data.map { tel -> + val temperatureFahrenheit = celsiusToFahrenheit(tel.environmentMetrics.temperature) + val soilTemperatureFahrenheit = celsiusToFahrenheit(tel.environmentMetrics.soilTemperature) + tel.copy { + environmentMetrics = + tel.environmentMetrics.copy { + temperature = temperatureFahrenheit + soilTemperature = soilTemperatureFahrenheit + } + } + } + } else { + data + } + + val resultTelemetry = processedTelemetries.first() + + assertEquals(expectedTemperatureFahrenheit, resultTelemetry.environmentMetrics.temperature, 0.01f) + assertEquals(expectedSoilTemperatureFahrenheit, resultTelemetry.environmentMetrics.soilTemperature, 0.01f) + } +}