Merge pull request #739 from RickZaki/GHissue-643

fix: issue 643 - Fahrenheit values in graph were converted twice
This commit is contained in:
Jason Kulatunga
2025-04-23 08:06:20 -04:00
committed by GitHub
3 changed files with 45 additions and 21 deletions
@@ -159,9 +159,18 @@ export class DashboardComponent implements OnInit, AfterViewInit, OnDestroy
for(const tempHistory of deviceSummary.temp_history){ for(const tempHistory of deviceSummary.temp_history){
const newDate = new Date(tempHistory.date); const newDate = new Date(tempHistory.date);
let temperature;
switch (this.config.temperature_unit) {
case 'celsius':
temperature = tempHistory.temp;
break
case 'fahrenheit':
temperature = TemperaturePipe.celsiusToFahrenheit(tempHistory.temp)
break
}
deviceSeriesMetadata.data.push({ deviceSeriesMetadata.data.push({
x: newDate, x: newDate,
y: TemperaturePipe.formatTemperature(tempHistory.temp, this.config.temperature_unit, false) y: temperature
}) })
} }
deviceTemperatureSeries.push(deviceSeriesMetadata) deviceTemperatureSeries.push(deviceSeriesMetadata)
@@ -11,16 +11,16 @@ describe('TemperaturePipe', () => {
const testCases = [ const testCases = [
{ {
'c': -273.15, 'c': -273.15,
'f': -460, 'f': -459.66999999999996,
},{ },{
'c': -34.44, 'c': -34.44,
'f': -30, 'f': -29.991999999999997,
},{ },{
'c': -23.33, 'c': -23.33,
'f': -10, 'f': -9.993999999999993,
},{ },{
'c': -17.78, 'c': -17.78,
'f': -0, 'f': -0.0040000000000048885,
},{ },{
'c': 0, 'c': 0,
'f': 32, 'f': 32,
@@ -29,10 +29,10 @@ describe('TemperaturePipe', () => {
'f': 50, 'f': 50,
},{ },{
'c': 26.67, 'c': 26.67,
'f': 80, 'f': 80.006,
},{ },{
'c': 37, 'c': 37,
'f': 99, 'f': 98.6,
},{ },{
'c': 60, 'c': 60,
'f': 140, 'f': 140,
@@ -42,8 +42,7 @@ describe('TemperaturePipe', () => {
it(`should correctly convert ${test.c}, Celsius to Fahrenheit (testcase: ${index + 1})`, () => { it(`should correctly convert ${test.c}, Celsius to Fahrenheit (testcase: ${index + 1})`, () => {
// test // test
const numb = TemperaturePipe.celsiusToFahrenheit(test.c) const numb = TemperaturePipe.celsiusToFahrenheit(test.c)
const roundNumb = Math.round(numb); expect(numb).toEqual(test.f);
expect(roundNumb).toEqual(test.f);
}); });
}) })
}); });
@@ -55,6 +54,11 @@ describe('TemperaturePipe', () => {
'unit': 'celsius', 'unit': 'celsius',
'includeUnits': true, 'includeUnits': true,
'result': '26.67°C' 'result': '26.67°C'
},{
'c': 26.6767,
'unit': 'celsius',
'includeUnits': true,
'result': '26.677°C'
},{ },{
'c': 26.67, 'c': 26.67,
'unit': 'celsius', 'unit': 'celsius',
@@ -64,12 +68,17 @@ describe('TemperaturePipe', () => {
'c': 26.67, 'c': 26.67,
'unit': 'fahrenheit', 'unit': 'fahrenheit',
'includeUnits': true, 'includeUnits': true,
'result': '80.006°F', 'result': '26.67°F',
},{
'c': 26.6767,
'unit': 'fahrenheit',
'includeUnits': true,
'result': '26.677°F',
},{ },{
'c': 26.67, 'c': 26.67,
'unit': 'fahrenheit', 'unit': 'fahrenheit',
'includeUnits': false, 'includeUnits': false,
'result': '80.006', 'result': '26.67',
} }
] ]
testCases.forEach((test, index) => { testCases.forEach((test, index) => {
@@ -6,29 +6,35 @@ import {formatNumber} from '@angular/common';
}) })
export class TemperaturePipe implements PipeTransform { export class TemperaturePipe implements PipeTransform {
static celsiusToFahrenheit(celsiusTemp: number): number { static celsiusToFahrenheit(celsiusTemp: number): number {
return celsiusTemp * 9.0 / 5.0 + 32; return celsiusTemp * 9/5 + 32;
} }
static formatTemperature(celsiusTemp: number, unit: string, includeUnits: boolean): number|string { static formatTemperature(temp: number, unit: string, includeUnits: boolean): number|string {
let convertedTemp let unitSuffix
let convertedUnitSuffix
switch (unit) { switch (unit) {
case 'celsius': case 'celsius':
convertedTemp = celsiusTemp unitSuffix = '°C'
convertedUnitSuffix = '°C'
break break
case 'fahrenheit': case 'fahrenheit':
convertedTemp = TemperaturePipe.celsiusToFahrenheit(celsiusTemp) unitSuffix = '°F'
convertedUnitSuffix = '°F'
break break
} }
if(includeUnits){ if(includeUnits){
return formatNumber(convertedTemp, 'en-US') + convertedUnitSuffix return formatNumber(temp, 'en-US') + unitSuffix
} else { } else {
return formatNumber(convertedTemp, 'en-US',) return formatNumber(temp, 'en-US',)
} }
} }
transform(celsiusTemp: number, unit = 'celsius', includeUnits = false): number|string { transform(celsiusTemp: number, unit = 'celsius', includeUnits = false): number|string {
let temperature;
switch (unit) {
case 'celsius':
temperature = celsiusTemp;
break
case 'fahrenheit':
temperature = TemperaturePipe.celsiusToFahrenheit(celsiusTemp)
break
}
return TemperaturePipe.formatTemperature(celsiusTemp, unit, includeUnits) return TemperaturePipe.formatTemperature(celsiusTemp, unit, includeUnits)
} }