observability-toolkit 1.8.2 → 1.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -0
- package/dist/backends/index.d.ts +43 -0
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +41 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/index.test.d.ts +5 -0
- package/dist/backends/index.test.d.ts.map +1 -0
- package/dist/backends/index.test.js +156 -0
- package/dist/backends/index.test.js.map +1 -0
- package/dist/backends/local-jsonl-boolean-search.test.js +8 -5
- package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
- package/dist/backends/local-jsonl-logs.test.d.ts +2 -0
- package/dist/backends/local-jsonl-logs.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-logs.test.js +603 -0
- package/dist/backends/local-jsonl-logs.test.js.map +1 -0
- package/dist/backends/local-jsonl-traces.test.d.ts +2 -0
- package/dist/backends/local-jsonl-traces.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-traces.test.js +1723 -0
- package/dist/backends/local-jsonl-traces.test.js.map +1 -0
- package/dist/backends/local-jsonl.test.js +290 -21
- package/dist/backends/local-jsonl.test.js.map +1 -1
- package/dist/lib/constants.d.ts +43 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +154 -24
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/constants.test.js +156 -7
- package/dist/lib/constants.test.js.map +1 -1
- package/dist/lib/edge-cases.test.d.ts +11 -0
- package/dist/lib/edge-cases.test.d.ts.map +1 -0
- package/dist/lib/edge-cases.test.js +634 -0
- package/dist/lib/edge-cases.test.js.map +1 -0
- package/dist/lib/error-sanitizer.d.ts.map +1 -1
- package/dist/lib/error-sanitizer.js +33 -23
- package/dist/lib/error-sanitizer.js.map +1 -1
- package/dist/lib/error-sanitizer.test.js +27 -0
- package/dist/lib/error-sanitizer.test.js.map +1 -1
- package/dist/lib/file-utils.test.js +3 -3
- package/dist/lib/file-utils.test.js.map +1 -1
- package/dist/lib/indexer.test.js +138 -5
- package/dist/lib/indexer.test.js.map +1 -1
- package/dist/lib/input-validator.d.ts +5 -0
- package/dist/lib/input-validator.d.ts.map +1 -1
- package/dist/lib/input-validator.js +5 -0
- package/dist/lib/input-validator.js.map +1 -1
- package/dist/lib/query-sanitizer.d.ts +51 -3
- package/dist/lib/query-sanitizer.d.ts.map +1 -1
- package/dist/lib/query-sanitizer.js +105 -31
- package/dist/lib/query-sanitizer.js.map +1 -1
- package/dist/lib/query-sanitizer.test.js +102 -1
- package/dist/lib/query-sanitizer.test.js.map +1 -1
- package/dist/lib/server-utils.d.ts +80 -0
- package/dist/lib/server-utils.d.ts.map +1 -0
- package/dist/lib/server-utils.js +141 -0
- package/dist/lib/server-utils.js.map +1 -0
- package/dist/lib/shared-schemas.d.ts +59 -0
- package/dist/lib/shared-schemas.d.ts.map +1 -0
- package/dist/lib/shared-schemas.js +58 -0
- package/dist/lib/shared-schemas.js.map +1 -0
- package/dist/lib/shared-schemas.test.d.ts +5 -0
- package/dist/lib/shared-schemas.test.d.ts.map +1 -0
- package/dist/lib/shared-schemas.test.js +106 -0
- package/dist/lib/shared-schemas.test.js.map +1 -0
- package/dist/lib/toon-encoder.d.ts +21 -0
- package/dist/lib/toon-encoder.d.ts.map +1 -0
- package/dist/lib/toon-encoder.js +46 -0
- package/dist/lib/toon-encoder.js.map +1 -0
- package/dist/server.d.ts +1 -49
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +152 -162
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +168 -7
- package/dist/server.test.js.map +1 -1
- package/dist/test-helpers/env-utils.d.ts +65 -0
- package/dist/test-helpers/env-utils.d.ts.map +1 -0
- package/dist/test-helpers/env-utils.js +94 -0
- package/dist/test-helpers/env-utils.js.map +1 -0
- package/dist/test-helpers/file-utils.d.ts +67 -0
- package/dist/test-helpers/file-utils.d.ts.map +1 -1
- package/dist/test-helpers/file-utils.js +165 -2
- package/dist/test-helpers/file-utils.js.map +1 -1
- package/dist/test-helpers/index.d.ts +10 -0
- package/dist/test-helpers/index.d.ts.map +1 -0
- package/dist/test-helpers/index.js +28 -0
- package/dist/test-helpers/index.js.map +1 -0
- package/dist/test-helpers/mock-backends.d.ts +113 -2
- package/dist/test-helpers/mock-backends.d.ts.map +1 -1
- package/dist/test-helpers/mock-backends.js +199 -3
- package/dist/test-helpers/mock-backends.js.map +1 -1
- package/dist/test-helpers/mock-backends.test.d.ts +5 -0
- package/dist/test-helpers/mock-backends.test.d.ts.map +1 -0
- package/dist/test-helpers/mock-backends.test.js +368 -0
- package/dist/test-helpers/mock-backends.test.js.map +1 -0
- package/dist/test-helpers/schema-validators.d.ts +32 -0
- package/dist/test-helpers/schema-validators.d.ts.map +1 -0
- package/dist/test-helpers/schema-validators.js +125 -0
- package/dist/test-helpers/schema-validators.js.map +1 -0
- package/dist/test-helpers/test-data-builders.d.ts +223 -0
- package/dist/test-helpers/test-data-builders.d.ts.map +1 -0
- package/dist/test-helpers/test-data-builders.js +288 -0
- package/dist/test-helpers/test-data-builders.js.map +1 -0
- package/dist/test-helpers/test-data-builders.test.d.ts +2 -0
- package/dist/test-helpers/test-data-builders.test.d.ts.map +1 -0
- package/dist/test-helpers/test-data-builders.test.js +306 -0
- package/dist/test-helpers/test-data-builders.test.js.map +1 -0
- package/dist/test-helpers/tool-validators.d.ts +28 -0
- package/dist/test-helpers/tool-validators.d.ts.map +1 -0
- package/dist/test-helpers/tool-validators.js +56 -0
- package/dist/test-helpers/tool-validators.js.map +1 -0
- package/dist/tools/context-stats.d.ts +1 -0
- package/dist/tools/context-stats.d.ts.map +1 -1
- package/dist/tools/context-stats.js +9 -5
- package/dist/tools/context-stats.js.map +1 -1
- package/dist/tools/context-stats.test.js +24 -10
- package/dist/tools/context-stats.test.js.map +1 -1
- package/dist/tools/get-trace-url.js +2 -2
- package/dist/tools/get-trace-url.js.map +1 -1
- package/dist/tools/health-check.js +2 -2
- package/dist/tools/health-check.js.map +1 -1
- package/dist/tools/query-evaluations.d.ts +21 -18
- package/dist/tools/query-evaluations.d.ts.map +1 -1
- package/dist/tools/query-evaluations.js +17 -17
- package/dist/tools/query-evaluations.js.map +1 -1
- package/dist/tools/query-evaluations.test.js +7 -17
- package/dist/tools/query-evaluations.test.js.map +1 -1
- package/dist/tools/query-llm-events.d.ts +19 -15
- package/dist/tools/query-llm-events.d.ts.map +1 -1
- package/dist/tools/query-llm-events.js +31 -15
- package/dist/tools/query-llm-events.js.map +1 -1
- package/dist/tools/query-llm-events.test.js +271 -9
- package/dist/tools/query-llm-events.test.js.map +1 -1
- package/dist/tools/query-logs.d.ts +22 -22
- package/dist/tools/query-logs.d.ts.map +1 -1
- package/dist/tools/query-logs.js +9 -9
- package/dist/tools/query-logs.js.map +1 -1
- package/dist/tools/query-logs.test.js +19 -72
- package/dist/tools/query-logs.test.js.map +1 -1
- package/dist/tools/query-metrics.d.ts +14 -14
- package/dist/tools/query-metrics.d.ts.map +1 -1
- package/dist/tools/query-metrics.js +9 -9
- package/dist/tools/query-metrics.js.map +1 -1
- package/dist/tools/query-metrics.test.js +12 -25
- package/dist/tools/query-metrics.test.js.map +1 -1
- package/dist/tools/query-traces.d.ts +28 -28
- package/dist/tools/query-traces.d.ts.map +1 -1
- package/dist/tools/query-traces.js +18 -18
- package/dist/tools/query-traces.js.map +1 -1
- package/dist/tools/query-traces.test.js +58 -54
- package/dist/tools/query-traces.test.js.map +1 -1
- package/dist/tools/setup-claudeignore.js +7 -7
- package/dist/tools/setup-claudeignore.js.map +1 -1
- package/dist/tools/setup-claudeignore.test.js +4 -25
- package/dist/tools/setup-claudeignore.test.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for mock backend factories
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it } from 'node:test';
|
|
5
|
+
import * as assert from 'node:assert';
|
|
6
|
+
import {
|
|
7
|
+
// Type-specific factories
|
|
8
|
+
createTraceBackend, createLogBackend, createMetricBackend, getTraceBackendOptions, getLogBackendOptions, getMetricBackendOptions,
|
|
9
|
+
// Legacy generic factories
|
|
10
|
+
createMockBackend, getMockOptions, } from './mock-backends.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Test Data
|
|
13
|
+
// ============================================================================
|
|
14
|
+
const mockTraceSpan = {
|
|
15
|
+
traceId: 'trace-123',
|
|
16
|
+
spanId: 'span-456',
|
|
17
|
+
name: 'test-span',
|
|
18
|
+
startTimeUnixNano: 1700000000000000000,
|
|
19
|
+
durationMs: 1000,
|
|
20
|
+
};
|
|
21
|
+
const mockLogRecord = {
|
|
22
|
+
timestamp: '2023-11-14T22:13:20.000Z',
|
|
23
|
+
severity: 'INFO',
|
|
24
|
+
body: 'Test log message',
|
|
25
|
+
};
|
|
26
|
+
const mockMetricDataPoint = {
|
|
27
|
+
timestamp: '2023-11-14T22:13:20.000Z',
|
|
28
|
+
name: 'test.metric',
|
|
29
|
+
value: 100,
|
|
30
|
+
};
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Type-Specific Factory Tests
|
|
33
|
+
// ============================================================================
|
|
34
|
+
describe('mock-backends: createTraceBackend', () => {
|
|
35
|
+
it('should return traces from local store', async () => {
|
|
36
|
+
const store = {
|
|
37
|
+
local: [mockTraceSpan],
|
|
38
|
+
signoz: [],
|
|
39
|
+
};
|
|
40
|
+
const backend = createTraceBackend(store, 'local');
|
|
41
|
+
const traces = await backend.queryTraces({});
|
|
42
|
+
assert.strictEqual(traces.length, 1);
|
|
43
|
+
assert.strictEqual(traces[0].traceId, 'trace-123');
|
|
44
|
+
});
|
|
45
|
+
it('should return traces from signoz store', async () => {
|
|
46
|
+
const store = {
|
|
47
|
+
local: [],
|
|
48
|
+
signoz: [mockTraceSpan],
|
|
49
|
+
};
|
|
50
|
+
const backend = createTraceBackend(store, 'signoz');
|
|
51
|
+
const traces = await backend.queryTraces({});
|
|
52
|
+
assert.strictEqual(traces.length, 1);
|
|
53
|
+
assert.strictEqual(traces[0].spanId, 'span-456');
|
|
54
|
+
});
|
|
55
|
+
it('should return empty arrays for other query types', async () => {
|
|
56
|
+
const store = {
|
|
57
|
+
local: [mockTraceSpan],
|
|
58
|
+
signoz: [],
|
|
59
|
+
};
|
|
60
|
+
const backend = createTraceBackend(store, 'local');
|
|
61
|
+
const logs = await backend.queryLogs({});
|
|
62
|
+
const metrics = await backend.queryMetrics({});
|
|
63
|
+
assert.strictEqual(logs.length, 0);
|
|
64
|
+
assert.strictEqual(metrics.length, 0);
|
|
65
|
+
});
|
|
66
|
+
it('should return healthy status', async () => {
|
|
67
|
+
const store = { local: [], signoz: [] };
|
|
68
|
+
const backend = createTraceBackend(store, 'local');
|
|
69
|
+
const health = await backend.healthCheck();
|
|
70
|
+
assert.strictEqual(health.status, 'ok');
|
|
71
|
+
});
|
|
72
|
+
it('should set correct backend name', () => {
|
|
73
|
+
const store = { local: [], signoz: [] };
|
|
74
|
+
const localBackend = createTraceBackend(store, 'local');
|
|
75
|
+
const signozBackend = createTraceBackend(store, 'signoz');
|
|
76
|
+
assert.strictEqual(localBackend.name, 'mock-local');
|
|
77
|
+
assert.strictEqual(signozBackend.name, 'mock-signoz');
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe('mock-backends: createLogBackend', () => {
|
|
81
|
+
it('should return logs from local store', async () => {
|
|
82
|
+
const store = {
|
|
83
|
+
local: [mockLogRecord],
|
|
84
|
+
signoz: [],
|
|
85
|
+
};
|
|
86
|
+
const backend = createLogBackend(store, 'local');
|
|
87
|
+
const logs = await backend.queryLogs({});
|
|
88
|
+
assert.strictEqual(logs.length, 1);
|
|
89
|
+
assert.strictEqual(logs[0].body, 'Test log message');
|
|
90
|
+
});
|
|
91
|
+
it('should return logs from signoz store', async () => {
|
|
92
|
+
const store = {
|
|
93
|
+
local: [],
|
|
94
|
+
signoz: [mockLogRecord],
|
|
95
|
+
};
|
|
96
|
+
const backend = createLogBackend(store, 'signoz');
|
|
97
|
+
const logs = await backend.queryLogs({});
|
|
98
|
+
assert.strictEqual(logs.length, 1);
|
|
99
|
+
assert.strictEqual(logs[0].severity, 'INFO');
|
|
100
|
+
});
|
|
101
|
+
it('should return empty arrays for other query types', async () => {
|
|
102
|
+
const store = {
|
|
103
|
+
local: [mockLogRecord],
|
|
104
|
+
signoz: [],
|
|
105
|
+
};
|
|
106
|
+
const backend = createLogBackend(store, 'local');
|
|
107
|
+
const traces = await backend.queryTraces({});
|
|
108
|
+
const metrics = await backend.queryMetrics({});
|
|
109
|
+
assert.strictEqual(traces.length, 0);
|
|
110
|
+
assert.strictEqual(metrics.length, 0);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('mock-backends: createMetricBackend', () => {
|
|
114
|
+
it('should return metrics from local store', async () => {
|
|
115
|
+
const store = {
|
|
116
|
+
local: [mockMetricDataPoint],
|
|
117
|
+
signoz: [],
|
|
118
|
+
};
|
|
119
|
+
const backend = createMetricBackend(store, 'local');
|
|
120
|
+
const metrics = await backend.queryMetrics({});
|
|
121
|
+
assert.strictEqual(metrics.length, 1);
|
|
122
|
+
assert.strictEqual(metrics[0].name, 'test.metric');
|
|
123
|
+
});
|
|
124
|
+
it('should return metrics from signoz store', async () => {
|
|
125
|
+
const store = {
|
|
126
|
+
local: [],
|
|
127
|
+
signoz: [mockMetricDataPoint],
|
|
128
|
+
};
|
|
129
|
+
const backend = createMetricBackend(store, 'signoz');
|
|
130
|
+
const metrics = await backend.queryMetrics({});
|
|
131
|
+
assert.strictEqual(metrics.length, 1);
|
|
132
|
+
assert.strictEqual(metrics[0].value, 100);
|
|
133
|
+
});
|
|
134
|
+
it('should return empty arrays for other query types', async () => {
|
|
135
|
+
const store = {
|
|
136
|
+
local: [mockMetricDataPoint],
|
|
137
|
+
signoz: [],
|
|
138
|
+
};
|
|
139
|
+
const backend = createMetricBackend(store, 'local');
|
|
140
|
+
const traces = await backend.queryTraces({});
|
|
141
|
+
const logs = await backend.queryLogs({});
|
|
142
|
+
assert.strictEqual(traces.length, 0);
|
|
143
|
+
assert.strictEqual(logs.length, 0);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// Type-Specific Options Tests
|
|
148
|
+
// ============================================================================
|
|
149
|
+
describe('mock-backends: getTraceBackendOptions', () => {
|
|
150
|
+
it('should return both local and signoz backends', () => {
|
|
151
|
+
const store = {
|
|
152
|
+
local: [mockTraceSpan],
|
|
153
|
+
signoz: [],
|
|
154
|
+
};
|
|
155
|
+
const options = getTraceBackendOptions(store);
|
|
156
|
+
assert.ok(options.localBackend);
|
|
157
|
+
assert.ok(options.signozBackend);
|
|
158
|
+
assert.strictEqual(options.localBackend.name, 'mock-local');
|
|
159
|
+
assert.strictEqual(options.signozBackend.name, 'mock-signoz');
|
|
160
|
+
});
|
|
161
|
+
it('should return traces from correct backend', async () => {
|
|
162
|
+
const localSpan = { ...mockTraceSpan, traceId: 'local-trace' };
|
|
163
|
+
const signozSpan = { ...mockTraceSpan, traceId: 'signoz-trace' };
|
|
164
|
+
const store = {
|
|
165
|
+
local: [localSpan],
|
|
166
|
+
signoz: [signozSpan],
|
|
167
|
+
};
|
|
168
|
+
const options = getTraceBackendOptions(store);
|
|
169
|
+
const localTraces = await options.localBackend.queryTraces({});
|
|
170
|
+
const signozTraces = await options.signozBackend.queryTraces({});
|
|
171
|
+
assert.strictEqual(localTraces[0].traceId, 'local-trace');
|
|
172
|
+
assert.strictEqual(signozTraces[0].traceId, 'signoz-trace');
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('mock-backends: getLogBackendOptions', () => {
|
|
176
|
+
it('should return both local and signoz backends', () => {
|
|
177
|
+
const store = {
|
|
178
|
+
local: [mockLogRecord],
|
|
179
|
+
signoz: [],
|
|
180
|
+
};
|
|
181
|
+
const options = getLogBackendOptions(store);
|
|
182
|
+
assert.ok(options.localBackend);
|
|
183
|
+
assert.ok(options.signozBackend);
|
|
184
|
+
});
|
|
185
|
+
it('should return logs from correct backend', async () => {
|
|
186
|
+
const localLog = { ...mockLogRecord, body: 'local log' };
|
|
187
|
+
const signozLog = { ...mockLogRecord, body: 'signoz log' };
|
|
188
|
+
const store = {
|
|
189
|
+
local: [localLog],
|
|
190
|
+
signoz: [signozLog],
|
|
191
|
+
};
|
|
192
|
+
const options = getLogBackendOptions(store);
|
|
193
|
+
const localLogs = await options.localBackend.queryLogs({});
|
|
194
|
+
const signozLogs = await options.signozBackend.queryLogs({});
|
|
195
|
+
assert.strictEqual(localLogs[0].body, 'local log');
|
|
196
|
+
assert.strictEqual(signozLogs[0].body, 'signoz log');
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe('mock-backends: getMetricBackendOptions', () => {
|
|
200
|
+
it('should return both local and signoz backends', () => {
|
|
201
|
+
const store = {
|
|
202
|
+
local: [mockMetricDataPoint],
|
|
203
|
+
signoz: [],
|
|
204
|
+
};
|
|
205
|
+
const options = getMetricBackendOptions(store);
|
|
206
|
+
assert.ok(options.localBackend);
|
|
207
|
+
assert.ok(options.signozBackend);
|
|
208
|
+
});
|
|
209
|
+
it('should return metrics from correct backend', async () => {
|
|
210
|
+
const localMetric = { ...mockMetricDataPoint, value: 100 };
|
|
211
|
+
const signozMetric = { ...mockMetricDataPoint, value: 200 };
|
|
212
|
+
const store = {
|
|
213
|
+
local: [localMetric],
|
|
214
|
+
signoz: [signozMetric],
|
|
215
|
+
};
|
|
216
|
+
const options = getMetricBackendOptions(store);
|
|
217
|
+
const localMetrics = await options.localBackend.queryMetrics({});
|
|
218
|
+
const signozMetrics = await options.signozBackend.queryMetrics({});
|
|
219
|
+
assert.strictEqual(localMetrics[0].value, 100);
|
|
220
|
+
assert.strictEqual(signozMetrics[0].value, 200);
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
// ============================================================================
|
|
224
|
+
// Legacy Generic Factory Tests (Backward Compatibility)
|
|
225
|
+
// ============================================================================
|
|
226
|
+
describe('mock-backends: createMockBackend (legacy)', () => {
|
|
227
|
+
it('should return traces with runtime validation', async () => {
|
|
228
|
+
const store = {
|
|
229
|
+
local: [mockTraceSpan],
|
|
230
|
+
signoz: [],
|
|
231
|
+
};
|
|
232
|
+
const backend = createMockBackend(store, 'traces', 'local');
|
|
233
|
+
const traces = await backend.queryTraces({});
|
|
234
|
+
assert.strictEqual(traces.length, 1);
|
|
235
|
+
assert.strictEqual(traces[0].traceId, 'trace-123');
|
|
236
|
+
});
|
|
237
|
+
it('should return logs with runtime validation', async () => {
|
|
238
|
+
const store = {
|
|
239
|
+
local: [mockLogRecord],
|
|
240
|
+
signoz: [],
|
|
241
|
+
};
|
|
242
|
+
const backend = createMockBackend(store, 'logs', 'local');
|
|
243
|
+
const logs = await backend.queryLogs({});
|
|
244
|
+
assert.strictEqual(logs.length, 1);
|
|
245
|
+
assert.strictEqual(logs[0].body, 'Test log message');
|
|
246
|
+
});
|
|
247
|
+
it('should return metrics with runtime validation', async () => {
|
|
248
|
+
const store = {
|
|
249
|
+
local: [mockMetricDataPoint],
|
|
250
|
+
signoz: [],
|
|
251
|
+
};
|
|
252
|
+
const backend = createMockBackend(store, 'metrics', 'local');
|
|
253
|
+
const metrics = await backend.queryMetrics({});
|
|
254
|
+
assert.strictEqual(metrics.length, 1);
|
|
255
|
+
assert.strictEqual(metrics[0].name, 'test.metric');
|
|
256
|
+
});
|
|
257
|
+
it('should filter out invalid data with type guards', async () => {
|
|
258
|
+
// Intentionally pass invalid data to test type guards
|
|
259
|
+
const invalidData = [
|
|
260
|
+
{ invalid: true },
|
|
261
|
+
mockTraceSpan,
|
|
262
|
+
{ alsoinvalid: 'yes' },
|
|
263
|
+
];
|
|
264
|
+
const store = {
|
|
265
|
+
local: invalidData,
|
|
266
|
+
signoz: [],
|
|
267
|
+
};
|
|
268
|
+
const backend = createMockBackend(store, 'traces', 'local');
|
|
269
|
+
const traces = await backend.queryTraces({});
|
|
270
|
+
// Only the valid TraceSpan should pass the type guard
|
|
271
|
+
assert.strictEqual(traces.length, 1);
|
|
272
|
+
assert.strictEqual(traces[0].traceId, 'trace-123');
|
|
273
|
+
});
|
|
274
|
+
it('should return empty array for mismatched data types', async () => {
|
|
275
|
+
const store = {
|
|
276
|
+
local: [mockTraceSpan],
|
|
277
|
+
signoz: [],
|
|
278
|
+
};
|
|
279
|
+
const backend = createMockBackend(store, 'traces', 'local');
|
|
280
|
+
// Query for logs on a trace backend
|
|
281
|
+
const logs = await backend.queryLogs({});
|
|
282
|
+
assert.strictEqual(logs.length, 0);
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
describe('mock-backends: getMockOptions (legacy)', () => {
|
|
286
|
+
it('should return both local and signoz backends', () => {
|
|
287
|
+
const store = {
|
|
288
|
+
local: [mockTraceSpan],
|
|
289
|
+
signoz: [],
|
|
290
|
+
};
|
|
291
|
+
const options = getMockOptions(store, 'traces');
|
|
292
|
+
assert.ok(options.localBackend);
|
|
293
|
+
assert.ok(options.signozBackend);
|
|
294
|
+
});
|
|
295
|
+
it('should work with traces', async () => {
|
|
296
|
+
const store = {
|
|
297
|
+
local: [mockTraceSpan],
|
|
298
|
+
signoz: [],
|
|
299
|
+
};
|
|
300
|
+
const options = getMockOptions(store, 'traces');
|
|
301
|
+
const traces = await options.localBackend.queryTraces({});
|
|
302
|
+
assert.strictEqual(traces.length, 1);
|
|
303
|
+
});
|
|
304
|
+
it('should work with logs', async () => {
|
|
305
|
+
const store = {
|
|
306
|
+
local: [mockLogRecord],
|
|
307
|
+
signoz: [],
|
|
308
|
+
};
|
|
309
|
+
const options = getMockOptions(store, 'logs');
|
|
310
|
+
const logs = await options.localBackend.queryLogs({});
|
|
311
|
+
assert.strictEqual(logs.length, 1);
|
|
312
|
+
});
|
|
313
|
+
it('should work with metrics', async () => {
|
|
314
|
+
const store = {
|
|
315
|
+
local: [mockMetricDataPoint],
|
|
316
|
+
signoz: [],
|
|
317
|
+
};
|
|
318
|
+
const options = getMockOptions(store, 'metrics');
|
|
319
|
+
const metrics = await options.localBackend.queryMetrics({});
|
|
320
|
+
assert.strictEqual(metrics.length, 1);
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
// ============================================================================
|
|
324
|
+
// Type Guard Edge Cases
|
|
325
|
+
// ============================================================================
|
|
326
|
+
describe('mock-backends: type guard edge cases', () => {
|
|
327
|
+
it('should reject null values', async () => {
|
|
328
|
+
const store = {
|
|
329
|
+
local: [null, undefined, mockTraceSpan],
|
|
330
|
+
signoz: [],
|
|
331
|
+
};
|
|
332
|
+
const backend = createMockBackend(store, 'traces', 'local');
|
|
333
|
+
const traces = await backend.queryTraces({});
|
|
334
|
+
assert.strictEqual(traces.length, 1);
|
|
335
|
+
});
|
|
336
|
+
it('should reject non-object values', async () => {
|
|
337
|
+
const store = {
|
|
338
|
+
local: ['string', 123, true, mockTraceSpan],
|
|
339
|
+
signoz: [],
|
|
340
|
+
};
|
|
341
|
+
const backend = createMockBackend(store, 'traces', 'local');
|
|
342
|
+
const traces = await backend.queryTraces({});
|
|
343
|
+
assert.strictEqual(traces.length, 1);
|
|
344
|
+
});
|
|
345
|
+
it('should validate log record required fields', async () => {
|
|
346
|
+
const incompleteLog = { timestamp: '2023-01-01' }; // missing severity and body
|
|
347
|
+
const store = {
|
|
348
|
+
local: [incompleteLog, mockLogRecord],
|
|
349
|
+
signoz: [],
|
|
350
|
+
};
|
|
351
|
+
const backend = createMockBackend(store, 'logs', 'local');
|
|
352
|
+
const logs = await backend.queryLogs({});
|
|
353
|
+
assert.strictEqual(logs.length, 1);
|
|
354
|
+
assert.strictEqual(logs[0].body, 'Test log message');
|
|
355
|
+
});
|
|
356
|
+
it('should validate metric data point required fields', async () => {
|
|
357
|
+
const incompleteMetric = { timestamp: '2023-01-01', name: 'test' }; // missing value
|
|
358
|
+
const store = {
|
|
359
|
+
local: [incompleteMetric, mockMetricDataPoint],
|
|
360
|
+
signoz: [],
|
|
361
|
+
};
|
|
362
|
+
const backend = createMockBackend(store, 'metrics', 'local');
|
|
363
|
+
const metrics = await backend.queryMetrics({});
|
|
364
|
+
assert.strictEqual(metrics.length, 1);
|
|
365
|
+
assert.strictEqual(metrics[0].name, 'test.metric');
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
//# sourceMappingURL=mock-backends.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-backends.test.js","sourceRoot":"","sources":["../../src/test-helpers/mock-backends.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO;AACL,0BAA0B;AAC1B,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB;AACvB,2BAA2B;AAC3B,iBAAiB,EACjB,cAAc,GAMf,MAAM,oBAAoB,CAAC;AAG5B,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,aAAa,GAAc;IAC/B,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,WAAW;IACjB,iBAAiB,EAAE,mBAAmB;IACtC,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,MAAM,aAAa,GAAc;IAC/B,SAAS,EAAE,0BAA0B;IACrC,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,kBAAkB;CACzB,CAAC;AAEF,MAAM,mBAAmB,GAAoB;IAC3C,SAAS,EAAE,0BAA0B;IACrC,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,KAAK,GAAmB;YAC5B,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,KAAK,GAAmB;YAC5B,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,aAAa,CAAC;SACxB,CAAC;QACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,KAAK,GAAmB;YAC5B,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAE/C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,KAAK,GAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAExD,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE1D,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,KAAK,GAAiB;YAC1B,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,KAAK,GAAiB;YAC1B,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,aAAa,CAAC;SACxB,CAAC;QACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAElD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,KAAK,GAAiB;YAC1B,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAE/C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,KAAK,GAAoB;YAC7B,KAAK,EAAE,CAAC,mBAAmB,CAAC;YAC5B,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,KAAK,GAAoB;YAC7B,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,mBAAmB,CAAC;SAC9B,CAAC;QACF,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,KAAK,GAAoB;YAC7B,KAAK,EAAE,CAAC,mBAAmB,CAAC;YAC5B,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEzC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAAmB;YAC5B,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACjC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,SAAS,GAAG,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QACjE,MAAM,KAAK,GAAmB;YAC5B,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,MAAM,EAAE,CAAC,UAAU,CAAC;SACrB,CAAC;QACF,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAEjE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAAiB;YAC1B,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAE5C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,QAAQ,GAAG,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAiB;YAC1B,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,MAAM,EAAE,CAAC,SAAS,CAAC;SACpB,CAAC;QACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAE5C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE7D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAAoB;YAC7B,KAAK,EAAE,CAAC,mBAAmB,CAAC;YAC5B,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAE/C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,WAAW,GAAG,EAAE,GAAG,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,EAAE,GAAG,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAoB;YAC7B,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,MAAM,EAAE,CAAC,YAAY,CAAC;SACvB,CAAC;QACF,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAE/C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,wDAAwD;AACxD,+EAA+E;AAE/E,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,KAAK,GAA6B;YACtC,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,KAAK,GAA6B;YACtC,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,KAAK,GAAmC;YAC5C,KAAK,EAAE,CAAC,mBAAmB,CAAC;YAC5B,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,sDAAsD;QACtD,MAAM,WAAW,GAAG;YAClB,EAAE,OAAO,EAAE,IAAI,EAAE;YACjB,aAAa;YACb,EAAE,WAAW,EAAE,KAAK,EAAE;SACvB,CAAC;QACF,MAAM,KAAK,GAA2B;YACpC,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,sDAAsD;QACtD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,KAAK,GAA6B;YACtC,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE5D,oCAAoC;QACpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAA6B;YACtC,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEhD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,KAAK,GAA6B;YACtC,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,KAAK,GAA6B;YACtC,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,KAAK,GAAmC;YAC5C,KAAK,EAAE,CAAC,mBAAmB,CAAC;YAC5B,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,KAAK,GAA2B;YACpC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC;YACvC,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,KAAK,GAA2B;YACpC,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC;YAC3C,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,aAAa,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,4BAA4B;QAC/E,MAAM,KAAK,GAA2B;YACpC,KAAK,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;YACrC,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,gBAAgB,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,gBAAgB;QACpF,MAAM,KAAK,GAA2B;YACpC,KAAK,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;YAC9C,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared test utilities for validating Zod schemas
|
|
3
|
+
*/
|
|
4
|
+
import type { z } from 'zod';
|
|
5
|
+
/**
|
|
6
|
+
* Generate standard backend selection schema tests
|
|
7
|
+
* @param schema - Zod schema with backend field
|
|
8
|
+
* @param schemaName - Name for test descriptions
|
|
9
|
+
*/
|
|
10
|
+
export declare function validateBackendSchema(schema: z.ZodType<{
|
|
11
|
+
backend?: string;
|
|
12
|
+
}>, schemaName: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Generate standard limit parameter validation tests
|
|
15
|
+
* @param schema - Zod schema with limit field
|
|
16
|
+
* @param schemaName - Name for test descriptions
|
|
17
|
+
* @param defaultLimit - Expected default limit value
|
|
18
|
+
* @param maxLimit - Maximum allowed limit (optional, defaults to 1000)
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateLimitSchema(schema: z.ZodType<{
|
|
21
|
+
limit?: number;
|
|
22
|
+
}>, schemaName: string, defaultLimit: number, maxLimit?: number): void;
|
|
23
|
+
/**
|
|
24
|
+
* Generate standard date range validation tests
|
|
25
|
+
* @param schema - Zod schema with startDate/endDate fields
|
|
26
|
+
* @param schemaName - Name for test descriptions
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateDateRangeSchema(schema: z.ZodType<{
|
|
29
|
+
startDate?: string;
|
|
30
|
+
endDate?: string;
|
|
31
|
+
}>, schemaName: string): void;
|
|
32
|
+
//# sourceMappingURL=schema-validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validators.d.ts","sourceRoot":"","sources":["../../src/test-helpers/schema-validators.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACvC,UAAU,EAAE,MAAM,GACjB,IAAI,CAuCN;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACrC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,QAAQ,SAAO,GACd,IAAI,CAwCN;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3D,UAAU,EAAE,MAAM,GACjB,IAAI,CA8BN"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared test utilities for validating Zod schemas
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it } from 'node:test';
|
|
5
|
+
import * as assert from 'node:assert';
|
|
6
|
+
/**
|
|
7
|
+
* Generate standard backend selection schema tests
|
|
8
|
+
* @param schema - Zod schema with backend field
|
|
9
|
+
* @param schemaName - Name for test descriptions
|
|
10
|
+
*/
|
|
11
|
+
export function validateBackendSchema(schema, schemaName) {
|
|
12
|
+
describe(`${schemaName} backend validation`, () => {
|
|
13
|
+
it('should validate input with backend=local', () => {
|
|
14
|
+
const result = schema.safeParse({ backend: 'local' });
|
|
15
|
+
assert.strictEqual(result.success, true);
|
|
16
|
+
if (result.success) {
|
|
17
|
+
assert.strictEqual(result.data.backend, 'local');
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
it('should validate input with backend=signoz', () => {
|
|
21
|
+
const result = schema.safeParse({ backend: 'signoz' });
|
|
22
|
+
assert.strictEqual(result.success, true);
|
|
23
|
+
if (result.success) {
|
|
24
|
+
assert.strictEqual(result.data.backend, 'signoz');
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
it('should validate input with backend=auto', () => {
|
|
28
|
+
const result = schema.safeParse({ backend: 'auto' });
|
|
29
|
+
assert.strictEqual(result.success, true);
|
|
30
|
+
if (result.success) {
|
|
31
|
+
assert.strictEqual(result.data.backend, 'auto');
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
it('should default backend to auto when not provided', () => {
|
|
35
|
+
const result = schema.safeParse({});
|
|
36
|
+
assert.strictEqual(result.success, true);
|
|
37
|
+
if (result.success) {
|
|
38
|
+
assert.strictEqual(result.data.backend, 'auto');
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
it('should reject invalid backend values', () => {
|
|
42
|
+
const result = schema.safeParse({ backend: 'invalid' });
|
|
43
|
+
assert.strictEqual(result.success, false);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate standard limit parameter validation tests
|
|
49
|
+
* @param schema - Zod schema with limit field
|
|
50
|
+
* @param schemaName - Name for test descriptions
|
|
51
|
+
* @param defaultLimit - Expected default limit value
|
|
52
|
+
* @param maxLimit - Maximum allowed limit (optional, defaults to 1000)
|
|
53
|
+
*/
|
|
54
|
+
export function validateLimitSchema(schema, schemaName, defaultLimit, maxLimit = 1000) {
|
|
55
|
+
describe(`${schemaName} limit validation`, () => {
|
|
56
|
+
it(`should use ${defaultLimit} as default limit`, () => {
|
|
57
|
+
const result = schema.safeParse({});
|
|
58
|
+
assert.strictEqual(result.success, true);
|
|
59
|
+
if (result.success) {
|
|
60
|
+
assert.strictEqual(result.data.limit, defaultLimit);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
it('should accept custom limit value', () => {
|
|
64
|
+
const customLimit = Math.floor(defaultLimit / 2) || 25;
|
|
65
|
+
const result = schema.safeParse({ limit: customLimit });
|
|
66
|
+
assert.strictEqual(result.success, true);
|
|
67
|
+
if (result.success) {
|
|
68
|
+
assert.strictEqual(result.data.limit, customLimit);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
it('should accept limit of 1', () => {
|
|
72
|
+
const result = schema.safeParse({ limit: 1 });
|
|
73
|
+
assert.strictEqual(result.success, true);
|
|
74
|
+
if (result.success) {
|
|
75
|
+
assert.strictEqual(result.data.limit, 1);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
it(`should accept max limit value of ${maxLimit}`, () => {
|
|
79
|
+
const result = schema.safeParse({ limit: maxLimit });
|
|
80
|
+
assert.strictEqual(result.success, true);
|
|
81
|
+
if (result.success) {
|
|
82
|
+
assert.strictEqual(result.data.limit, maxLimit);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
it('should reject non-numeric limit', () => {
|
|
86
|
+
const result = schema.safeParse({ limit: 'fifty' });
|
|
87
|
+
assert.strictEqual(result.success, false);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generate standard date range validation tests
|
|
93
|
+
* @param schema - Zod schema with startDate/endDate fields
|
|
94
|
+
* @param schemaName - Name for test descriptions
|
|
95
|
+
*/
|
|
96
|
+
export function validateDateRangeSchema(schema, schemaName) {
|
|
97
|
+
describe(`${schemaName} date range validation`, () => {
|
|
98
|
+
it('should accept startDate only', () => {
|
|
99
|
+
const result = schema.safeParse({ startDate: '2026-01-01' });
|
|
100
|
+
assert.strictEqual(result.success, true);
|
|
101
|
+
if (result.success) {
|
|
102
|
+
assert.strictEqual(result.data.startDate, '2026-01-01');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
it('should accept endDate only', () => {
|
|
106
|
+
const result = schema.safeParse({ endDate: '2026-01-31' });
|
|
107
|
+
assert.strictEqual(result.success, true);
|
|
108
|
+
if (result.success) {
|
|
109
|
+
assert.strictEqual(result.data.endDate, '2026-01-31');
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
it('should accept both startDate and endDate', () => {
|
|
113
|
+
const result = schema.safeParse({
|
|
114
|
+
startDate: '2026-01-01',
|
|
115
|
+
endDate: '2026-01-31',
|
|
116
|
+
});
|
|
117
|
+
assert.strictEqual(result.success, true);
|
|
118
|
+
if (result.success) {
|
|
119
|
+
assert.strictEqual(result.data.startDate, '2026-01-01');
|
|
120
|
+
assert.strictEqual(result.data.endDate, '2026-01-31');
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=schema-validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validators.js","sourceRoot":"","sources":["../../src/test-helpers/schema-validators.ts"],"names":[],"mappings":"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"}
|