krz/moonrise

Night-sky companion for iPhone, Apple Watch and Vision Pro: what's up tonight, the Moon, planets, launches and missions, and a Library of the solar system. SwiftUI app with a Cloudflare Workers backend. astronomy cloudflare-workers ios night-sky space swiftui visionos watchos

server/test/celestrak.test.ts

main
moonrise/server/test/celestrak.test.ts history · blame · raw

31 lines · 1713 bytes

 1import assert from "node:assert/strict";
 2import { test } from "node:test";
 3import { pick, starlinkTrains } from "../src/celestrak.ts";
 4
 5test("keeps only the SGP4 fields", () => {
 6  // CelesTrak GP JSON for the ISS, 2026-10-18.
 7  const row = {
 8    OBJECT_NAME: "ISS (ZARYA)", OBJECT_ID: "1998-067A", EPOCH: "2026-10-18T03:28:15.076416", MEAN_MOTION: 15.48918166,
 9    ECCENTRICITY: 0.000678, INCLINATION: 51.6328, RA_OF_ASC_NODE: 51.6259, ARG_OF_PERICENTER: 277.7856, MEAN_ANOMALY: 82.2363,
10    EPHEMERIS_TYPE: 0, CLASSIFICATION_TYPE: "U", NORAD_CAT_ID: 25544, ELEMENT_SET_NO: 999, REV_AT_EPOCH: 59081, BSTAR: 0.00014456,
11    MEAN_MOTION_DOT: 7.503e-05, MEAN_MOTION_DDOT: 0,
12  };
13  const [o] = pick([row]);
14  assert.deepEqual(Object.keys(o).sort(), ["ARG_OF_PERICENTER", "BSTAR", "ECCENTRICITY", "EPOCH", "INCLINATION", "MEAN_ANOMALY", "MEAN_MOTION", "NORAD_CAT_ID", "OBJECT_NAME", "RA_OF_ASC_NODE"]);
15  assert.equal(o.NORAD_CAT_ID, 25544);
16});
17
18test("one Starlink train per low recent launch, median satellite", () => {
19  const sat = (id: string, n: number, mm: number) => ({
20    OBJECT_NAME: `STARLINK-${n}`, OBJECT_ID: id, NORAD_CAT_ID: n, EPOCH: "2026-10-18T00:00:00", MEAN_MOTION: mm,
21    ECCENTRICITY: 0.0001, INCLINATION: 53, RA_OF_ASC_NODE: 10, ARG_OF_PERICENTER: 90, MEAN_ANOMALY: 0, BSTAR: 0.001,
22  });
23  const trains = starlinkTrains([
24    sat("2026-232A", 1, 15.9), sat("2026-232B", 2, 16.0), sat("2026-232C", 3, 15.95),
25    sat("2026-180A", 4, 15.06), sat("2026-180B", 5, 15.07),
26    { ...sat("2026-232D", 6, 16.1), OBJECT_NAME: "FALCON 9 R/B" },
27  ]);
28  assert.equal(trains.length, 1);
29  assert.equal(trains[0].OBJECT_NAME, "Starlink train (2026-232)");
30  assert.equal(trains[0].NORAD_CAT_ID, 3);
31});