UNPKG

autotel

Version:
1 lines 7.03 kB
{"version":3,"sources":["../src/metric-testing.ts"],"names":[],"mappings":"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","file":"chunk-YTXEZ4SD.cjs","sourcesContent":["/**\n * Testing utilities for Metrics\n *\n * Provides in-memory collection of metrics for testing purposes.\n */\n\nimport type {\n EventAttributes,\n FunnelStatus,\n OutcomeStatus,\n} from './event-subscriber';\n\nexport interface MetricsEvent {\n event: string;\n attributes?: EventAttributes;\n service: string;\n timestamp: number;\n}\n\nexport interface MetricsFunnelStep {\n funnel: string;\n status: FunnelStatus;\n attributes?: EventAttributes;\n service: string;\n timestamp: number;\n}\n\nexport interface MetricsOutcome {\n operation: string;\n status: OutcomeStatus;\n attributes?: EventAttributes;\n service: string;\n timestamp: number;\n}\n\nexport interface MetricsValue {\n metric: string;\n value: number;\n attributes?: EventAttributes;\n service: string;\n timestamp: number;\n}\n\n/**\n * In-memory metrics collector for testing\n */\nexport interface MetricsCollector {\n /** Get all collected events */\n getEvents(): MetricsEvent[];\n /** Get all collected funnel steps */\n getFunnelSteps(): MetricsFunnelStep[];\n /** Get all collected outcomes */\n getOutcomes(): MetricsOutcome[];\n /** Get all collected values */\n getValues(): MetricsValue[];\n /** Clear all collected metrics */\n clear(): void;\n /** Record an event (internal use) */\n recordEvent(event: MetricsEvent): void;\n /** Record a funnel step (internal use) */\n recordFunnelStep(step: MetricsFunnelStep): void;\n /** Record an outcome (internal use) */\n recordOutcome(outcome: MetricsOutcome): void;\n /** Record a value (internal use) */\n recordValue(value: MetricsValue): void;\n}\n\n/**\n * Create an in-memory metrics collector for testing\n *\n * @example\n * ```typescript\n * const collector = createMetricsCollector()\n *\n * const metrics = new Metric('test-service', { collector })\n * metrics.trackEvent('order.completed', { orderId: '123' })\n *\n * const event =collector.getEvents()\n * expect(events).toHaveLength(1)\n * expect(events[0].event).toBe('order.completed')\n * ```\n */\nexport function createMetricsCollector(): MetricsCollector {\n const events: MetricsEvent[] = [];\n const funnelSteps: MetricsFunnelStep[] = [];\n const outcomes: MetricsOutcome[] = [];\n const values: MetricsValue[] = [];\n\n return {\n getEvents(): MetricsEvent[] {\n return [...events];\n },\n\n getFunnelSteps(): MetricsFunnelStep[] {\n return [...funnelSteps];\n },\n\n getOutcomes(): MetricsOutcome[] {\n return [...outcomes];\n },\n\n getValues(): MetricsValue[] {\n return [...values];\n },\n\n clear(): void {\n events.length = 0;\n funnelSteps.length = 0;\n outcomes.length = 0;\n values.length = 0;\n },\n\n recordEvent(event: MetricsEvent): void {\n events.push(event);\n },\n\n recordFunnelStep(step: MetricsFunnelStep): void {\n funnelSteps.push(step);\n },\n\n recordOutcome(outcome: MetricsOutcome): void {\n outcomes.push(outcome);\n },\n\n recordValue(value: MetricsValue): void {\n values.push(value);\n },\n };\n}\n\n/**\n * Assert that a metric event was tracked\n *\n * @example\n * ```typescript\n * assertEventTracked({\n * collector,\n * eventName: 'order.completed',\n * attributes: { orderId: '123' }\n * })\n * ```\n */\nexport function assertEventTracked(options: {\n collector: MetricsCollector;\n eventName: string;\n attributes?: Record<string, unknown>;\n}): void {\n const events = options.collector.getEvents();\n const matching = events.filter((e) => e.event === options.eventName);\n\n if (matching.length === 0) {\n throw new Error(`No events found with name: ${options.eventName}`);\n }\n\n if (options.attributes) {\n const matchingWithAttrs = matching.filter((e) =>\n Object.entries(options.attributes!).every(\n ([key, value]) => e.attributes && e.attributes[key] === value,\n ),\n );\n\n if (matchingWithAttrs.length === 0) {\n throw new Error(\n `Event ${options.eventName} found but attributes don't match: ${JSON.stringify(options.attributes)}`,\n );\n }\n }\n}\n\n/**\n * Assert that an outcome was tracked\n *\n * @example\n * ```typescript\n * assertOutcomeTracked({\n * collector,\n * operation: 'payment.process',\n * status: 'success'\n * })\n * ```\n */\nexport function assertOutcomeTracked(options: {\n collector: MetricsCollector;\n operation: string;\n status: 'success' | 'failure' | 'partial';\n}): void {\n const outcomes = options.collector.getOutcomes();\n const matching = outcomes.filter(\n (o) => o.operation === options.operation && o.status === options.status,\n );\n\n if (matching.length === 0) {\n throw new Error(\n `No outcomes found with operation: ${options.operation} and status: ${options.status}`,\n );\n }\n}\n"]}