UNPKG

@backstage/backend-test-utils

Version:

Test helpers library for Backstage backends

102 lines (99 loc) 2.91 kB
'use strict'; var backendPluginApi = require('@backstage/backend-plugin-api'); var alpha$1 = require('@backstage/backend-plugin-api/alpha'); var alpha = require('@backstage/backend-defaults/alpha'); function toMockContext(ctx) { return ctx; } function fromMockContext(ctx) { return ctx; } function parseBaggageHeader(carrier) { let raw; for (const [name, value] of Object.entries(carrier)) { if (name.toLowerCase() !== "baggage") continue; raw = Array.isArray(value) ? value[0] : value; break; } if (!raw) return void 0; const entries = /* @__PURE__ */ new Map(); for (const segment of raw.split(",")) { const [pair] = segment.split(";"); const eqIdx = pair.indexOf("="); if (eqIdx === -1) continue; const key = decodeURIComponent(pair.slice(0, eqIdx).trim()); const value = decodeURIComponent(pair.slice(eqIdx + 1).trim()); if (!key) continue; entries.set(key, { value }); } if (entries.size === 0) return void 0; return { getAllEntries: () => Array.from(entries.entries()) }; } exports.tracingServiceMock = void 0; ((tracingServiceMock2) => { tracingServiceMock2.factory = () => alpha.tracingServiceFactory; tracingServiceMock2.mock = () => { const spans = []; const startActiveSpan = jest.fn( async (_name, optionsOrFn, maybeFn) => { const fn = typeof optionsOrFn === "function" ? optionsOrFn : maybeFn; const span = { setAttribute: jest.fn(), setStatus: jest.fn() }; spans.push(span); return await fn(span); } ); const contextStack = [{}]; const active = jest.fn( () => fromMockContext(contextStack[contextStack.length - 1]) ); const withFn = jest.fn(async (ctx, fn) => { contextStack.push(toMockContext(ctx)); try { return await fn(); } finally { contextStack.pop(); } }); const extract = jest.fn((ctx, carrier) => { const baggage = parseBaggageHeader(carrier); const base = toMockContext(ctx); return fromMockContext({ baggage: baggage ?? base.baggage }); }); const getBaggage = jest.fn( (ctx) => toMockContext(ctx).baggage ); const getActiveBaggage = jest.fn( () => contextStack[contextStack.length - 1].baggage ); const context = { active, with: withFn }; const propagation = { extract, getBaggage, getActiveBaggage }; const service = { startActiveSpan, context, propagation }; return Object.assign(service, { context, propagation, spans, factory: backendPluginApi.createServiceFactory({ service: alpha$1.tracingServiceRef, deps: {}, factory: () => service }) }); }; })(exports.tracingServiceMock || (exports.tracingServiceMock = {})); //# sourceMappingURL=TracingServiceMock.cjs.js.map