Normalize FAAB events into stable sport buckets on master-api, group the TV Events tab by sport (with client fallback), and bump Android TV to 128/0.14.65.
54 lines
2.4 KiB
TypeScript
54 lines
2.4 KiB
TypeScript
import { resolveSportBucket, sportLabelFor } from "./schedule-events";
|
|
|
|
function assert(cond: unknown, msg: string) {
|
|
if (!cond) throw new Error(msg);
|
|
}
|
|
|
|
function expectBucket(
|
|
input: { category?: string; eventType?: string; name?: string; subtitle?: string },
|
|
bucket: string
|
|
) {
|
|
const r = resolveSportBucket(input);
|
|
assert(r.sportBucket === bucket, `expected ${bucket} got ${r.sportBucket} for ${JSON.stringify(input)}`);
|
|
assert(r.sportLabel === sportLabelFor(bucket), `label mismatch for ${bucket}`);
|
|
}
|
|
|
|
// 1) category first token
|
|
expectBucket({ category: "Voetbal" }, "football");
|
|
expectBucket({ category: "Voetbal, UEFA Europa League" }, "football");
|
|
expectBucket({ category: "Racing, MotoGP" }, "racing");
|
|
expectBucket({ category: "Tennis, ATP, ATP 500" }, "tennis");
|
|
expectBucket({ category: "Golf, USA PGA tour" }, "golf");
|
|
expectBucket({ category: "Waterpolo" }, "waterpolo");
|
|
|
|
// Noise categories → fall through / other
|
|
expectBucket({ category: "Documentaire", name: "The Iconic: Voetbal" }, "other");
|
|
expectBucket({ category: "Talkshow" }, "other");
|
|
expectBucket({ category: "all" }, "other");
|
|
expectBucket({ category: "Upcoming" }, "other");
|
|
expectBucket({ category: "Live" }, "other");
|
|
|
|
// 2) eventType / leagues
|
|
expectBucket({ category: "all", eventType: "Premier League", name: "Brentford - Chelsea" }, "football");
|
|
expectBucket({ category: "all", eventType: "Bundesliga" }, "football");
|
|
expectBucket({ category: "all", eventType: "PDC Darts" }, "darts");
|
|
expectBucket({ category: "all", eventType: "Formula 4 Italian Championship" }, "racing");
|
|
expectBucket({ category: "all", eventType: "Sail GP" }, "sailing");
|
|
expectBucket({ category: "all", eventType: "Ferrari Challenge UK" }, "racing");
|
|
expectBucket({ category: "all", eventType: "Goodwood Festival of Speed" }, "racing");
|
|
expectBucket({ category: "all", eventType: "ATP Tour" }, "tennis");
|
|
|
|
// Instant restart alone → other (unless name helps)
|
|
expectBucket({ category: "Live", eventType: "Instant restart", name: "ESPN: ESPN Vandaag" }, "other");
|
|
expectBucket(
|
|
{ category: "Live", eventType: "Instant restart", name: "Ziggo Sport: Ziggo Sport Race Café" },
|
|
"racing"
|
|
);
|
|
|
|
// 3) name keywords
|
|
expectBucket({ name: "NBA Today" }, "basketball");
|
|
expectBucket({ name: "Ligue 1: Monaco - Lens" }, "football");
|
|
expectBucket({ name: "PDC Darts: World Series of Darts Finals 2026" }, "darts");
|
|
expectBucket({ name: "Some snooker final" }, "snooker");
|
|
|
|
console.log("schedule-events-sport tests ok");
|