Initial Watermaps import
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
import "@testing-library/jest-dom/vitest";
|
||||
import { cleanup, render, screen } from "@testing-library/react";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import type { MarineForecast, RouteGuidanceResult } from "@watermaps/shared";
|
||||
import { StatusBar } from "../src/components/StatusBar";
|
||||
import type { GpsState } from "../src/hooks/useGeolocation";
|
||||
|
||||
afterEach(cleanup);
|
||||
|
||||
const idleGps: GpsState = {
|
||||
status: "idle",
|
||||
position: null,
|
||||
accuracyM: null,
|
||||
speedKn: null,
|
||||
courseDeg: null,
|
||||
timestampMs: null,
|
||||
message: null
|
||||
};
|
||||
|
||||
describe("StatusBar", () => {
|
||||
it("shows only three planning values without claiming that a route is safe", () => {
|
||||
const forecast = {
|
||||
windSpeed: 12,
|
||||
waveHeightM: 0.8
|
||||
} as MarineForecast;
|
||||
|
||||
const { container } = render(
|
||||
<StatusBar
|
||||
gps={idleGps}
|
||||
forecast={forecast}
|
||||
tide={null}
|
||||
routeWarningCount={0}
|
||||
mode="planning"
|
||||
/>
|
||||
);
|
||||
|
||||
expect(container.querySelectorAll(".status-item")).toHaveLength(3);
|
||||
expect(screen.getByText("12 kn · 0.8 m")).toBeVisible();
|
||||
expect(screen.queryByText("Route OK")).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("prioritizes course, cross-track error and open warnings during guidance", () => {
|
||||
const guidance = {
|
||||
desiredCourseDeg: 87,
|
||||
distanceToRouteM: 24,
|
||||
crossTrackSide: "starboard"
|
||||
} as RouteGuidanceResult;
|
||||
|
||||
render(
|
||||
<StatusBar
|
||||
gps={{ ...idleGps, status: "tracking", speedKn: 6.2 }}
|
||||
forecast={null}
|
||||
tide={null}
|
||||
routeWarningCount={2}
|
||||
mode="guidance"
|
||||
guidance={guidance}
|
||||
/>
|
||||
);
|
||||
|
||||
expect(screen.getByText("087°T")).toBeVisible();
|
||||
expect(screen.getByText("24 m Stb")).toBeVisible();
|
||||
expect(screen.getByText("2 offen")).toBeVisible();
|
||||
});
|
||||
|
||||
it("shows anchor drift, GPS and the expected tide rise in anchor mode", () => {
|
||||
render(
|
||||
<StatusBar
|
||||
gps={{ ...idleGps, status: "tracking", position: { lat: 53.2, lon: 7.1 }, accuracyM: 5 }}
|
||||
forecast={null}
|
||||
tide={null}
|
||||
routeWarningCount={0}
|
||||
mode="anchor"
|
||||
anchor={{
|
||||
distanceFromAnchorM: 11.5,
|
||||
alarmRadiusM: 40,
|
||||
alarm: false,
|
||||
maximumTideRiseM: 1.3
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
expect(screen.getByText("12 / 40 m")).toBeVisible();
|
||||
expect(screen.getByText("±5 m")).toBeVisible();
|
||||
expect(screen.getByText("+1.3 m")).toBeVisible();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user