import assert from "node:assert/strict" import test from "node:test" import { clusterCountLabel, clusterExpansionTarget, clusterSizeClass, pointFeatureCollection, pointSourceOptions, serverClusterDescriptor } from "./map_cluster_features.mjs" test("server hierarchy metadata survives GeoJSON conversion without becoming a native cluster", () => { const feature = pointFeatureCollection([ { id: "request:11:1197:1378", type: "cluster", cluster_id: "request:11:1197:1378", parent_cluster_id: "request:10:598:689", hierarchy_level: 11, expansion_zoom: 13, longitude: 30.52, latitude: 50.45, count: 27 } ]).features[0] assert.equal(feature.properties.server_cluster_id, "request:11:1197:1378") assert.equal(feature.properties.parent_cluster_id, "request:10:598:689") assert.equal(feature.properties.hierarchy_level, 11) assert.equal(feature.properties.expansion_zoom, 13) assert.equal(feature.properties.weight, 27) assert.equal(feature.properties.count_label, "27") assert.equal("point_count" in feature.properties, false) }) test("browser source leaves server hierarchy nodes unclustered", () => { const collection = pointFeatureCollection([ { id: "request:11:1197:1378", type: "cluster", longitude: 30.52, latitude: 50.45, count: 27 } ]) const source = pointSourceOptions(collection) assert.equal(source.cluster, false) assert.equal(source.data, collection) }) test("cluster size classes remain stable for accessible count buttons", () => { assert.equal(clusterSizeClass(999), "is-md") assert.equal(clusterSizeClass(1_000), "is-lg") assert.equal(clusterSizeClass(10_000), "is-xl") assert.equal(clusterSizeClass(100_000), "is-xxl") }) test("large visual counts are compact while exact values remain available to accessibility text", () => { assert.equal(clusterCountLabel(999, "en"), "999") assert.equal(clusterCountLabel(1_250, "en"), "1.3K") assert.equal(clusterCountLabel(48_533, "en"), "49K") assert.equal(clusterCountLabel(1_000_000, "en"), "1M") }) test("server cluster count labels are compacted before rendering", () => { const feature = pointFeatureCollection([ { id: "request:12:2402:2406", type: "cluster", longitude: 31.3, latitude: 30.2, count: 48_533 } ], "en").features[0] assert.equal(feature.properties.count_label, "49K") }) test("only server hierarchy nodes become cluster markers", () => { assert.deepEqual( serverClusterDescriptor({ id: "request:12:2402:2406", type: "cluster", longitude: 31.3, latitude: 30.2, count: 1_727, urgent_count: 8 }), { key: "server:request:12:2402:2406", count: 1_727, urgentCount: 8, longitude: 31.3, latitude: 30.2 } ) assert.equal( serverClusterDescriptor({ id: "request-1", type: "request", longitude: 31.3, latitude: 30.2 }), null ) }) test("cluster expansion always advances at least one integer zoom level", () => { assert.equal(clusterExpansionTarget(9, 9), 10) assert.equal(clusterExpansionTarget(8.999_999_096_835_52, 9), 10) assert.equal(clusterExpansionTarget(10.999_994_193_019_71, 11), 12) assert.equal(clusterExpansionTarget(9.6, 10), 10) assert.equal(clusterExpansionTarget(9.6, 13), 13) assert.equal(clusterExpansionTarget(21.9, 24), 22) })