Files
wtr/tests/weather-utils.test.ts
zv 91acdb39b8
Some checks failed
CI / Lint, test, typecheck and build (push) Has been cancelled
feat: add weather unit preferences
2026-07-04 20:16:11 +02:00

67 lines
2.4 KiB
TypeScript

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);
});
});