Files
suaveplan/packages/foundation/data/pwa/src/observability/observability.test.ts
2026-05-27 23:47:53 +01:00

51 lines
1.7 KiB
TypeScript

import { describe, expect, it } from "@suaveplan/testing/runner";
import { createPwaObservability } from "./observability";
import type { PwaObservability } from "./observability.types";
describe("createPwaObservability", () => {
it("emits on every documented counter and histogram", {
timeout: 5000,
}, () => {
const obs = createPwaObservability();
const counters = [
obs.counters.swInstalledTotal,
obs.counters.swActivatedTotal,
obs.counters.swUpdatedTotal,
obs.counters.syncEnqueuedTotal,
obs.counters.syncProcessedTotal,
obs.counters.syncFailedTotal,
obs.counters.pushSubscribedTotal,
obs.counters.installPromptTotal,
];
for (const c of counters) {
expect(() => c.add(1, { tenant: "acme" })).not.toThrow();
}
expect(() =>
obs.histograms.syncFlushMs.record(12.3, { kind: "ok" })
).not.toThrow();
expect(() =>
obs.histograms.cacheStrategyMs.record(4.2, {
strategy: "cacheFirst",
})
).not.toThrow();
});
it("passes through a pre-built observability bundle", {
timeout: 5000,
}, () => {
const existing = createPwaObservability();
const passed: PwaObservability = createPwaObservability({
observability: existing,
});
expect(passed).toBe(existing);
});
it("supplies a default meter and tracer when none are provided", {
timeout: 5000,
}, () => {
const obs = createPwaObservability();
expect(obs.meter).toBeDefined();
expect(obs.tracer).toBeDefined();
});
});