118 lines
3.4 KiB
JavaScript
118 lines
3.4 KiB
JavaScript
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)
|
|
})
|