Skip to content

Commit cdee7a9

Browse files
chargomeclaude
andauthored
chore(sourcemaps): Make sourcemaps e2e test more generic (#19678)
- Moves assertions into the test itself - Refactors utils to plain getters for different data types Closes #19679 (added automatically) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b26df86 commit cdee7a9

File tree

5 files changed

+230
-304
lines changed

5 files changed

+230
-304
lines changed
Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,74 @@
1+
import * as assert from 'assert/strict';
12
import {
2-
loadSourcemapUploadRecords,
3-
assertSourcemapUploadRequests,
4-
getArtifactBundleManifests,
5-
assertDebugIdPairs,
6-
assertSourcemapMappings,
7-
assertSourcemapSources,
8-
assertArtifactBundleAssembly,
9-
getSourcemapUploadSummary,
3+
loadMockServerResults,
4+
getArtifactBundles,
5+
getDebugIdPairs,
6+
getSourcemaps,
7+
getChunkUploadPosts,
8+
getAssembleRequests,
109
} from '@sentry-internal/test-utils';
1110

12-
const requests = loadSourcemapUploadRecords();
11+
const requests = loadMockServerResults();
1312

1413
console.log(`Captured ${requests.length} requests to mock Sentry server:\n`);
1514
for (const req of requests) {
1615
console.log(` ${req.method} ${req.url} (${req.bodySize} bytes)`);
1716
}
1817
console.log('');
1918

20-
assertSourcemapUploadRequests(requests, 'fake-auth-token');
19+
// Auth token is present
20+
const authenticated = requests.filter(r => r.authorization.includes('fake-auth-token'));
21+
assert.ok(authenticated.length > 0, 'Expected requests with the configured auth token');
2122

22-
const manifests = getArtifactBundleManifests(requests);
23-
console.log(`Found ${manifests.length} artifact bundle manifest(s):\n`);
23+
// Chunk uploads happened
24+
const chunkPosts = getChunkUploadPosts(requests);
25+
assert.ok(chunkPosts.length > 0, 'Expected at least one chunk upload POST');
26+
assert.ok(
27+
chunkPosts.some(r => r.bodySize > 0),
28+
'Expected at least one chunk upload with a non-empty body',
29+
);
2430

25-
const debugIdPairs = assertDebugIdPairs(manifests);
26-
console.log(`Found ${debugIdPairs.length} JS/sourcemap pairs with debug IDs:`);
31+
// Release endpoint was called
32+
assert.ok(
33+
requests.some(r => r.url?.includes('/releases/')),
34+
'Expected at least one request to releases endpoint',
35+
);
36+
37+
// Artifact bundles have manifests
38+
const bundles = getArtifactBundles(requests);
39+
assert.ok(bundles.length > 0, 'Expected at least one artifact bundle with a manifest');
40+
console.log(`Found ${bundles.length} artifact bundle(s)\n`);
41+
42+
// Debug ID pairs exist and are valid UUIDs
43+
const debugIdPairs = getDebugIdPairs(bundles);
44+
assert.ok(debugIdPairs.length > 0, 'Expected at least one JS/sourcemap pair with matching debug IDs');
45+
46+
const uuidRegex = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/i;
2747
for (const pair of debugIdPairs) {
48+
assert.match(pair.debugId, uuidRegex, `Invalid debug ID: ${pair.debugId}`);
2849
console.log(` ${pair.debugId} ${pair.jsUrl}`);
2950
}
3051
console.log('');
3152

32-
assertSourcemapMappings(manifests);
33-
assertSourcemapSources(manifests, /client-page|page\.tsx/);
34-
assertArtifactBundleAssembly(requests, 'test-project');
53+
// Sourcemaps have real content
54+
const sourcemaps = getSourcemaps(bundles);
55+
assert.ok(
56+
sourcemaps.some(s => s.sourcemap.mappings && s.sourcemap.mappings.length > 0),
57+
'Expected at least one sourcemap with non-empty mappings',
58+
);
3559

36-
const summary = getSourcemapUploadSummary(requests, manifests, debugIdPairs);
60+
// At least one sourcemap references app source files
61+
assert.ok(
62+
sourcemaps.some(s => s.sourcemap.sources?.some(src => /client-page|page\.tsx/.test(src))),
63+
'Expected at least one sourcemap referencing app source files',
64+
);
65+
66+
// Assemble requests reference the correct project
67+
const assembleReqs = getAssembleRequests(requests);
68+
assert.ok(assembleReqs.length > 0, 'Expected at least one assemble request');
69+
for (const req of assembleReqs) {
70+
assert.ok(req.assembleBody?.projects?.includes('test-project'), 'Expected assemble request to include test-project');
71+
assert.ok((req.assembleBody?.chunks?.length ?? 0) > 0, 'Expected assemble request to have chunk checksums');
72+
}
3773

38-
console.log('\nAll sourcemap upload assertions passed!');
39-
console.log(` - ${summary.totalRequests} total requests captured`);
40-
console.log(` - ${summary.chunkUploadPosts} chunk upload POST requests`);
41-
console.log(` - ${summary.artifactBundles} artifact bundles with manifests`);
42-
console.log(` - ${summary.debugIdPairs} JS/sourcemap pairs with debug IDs`);
43-
console.log(` - ${summary.assembleRequests} artifact bundle assemble requests`);
74+
console.log('All sourcemap upload assertions passed!');

dev-packages/test-utils/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ export { createBasicSentryServer, createTestServer } from './server';
1515

1616
export { startMockSentryServer } from './mock-sentry-server';
1717
export type { MockSentryServerOptions, MockSentryServer } from './mock-sentry-server';
18-
export * from './sourcemap-upload-assertions';
18+
export * from './sourcemap-upload-utils';

dev-packages/test-utils/src/mock-sentry-server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import fs from 'node:fs';
33
import http from 'node:http';
44
import path from 'node:path';
55
import zlib from 'node:zlib';
6-
import type { ChunkFileRecord, RequestRecord } from './sourcemap-upload-assertions';
6+
import type { ChunkFileRecord, RequestRecord } from './sourcemap-upload-utils';
77

88
export interface MockSentryServerOptions {
99
port?: number;

dev-packages/test-utils/src/sourcemap-upload-assertions.ts

Lines changed: 0 additions & 278 deletions
This file was deleted.

0 commit comments

Comments
 (0)