Skip to content

Commit 36e2a4f

Browse files
gtamanahaalexs-mparticle
authored andcommitted
refactor(reportingLogger): Allow optional rate limiter in constructor and update tests for new rate limiting behavior
1 parent 4c5d663 commit 36e2a4f

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

src/logging/reportingLogger.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ export class ReportingLogger implements IReportingLogger {
1212
private readonly apiClient: IAPIClient;
1313
private readonly reporter: string = 'mp-wsdk';
1414
private readonly integration: string = 'mp-wsdk';
15-
private readonly rateLimiter: RateLimiter = new RateLimiter();
15+
private readonly rateLimiter: RateLimiter;
1616

1717
constructor(
1818
apiClient: IAPIClient,
1919
private readonly sdkVersion: string,
20+
rateLimiter?: RateLimiter,
2021
) {
2122
this.isEnabled = this.isReportingEnabled();
2223
this.apiClient = apiClient;
23-
this.rateLimiter = new RateLimiter();
24+
this.rateLimiter = rateLimiter ?? new RateLimiter();
2425
}
2526

2627
public error(msg: string, code?: ErrorCodes, stackTrace?: string) {

test/jest/reportingLogger.spec.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ describe('ReportingLogger', () => {
1010
beforeEach(() => {
1111
apiClient = { sendLogToServer: jest.fn() };
1212

13-
// Mock location object to allow modifying search property
1413
delete (globalThis as any).location;
1514
(globalThis as any).location = {
1615
href: 'https://e.com',
@@ -70,9 +69,18 @@ describe('ReportingLogger', () => {
7069
expect(apiClient.sendLogToServer).toHaveBeenCalled();
7170
});
7271

73-
it('rate limits after 10 errors', () => {
74-
for (let i = 0; i < 12; i++) logger.error('err');
75-
expect(apiClient.sendLogToServer).toHaveBeenCalledTimes(10);
72+
it('rate limits after 3 errors', () => {
73+
const mockRateLimiter = {
74+
incrementAndCheck: jest.fn().mockImplementation((severity) => {
75+
// allow only first 3, then start rate limiting
76+
mockRateLimiter.count = (mockRateLimiter.count || 0) + 1;
77+
return mockRateLimiter.count > 3;
78+
}),
79+
};
80+
logger = new ReportingLogger(apiClient, sdkVersion, mockRateLimiter as any);
81+
82+
for (let i = 0; i < 5; i++) logger.error('err');
83+
expect(apiClient.sendLogToServer).toHaveBeenCalledTimes(3);
7684
});
7785
});
7886

0 commit comments

Comments
 (0)