Skip to content

Commit fe93ca8

Browse files
committed
added prepareFeedbackEvent test case
1 parent 0ccf73a commit fe93ca8

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import type { Hub, Scope } from '@sentry/core';
2+
import { getCurrentHub } from '@sentry/core';
3+
import type { Client } from '@sentry/types';
4+
5+
import type { FeedbackEvent } from '../../../src/types';
6+
import { prepareFeedbackEvent } from '../../../src/util/prepareFeedbackEvent';
7+
import { getDefaultClientOptions, TestClient } from '../../utils/TestClient';
8+
9+
describe('Unit | util | prepareFeedbackEvent', () => {
10+
let hub: Hub;
11+
let client: Client;
12+
let scope: Scope;
13+
14+
beforeEach(() => {
15+
hub = getCurrentHub();
16+
client = new TestClient(getDefaultClientOptions());
17+
hub.bindClient(client);
18+
19+
client = hub.getClient()!;
20+
scope = hub.getScope()!;
21+
22+
jest.spyOn(client, 'getSdkMetadata').mockImplementation(() => {
23+
return {
24+
sdk: {
25+
name: 'sentry.javascript.testSdk',
26+
version: '1.0.0',
27+
},
28+
};
29+
});
30+
});
31+
32+
afterEach(() => {
33+
jest.clearAllMocks();
34+
});
35+
36+
it('works', async () => {
37+
expect(client).toBeDefined();
38+
expect(scope).toBeDefined();
39+
40+
const replayId = 'replay-ID';
41+
const event: FeedbackEvent = {
42+
timestamp: 1670837008.634,
43+
event_id: 'feedback-ID',
44+
feedback: {
45+
contact_email: '[email protected]',
46+
message: 'looks great!',
47+
replay_id: replayId,
48+
url: 'https://sentry.io/',
49+
},
50+
contexts: {
51+
replay: {
52+
error_sample_rate: 1.0,
53+
session_sample_rate: 0.1,
54+
},
55+
},
56+
};
57+
58+
const feedbackEvent = await prepareFeedbackEvent({ scope, client, event });
59+
60+
expect(client.getSdkMetadata).toHaveBeenCalledTimes(1);
61+
62+
expect(feedbackEvent).toEqual({
63+
timestamp: 1670837008.634,
64+
event_id: 'feedback-ID',
65+
feedback: {
66+
contact_email: '[email protected]',
67+
message: 'looks great!',
68+
replay_id: replayId,
69+
url: 'https://sentry.io/',
70+
},
71+
platform: 'javascript',
72+
environment: 'production',
73+
contexts: {
74+
replay: {
75+
error_sample_rate: 1.0,
76+
session_sample_rate: 0.1,
77+
},
78+
},
79+
sdk: {
80+
name: 'sentry.javascript.testSdk',
81+
version: '1.0.0',
82+
},
83+
sdkProcessingMetadata: expect.any(Object),
84+
breadcrumbs: undefined,
85+
});
86+
});
87+
});
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { BaseClient, createTransport, initAndBind } from '@sentry/core';
2+
import type { BrowserClientReplayOptions, ClientOptions, Event, SeverityLevel } from '@sentry/types';
3+
import { resolvedSyncPromise } from '@sentry/utils';
4+
5+
export interface TestClientOptions extends ClientOptions, BrowserClientReplayOptions {}
6+
7+
export class TestClient extends BaseClient<TestClientOptions> {
8+
public constructor(options: TestClientOptions) {
9+
super(options);
10+
}
11+
12+
public eventFromException(exception: any): PromiseLike<Event> {
13+
return resolvedSyncPromise({
14+
exception: {
15+
values: [
16+
{
17+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
18+
type: exception.name,
19+
value: exception.message,
20+
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
21+
},
22+
],
23+
},
24+
});
25+
}
26+
27+
public eventFromMessage(message: string, level: SeverityLevel = 'info'): PromiseLike<Event> {
28+
return resolvedSyncPromise({ message, level });
29+
}
30+
}
31+
32+
export function init(options: TestClientOptions): void {
33+
initAndBind(TestClient, options);
34+
}
35+
36+
export function getDefaultClientOptions(options: Partial<ClientOptions> = {}): ClientOptions {
37+
return {
38+
integrations: [],
39+
dsn: 'https://username@domain/123',
40+
transport: () => createTransport({ recordDroppedEvent: () => undefined }, _ => resolvedSyncPromise({})),
41+
stackParser: () => [],
42+
...options,
43+
};
44+
}

0 commit comments

Comments
 (0)