Skip to content

Commit dbe15da

Browse files
committed
refactor(mParticleInstance): Remove kitBlocker parameter from initialization functions for cleaner code structure
1 parent 3814f26 commit dbe15da

File tree

3 files changed

+62
-17
lines changed

3 files changed

+62
-17
lines changed

src/mp-instance.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,7 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
163163
);
164164
}
165165

166-
const kitBlocker = createKitBlocker(config, this);
167-
runPreConfigFetchInitialization(this, apiKey, config, kitBlocker);
166+
runPreConfigFetchInitialization(this, apiKey, config);
168167

169168
// config code - Fetch config when requestConfig = true, otherwise, proceed with SDKInitialization
170169
// Since fetching the configuration is asynchronous, we must pass completeSDKInitialization
@@ -187,10 +186,10 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
187186
result
188187
);
189188

190-
completeSDKInitialization(apiKey, mergedConfig, this, kitBlocker);
189+
completeSDKInitialization(apiKey, mergedConfig, this);
191190
});
192191
} else {
193-
completeSDKInitialization(apiKey, config, this, kitBlocker);
192+
completeSDKInitialization(apiKey, config, this);
194193
}
195194
} else {
196195
console.error(
@@ -1363,9 +1362,11 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
13631362
}
13641363

13651364
// Some (server) config settings need to be returned before they are set on SDKConfig in a self hosted environment
1366-
function completeSDKInitialization(apiKey, config, mpInstance, kitBlocker: KitBlocker) {
1365+
function completeSDKInitialization(apiKey, config, mpInstance) {
1366+
const kitBlocker = createKitBlocker(config, mpInstance);
13671367
const { getFeatureFlag } = mpInstance._Helpers;
13681368

1369+
mpInstance._APIClient = new APIClient(mpInstance, kitBlocker);
13691370
mpInstance._Forwarders = new Forwarders(mpInstance, kitBlocker);
13701371
mpInstance._Store.processConfig(config);
13711372

@@ -1551,12 +1552,9 @@ function createIdentityCache(mpInstance) {
15511552
return new LocalStorageVault(cacheKey, { logger: mpInstance.Logger });
15521553
}
15531554

1554-
function runPreConfigFetchInitialization(mpInstance, apiKey, config, kitBlocker: KitBlocker) {
1555-
const apiClient = new APIClient(mpInstance, kitBlocker);
1556-
const reportingLogger = new ReportingLogger(apiClient, Constants.sdkVersion);
1557-
1555+
function runPreConfigFetchInitialization(mpInstance, apiKey, config) {
1556+
const reportingLogger = new ReportingLogger(Constants.sdkVersion, mpInstance);
15581557
mpInstance.Logger = new Logger(config, reportingLogger);
1559-
mpInstance._APIClient = apiClient;
15601558
mpInstance._Store = new Store(config, mpInstance, apiKey);
15611559
window.mParticle.Store = mpInstance._Store;
15621560
mpInstance.Logger.verbose(StartingInitialization);

test/src/tests-audience-manager.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import AudienceManager, {
88
IAudienceMemberships, IAudienceMembershipsServerResponse
99
} from '../../src/audienceManager';
1010
import { Logger } from '../../src/logger';
11+
import { IReportingLogger } from '../../src/logging/reportingLogger';
12+
import { ErrorCodes } from '../../src/logging/errorCodes';
1113
import Utils from './config/utils';
1214
const { fetchMockSuccess } = Utils;
1315

@@ -18,6 +20,11 @@ declare global {
1820
}
1921
}
2022

23+
const mockReportingLogger: IReportingLogger = {
24+
error: sinon.spy(),
25+
warning: sinon.spy()
26+
};
27+
2128
const userAudienceUrl = `https://${Constants.DefaultBaseUrls.userAudienceUrl}${apiKey}/audience`;
2229

2330
describe('AudienceManager', () => {
@@ -26,6 +33,9 @@ describe('AudienceManager', () => {
2633
fetchMockSuccess(urls.identify, {
2734
mpid: testMPID, is_logged_in: false
2835
});
36+
(mockReportingLogger.error as sinon.SinonSpy).resetHistory();
37+
(mockReportingLogger.warning as sinon.SinonSpy).resetHistory();
38+
window.mParticle.config.logLevel = 'error';
2939
});
3040

3141
afterEach(() => {
@@ -35,7 +45,7 @@ describe('AudienceManager', () => {
3545

3646
describe('initialization', () => {
3747
it('should have proper properties on AudienceManager', () => {
38-
const newLogger: SDKLoggerApi = new Logger(window.mParticle.config);
48+
const newLogger: SDKLoggerApi = new Logger(window.mParticle.config, mockReportingLogger);
3949
const audienceManager = new AudienceManager(
4050
Constants.DefaultBaseUrls.userAudienceUrl,
4151
apiKey,
@@ -45,14 +55,15 @@ describe('AudienceManager', () => {
4555
expect(audienceManager.logger).to.be.ok;
4656
expect(audienceManager.url).to.equal(userAudienceUrl);
4757
expect(audienceManager.userAudienceAPI).to.be.ok;
58+
expect((mockReportingLogger.error as sinon.SinonSpy).called).to.eq(false);
4859
});
4960
});
5061

5162
describe('#sendGetUserAudienceRequest', () => {
5263
let newLogger: SDKLoggerApi;
5364
let audienceManager: AudienceManager;
5465
beforeEach(() => {
55-
newLogger = new Logger(window.mParticle.config);
66+
newLogger = new Logger(window.mParticle.config, mockReportingLogger);
5667
audienceManager = new AudienceManager(
5768
Constants.DefaultBaseUrls.userAudienceUrl,
5869
apiKey,
@@ -101,6 +112,7 @@ describe('AudienceManager', () => {
101112
expect(callback.getCall(0).lastArg).to.deep.equal(
102113
expectedAudienceMembership
103114
);
115+
expect((mockReportingLogger.error as sinon.SinonSpy).called).to.eq(false);
104116
});
105117

106118
it('should change the URL endpoint to a new MPID when switching users and attempting to retrieve audiences', async () => {
@@ -159,6 +171,22 @@ describe('AudienceManager', () => {
159171
expect(callback.getCall(1).lastArg).to.deep.equal(
160172
expectedAudienceMembership2
161173
);
174+
expect((mockReportingLogger.error as sinon.SinonSpy).called).to.eq(false);
175+
});
176+
177+
it('should call reportingLogger.error when an HTTP error occurs', async () => {
178+
const callback = sinon.spy();
179+
180+
fetchMock.get(`${userAudienceUrl}?mpid=${testMPID}`, {
181+
status: 500,
182+
body: JSON.stringify({ error: 'Internal Server Error' })
183+
});
184+
185+
await audienceManager.sendGetUserAudienceRequest(testMPID, callback);
186+
187+
expect((mockReportingLogger.error as sinon.SinonSpy).calledOnce).to.eq(true);
188+
expect((mockReportingLogger.error as sinon.SinonSpy).getCall(0).args[1]).to.eq(ErrorCodes.AUDIENCE_MANAGER_ERROR);
189+
expect(callback.called).to.eq(false);
162190
});
163191
});
164192
});

test/src/tests-batchUploader.ts

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { BatchUploader } from '../../src/batchUploader';
1111
import { expect } from 'chai';
1212
import _BatchValidator from '../../src/mockBatchCreator';
1313
import { Logger } from '../../src/logger';
14+
import { IReportingLogger } from '../../src/logging/reportingLogger';
15+
import { ErrorCodes } from '../../src/logging/errorCodes';
1416
import { event0, event1, event2, event3 } from '../fixtures/events';
1517
import fetchMock from 'fetch-mock/esm/client';
1618
const {
@@ -28,6 +30,11 @@ declare global {
2830
}
2931
}
3032

33+
const mockReportingLogger: IReportingLogger = {
34+
error: sinon.spy(),
35+
warning: sinon.spy()
36+
};
37+
3138
const enableBatchingConfigFlags = {
3239
eventBatchingIntervalMillis: 1000,
3340
};
@@ -46,6 +53,9 @@ describe('batch uploader', () => {
4653
window.mParticle.config.flags = {
4754
eventBatchingIntervalMillis: 1000,
4855
};
56+
window.mParticle.config.logLevel = 'error';
57+
(mockReportingLogger.error as sinon.SinonSpy).resetHistory();
58+
(mockReportingLogger.warning as sinon.SinonSpy).resetHistory();
4959
});
5060

5161
afterEach(() => {
@@ -512,7 +522,7 @@ describe('batch uploader', () => {
512522

513523
fetchMock.post(urls.events, 200);
514524

515-
const newLogger = new Logger(window.mParticle.config);
525+
const newLogger = new Logger(window.mParticle.config, mockReportingLogger);
516526
const mpInstance = window.mParticle.getInstance();
517527

518528
const uploader = new BatchUploader(mpInstance, 1000);
@@ -545,6 +555,7 @@ describe('batch uploader', () => {
545555

546556
expect(actualBatchResult.events.length).to.equal(1);
547557
expect(actualBatchResult.events).to.eql(actualBatch.events);
558+
expect((mockReportingLogger.error as sinon.SinonSpy).called).to.eq(false);
548559
});
549560

550561
it('should return batches that fail to upload with 500 errors', async () => {
@@ -554,7 +565,7 @@ describe('batch uploader', () => {
554565

555566
fetchMock.post(urls.events, 500);
556567

557-
const newLogger = new Logger(window.mParticle.config);
568+
const newLogger = new Logger(window.mParticle.config, mockReportingLogger);
558569
const mpInstance = window.mParticle.getInstance();
559570

560571
const uploader = new BatchUploader(mpInstance, 1000);
@@ -596,6 +607,8 @@ describe('batch uploader', () => {
596607
expect(
597608
batchesNotUploaded[2].events[0].data.event_name
598609
).to.equal('Test Event 3');
610+
expect((mockReportingLogger.error as sinon.SinonSpy).calledOnce).to.eq(true);
611+
expect((mockReportingLogger.error as sinon.SinonSpy).getCall(0).args[1]).to.eq(ErrorCodes.BATCH_UPLOADER_ERROR);
599612
});
600613

601614
it('should return batches that fail to upload with 429 errors', async () => {
@@ -605,7 +618,7 @@ describe('batch uploader', () => {
605618

606619
fetchMock.post(urls.events, 429);
607620

608-
const newLogger = new Logger(window.mParticle.config);
621+
const newLogger = new Logger(window.mParticle.config, mockReportingLogger);
609622
const mpInstance = window.mParticle.getInstance();
610623

611624
const uploader = new BatchUploader(mpInstance, 1000);
@@ -647,6 +660,8 @@ describe('batch uploader', () => {
647660
expect(
648661
batchesNotUploaded[2].events[0].data.event_name
649662
).to.equal('Test Event 3');
663+
expect((mockReportingLogger.error as sinon.SinonSpy).calledOnce).to.eq(true);
664+
expect((mockReportingLogger.error as sinon.SinonSpy).getCall(0).args[1]).to.eq(ErrorCodes.BATCH_UPLOADER_ERROR);
650665
});
651666

652667
it('should return null if batches fail to upload with 401 errors', async () => {
@@ -656,7 +671,7 @@ describe('batch uploader', () => {
656671

657672
fetchMock.post(urls.events, 401);
658673

659-
const newLogger = new Logger(window.mParticle.config);
674+
const newLogger = new Logger(window.mParticle.config, mockReportingLogger);
660675
const mpInstance = window.mParticle.getInstance();
661676

662677
const uploader = new BatchUploader(mpInstance, 1000);
@@ -685,6 +700,8 @@ describe('batch uploader', () => {
685700
);
686701

687702
expect(batchesNotUploaded === null).to.equal(true);
703+
expect((mockReportingLogger.error as sinon.SinonSpy).calledOnce).to.eq(true);
704+
expect((mockReportingLogger.error as sinon.SinonSpy).getCall(0).args[1]).to.eq(ErrorCodes.BATCH_UPLOADER_ERROR);
688705
});
689706

690707
it('should not throw an error when upload is called while storage has not been created yet', async () => {
@@ -708,7 +725,7 @@ describe('batch uploader', () => {
708725

709726
fetchMock.post(urls.events, 400);
710727

711-
const newLogger = new Logger(window.mParticle.config);
728+
const newLogger = new Logger(window.mParticle.config, mockReportingLogger);
712729
const mpInstance = window.mParticle.getInstance();
713730

714731
const uploader = new BatchUploader(mpInstance, 1000);
@@ -737,6 +754,8 @@ describe('batch uploader', () => {
737754
);
738755

739756
expect(batchesNotUploaded).to.be.ok;
757+
expect((mockReportingLogger.error as sinon.SinonSpy).calledOnce).to.eq(true);
758+
expect((mockReportingLogger.error as sinon.SinonSpy).getCall(0).args[1]).to.eq(ErrorCodes.BATCH_UPLOADER_ERROR);
740759

741760
expect(
742761
batchesNotUploaded.length,

0 commit comments

Comments
 (0)