import { describe, expect, it } from "vitest"; import { DEFAULT_DISTANCE_UNIT, DEFAULT_PRECIPITATION_UNIT, DEFAULT_PRESSURE_UNIT, DEFAULT_WIND_SPEED_UNIT, formatDistance, formatPrecipitation, formatPressure, formatTemperature, formatWindSpeed, isDistanceUnit, isPrecipitationUnit, isPressureUnit, isTemperatureUnit, isWindSpeedUnit, } from "@/lib/weather-utils"; describe("weather utilities", () => { it("formats wind speed in km/h by default", () => { expect(DEFAULT_WIND_SPEED_UNIT).toBe("kmh"); expect(formatWindSpeed(5, "en")).toBe("18 km/h"); }); it("formats selected temperature and wind units", () => { expect(formatTemperature(10, "en", "f")).toBe("50°F"); expect(formatWindSpeed(4, "en", "mph")).toBe("9 mph"); expect(formatWindSpeed(4, "en", "ms")).toBe("4.0 m/s"); expect(formatWindSpeed(4, "en", "kt")).toBe("8 kt"); expect(formatWindSpeed(4, "en", "bft")).toBe("3 Bft"); }); it("formats selected precipitation, pressure and distance units", () => { expect(DEFAULT_PRECIPITATION_UNIT).toBe("mm"); expect(DEFAULT_PRESSURE_UNIT).toBe("hpa"); expect(DEFAULT_DISTANCE_UNIT).toBe("km"); expect(formatPrecipitation(25.4, "en", "mm")).toBe("25.4 mm"); expect(formatPrecipitation(10, "en", "cm")).toBe("1 cm"); expect(formatPrecipitation(25.4, "en", "in")).toBe("1.00 in"); expect(formatPressure(1013.25, "en", "hpa")).toBe("1,013.3 hPa"); expect(formatPressure(1013.25, "en", "kpa")).toBe("101.3 kPa"); expect(formatPressure(1013.25, "en", "inhg")).toBe("29.92 inHg"); expect(formatPressure(1013.25, "en", "mmhg")).toBe("760 mm Hg"); expect(formatDistance(10, "en", "km")).toBe("10 km"); expect(formatDistance(10, "en", "mi")).toBe("6.2 mi"); }); it("validates supported presentation units", () => { expect(isTemperatureUnit("c")).toBe(true); expect(isTemperatureUnit("kelvin")).toBe(false); expect(isWindSpeedUnit("kmh")).toBe(true); expect(isWindSpeedUnit("kt")).toBe(true); expect(isWindSpeedUnit("bft")).toBe(true); expect(isWindSpeedUnit("knots")).toBe(false); expect(isPrecipitationUnit("in")).toBe(true); expect(isPrecipitationUnit("l")).toBe(false); expect(isPressureUnit("kpa")).toBe(true); expect(isPressureUnit("mbar")).toBe(false); expect(isDistanceUnit("mi")).toBe(true); expect(isDistanceUnit("m")).toBe(false); }); });