@webex/internal-plugin-metrics 3.11.0-webex-services-ready.1 → 3.12.0-llmrefactor.1
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/dist/automated-user.js +19 -0
- package/dist/automated-user.js.map +1 -0
- package/dist/batcher.js +3 -0
- package/dist/batcher.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +639 -65
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +168 -76
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +11 -3
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
- package/dist/call-diagnostic/config.js +16 -3
- package/dist/call-diagnostic/config.js.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/generic-metrics.js +8 -6
- package/dist/generic-metrics.js.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/metrics.types.js +4 -0
- package/dist/metrics.types.js.map +1 -1
- package/dist/new-metrics.js +69 -23
- package/dist/new-metrics.js.map +1 -1
- package/dist/prelogin-metrics.js +106 -0
- package/dist/prelogin-metrics.js.map +1 -0
- package/dist/types/automated-user.d.ts +2 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +208 -5
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +79 -15
- package/dist/types/call-diagnostic/config.d.ts +4 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/index.d.ts +6 -3
- package/dist/types/metrics.types.d.ts +6 -4
- package/dist/types/new-metrics.d.ts +16 -0
- package/dist/types/prelogin-metrics.d.ts +47 -0
- package/package.json +12 -11
- package/src/automated-user.ts +16 -0
- package/src/batcher.js +4 -0
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +800 -75
- package/src/call-diagnostic/call-diagnostic-metrics.ts +102 -15
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +12 -2
- package/src/call-diagnostic/config.ts +14 -0
- package/src/config.js +1 -0
- package/src/generic-metrics.ts +6 -6
- package/src/index.ts +7 -0
- package/src/metrics.types.ts +18 -5
- package/src/new-metrics.ts +54 -4
- package/src/prelogin-metrics.ts +94 -0
- package/test/unit/spec/automated-user.ts +43 -0
- package/test/unit/spec/batcher.js +43 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +47 -11
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +1550 -416
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +887 -159
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +37 -3
- package/test/unit/spec/new-metrics.ts +39 -2
- package/test/unit/spec/prelogin-metrics-batcher.ts +71 -36
- package/test/unit/spec/prelogin-metrics.ts +132 -0
|
@@ -311,7 +311,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
311
311
|
origin: {
|
|
312
312
|
buildType: 'prod',
|
|
313
313
|
networkType: 'unknown',
|
|
314
|
-
upgradeChannel: expectedUpgradeChannel
|
|
314
|
+
upgradeChannel: expectedUpgradeChannel,
|
|
315
315
|
},
|
|
316
316
|
event: {name: eventName, ...expectedEvent},
|
|
317
317
|
},
|
|
@@ -393,7 +393,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
393
393
|
totalJmt: undefined,
|
|
394
394
|
clientJmt: undefined,
|
|
395
395
|
downloadTime: undefined,
|
|
396
|
-
clickToInterstitialWithUserDelay:
|
|
396
|
+
clickToInterstitialWithUserDelay: undefined,
|
|
397
397
|
totalJMTWithUserDelay: undefined,
|
|
398
398
|
},
|
|
399
399
|
},
|
|
@@ -430,7 +430,6 @@ describe('internal-plugin-metrics', () => {
|
|
|
430
430
|
totalMediaJMT: undefined,
|
|
431
431
|
interstitialToMediaOKJMT: undefined,
|
|
432
432
|
callInitMediaEngineReady: undefined,
|
|
433
|
-
stayLobbyTime: undefined,
|
|
434
433
|
totalMediaJMTWithUserDelay: undefined,
|
|
435
434
|
totalJMTWithUserDelay: undefined,
|
|
436
435
|
},
|
|
@@ -447,12 +446,47 @@ describe('internal-plugin-metrics', () => {
|
|
|
447
446
|
},
|
|
448
447
|
},
|
|
449
448
|
],
|
|
449
|
+
[
|
|
450
|
+
'client.lobby.exited',
|
|
451
|
+
{
|
|
452
|
+
joinTimes: {
|
|
453
|
+
stayLobbyTime: undefined,
|
|
454
|
+
},
|
|
455
|
+
},
|
|
456
|
+
],
|
|
450
457
|
].forEach(([eventName, expectedEvent]) => {
|
|
451
458
|
it(`returns expected result for ${eventName}`, () => {
|
|
452
459
|
check(eventName as string, expectedEvent, 'gold');
|
|
453
460
|
});
|
|
454
461
|
});
|
|
455
462
|
|
|
463
|
+
it('logs a Milestone entry when event name is present', () => {
|
|
464
|
+
const logSpy = sinon.spy(webex.logger, 'log');
|
|
465
|
+
const eventName = 'client.call.initiated';
|
|
466
|
+
const eventPayload = {event: {name: eventName}};
|
|
467
|
+
|
|
468
|
+
prepareDiagnosticMetricItem(webex, {eventPayload, type: ['diagnostic-event']});
|
|
469
|
+
|
|
470
|
+
assert.isTrue(
|
|
471
|
+
logSpy.calledWith('Milestone,CallDiagnostic', eventName),
|
|
472
|
+
'expected logger.log to be called with Milestone,CallDiagnostic and the event name'
|
|
473
|
+
);
|
|
474
|
+
sinon.restore();
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
it('does not log a Milestone entry when event name is absent', () => {
|
|
478
|
+
const logSpy = sinon.spy(webex.logger, 'log');
|
|
479
|
+
const eventPayload = {event: {}};
|
|
480
|
+
|
|
481
|
+
prepareDiagnosticMetricItem(webex, {eventPayload, type: ['diagnostic-event']});
|
|
482
|
+
|
|
483
|
+
assert.isFalse(
|
|
484
|
+
logSpy.calledWith('Milestone,CallDiagnostic', sinon.match.any),
|
|
485
|
+
'expected logger.log not to be called with Milestone,CallDiagnostic when event name is absent'
|
|
486
|
+
);
|
|
487
|
+
sinon.restore();
|
|
488
|
+
});
|
|
489
|
+
|
|
456
490
|
it('sets buildType and upgradeChannel correctly', () => {
|
|
457
491
|
const item: any = {
|
|
458
492
|
eventPayload: {
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import {assert} from '@webex/test-helper-chai';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
NewMetrics,
|
|
4
|
+
CallDiagnosticLatencies,
|
|
5
|
+
AutomatedUserUtils,
|
|
6
|
+
Utils,
|
|
7
|
+
} from '@webex/internal-plugin-metrics';
|
|
3
8
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
4
9
|
import sinon from 'sinon';
|
|
5
|
-
import {Utils} from '@webex/internal-plugin-metrics';
|
|
6
10
|
|
|
7
11
|
describe('internal-plugin-metrics', () => {
|
|
8
12
|
|
|
@@ -69,6 +73,32 @@ describe('internal-plugin-metrics', () => {
|
|
|
69
73
|
|
|
70
74
|
assert.instanceOf(webex.internal.newMetrics.callDiagnosticLatencies, CallDiagnosticLatencies);
|
|
71
75
|
});
|
|
76
|
+
|
|
77
|
+
it('checks callDiagnosticMetrics is defined before ready emit', () => {
|
|
78
|
+
const webex = mockWebex();
|
|
79
|
+
|
|
80
|
+
assert.isDefined(webex.internal.newMetrics.callDiagnosticMetrics);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('can call buildClientEventFetchRequestOptions before ready', async () => {
|
|
84
|
+
const webex = mockWebex();
|
|
85
|
+
const stub = sinon.stub(
|
|
86
|
+
webex.internal.newMetrics.callDiagnosticMetrics,
|
|
87
|
+
'buildClientEventFetchRequestOptions'
|
|
88
|
+
).resolves({url: 'https://metrics.example.com'});
|
|
89
|
+
|
|
90
|
+
const result = await webex.internal.newMetrics.buildClientEventFetchRequestOptions({
|
|
91
|
+
name: 'client.alert.displayed',
|
|
92
|
+
options: {correlationId: 'test-id'},
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
assert.calledOnceWithExactly(stub, {
|
|
96
|
+
name: 'client.alert.displayed',
|
|
97
|
+
payload: undefined,
|
|
98
|
+
options: {correlationId: 'test-id'},
|
|
99
|
+
});
|
|
100
|
+
assert.deepEqual(result, {url: 'https://metrics.example.com'});
|
|
101
|
+
});
|
|
72
102
|
});
|
|
73
103
|
|
|
74
104
|
describe('new-metrics', () => {
|
|
@@ -110,6 +140,13 @@ describe('internal-plugin-metrics', () => {
|
|
|
110
140
|
assert.isDefined(webex.internal.newMetrics.businessMetrics);
|
|
111
141
|
})
|
|
112
142
|
|
|
143
|
+
it('returns the automated user classification', () => {
|
|
144
|
+
assert.strictEqual(
|
|
145
|
+
webex.internal.newMetrics.isAutomatedUser(),
|
|
146
|
+
AutomatedUserUtils.isAutomatedUser()
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
|
|
113
150
|
it('passes the table through to the business metrics', () => {
|
|
114
151
|
assert.isUndefined(webex.internal.newMetrics.businessMetrics)
|
|
115
152
|
webex.internal.newMetrics.isReadyToSubmitBusinessEvents();
|
|
@@ -64,45 +64,36 @@ describe('internal-plugin-metrics', () => {
|
|
|
64
64
|
//@ts-ignore
|
|
65
65
|
assert.calledOnce(webex.request);
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
networkType: 'unknown',
|
|
87
|
-
upgradeChannel: 'test',
|
|
88
|
-
},
|
|
89
|
-
originTime: {
|
|
90
|
-
sent: dateAfterBatcherWait.toISOString(),
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
type: ['diagnostic-event'],
|
|
94
|
-
},
|
|
95
|
-
],
|
|
67
|
+
assert.deepEqual(webexRequestArgs.headers, {
|
|
68
|
+
authorization: false,
|
|
69
|
+
'x-prelogin-userid': preLoginId,
|
|
70
|
+
});
|
|
71
|
+
assert.equal(webexRequestArgs.method, 'POST');
|
|
72
|
+
assert.equal(webexRequestArgs.resource, 'clientmetrics-prelogin');
|
|
73
|
+
assert.equal(webexRequestArgs.service, 'metrics');
|
|
74
|
+
assert.equal(webexRequestArgs.waitForServiceTimeout, 30);
|
|
75
|
+
|
|
76
|
+
assert.deepEqual(webexRequestArgs.body.metrics[0].eventPayload, {
|
|
77
|
+
event: {
|
|
78
|
+
joinTimes: {
|
|
79
|
+
meetingInfoReqResp: undefined,
|
|
80
|
+
clickToInterstitial: undefined,
|
|
81
|
+
refreshCaptchaServiceReqResp: undefined,
|
|
82
|
+
downloadIntelligenceModelsReqResp: undefined,
|
|
83
|
+
clickToInterstitialWithUserDelay: undefined,
|
|
84
|
+
},
|
|
85
|
+
name: 'client.interstitial-window.launched',
|
|
96
86
|
},
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
'
|
|
87
|
+
origin: {
|
|
88
|
+
buildType: 'test',
|
|
89
|
+
networkType: 'unknown',
|
|
90
|
+
upgradeChannel: 'test',
|
|
91
|
+
},
|
|
92
|
+
originTime: {
|
|
93
|
+
sent: dateAfterBatcherWait.toISOString(),
|
|
100
94
|
},
|
|
101
|
-
method: 'POST',
|
|
102
|
-
resource: 'clientmetrics-prelogin',
|
|
103
|
-
service: 'metrics',
|
|
104
|
-
waitForServiceTimeout: 30,
|
|
105
95
|
});
|
|
96
|
+
assert.deepEqual(webexRequestArgs.body.metrics[0].type, ['diagnostic-event']);
|
|
106
97
|
assert.lengthOf(
|
|
107
98
|
webex.internal.newMetrics.callDiagnosticMetrics.preLoginMetricsBatcher.queue,
|
|
108
99
|
0
|
|
@@ -320,5 +311,49 @@ describe('internal-plugin-metrics', () => {
|
|
|
320
311
|
);
|
|
321
312
|
});
|
|
322
313
|
});
|
|
314
|
+
|
|
315
|
+
describe('#submitHttpRequest', () => {
|
|
316
|
+
it('calls webex.request with the correct parameters', async () => {
|
|
317
|
+
const payload = [
|
|
318
|
+
{
|
|
319
|
+
eventPayload: {event: 'my.event'},
|
|
320
|
+
type: ['diagnostic-event'],
|
|
321
|
+
},
|
|
322
|
+
];
|
|
323
|
+
|
|
324
|
+
webex.internal.newMetrics.callDiagnosticMetrics.preLoginMetricsBatcher.savePreLoginId(
|
|
325
|
+
preLoginId
|
|
326
|
+
);
|
|
327
|
+
webex.request = sinon.stub().resolves({statusCode: 200});
|
|
328
|
+
|
|
329
|
+
const promise =
|
|
330
|
+
webex.internal.newMetrics.callDiagnosticMetrics.preLoginMetricsBatcher.submitHttpRequest(
|
|
331
|
+
payload
|
|
332
|
+
);
|
|
333
|
+
|
|
334
|
+
await flushPromises();
|
|
335
|
+
|
|
336
|
+
clock.tick(config.metrics.batcherWait);
|
|
337
|
+
|
|
338
|
+
await promise;
|
|
339
|
+
|
|
340
|
+
const webexRequestArgs = webex.request.args[0][0];
|
|
341
|
+
|
|
342
|
+
assert.match(webexRequestArgs, {
|
|
343
|
+
//@ts-ignore
|
|
344
|
+
body: {
|
|
345
|
+
metrics: payload,
|
|
346
|
+
},
|
|
347
|
+
headers: {
|
|
348
|
+
authorization: false,
|
|
349
|
+
'x-prelogin-userid': preLoginId,
|
|
350
|
+
},
|
|
351
|
+
method: 'POST',
|
|
352
|
+
resource: 'clientmetrics-prelogin',
|
|
353
|
+
service: 'metrics',
|
|
354
|
+
waitForServiceTimeout: 30,
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
});
|
|
323
358
|
});
|
|
324
359
|
});
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import PreLoginMetricsBatcher from '../../../src/prelogin-metrics-batcher';
|
|
2
|
+
import {PreLoginMetrics} from '@webex/internal-plugin-metrics';
|
|
3
|
+
import {assert} from '@webex/test-helper-chai';
|
|
4
|
+
import MockWebex from '@webex/test-helper-mock-webex';
|
|
5
|
+
import sinon from 'sinon';
|
|
6
|
+
|
|
7
|
+
describe('internal-plugin-metrics', () => {
|
|
8
|
+
const mockedWebex: MockWebex = new MockWebex();
|
|
9
|
+
const fakedPreLoginMetricsBatcher: typeof PreLoginMetricsBatcher = new PreLoginMetricsBatcher({}, {parent: mockedWebex});
|
|
10
|
+
|
|
11
|
+
describe('prelogin-metrics', () => {
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
sinon.restore();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('Should send metrics to preloginMetricsBatcher', async () => {
|
|
17
|
+
const testEvent = 'test';
|
|
18
|
+
const testId = 'abc123';
|
|
19
|
+
const preLoginMetrics = new PreLoginMetrics(fakedPreLoginMetricsBatcher, {}, {parent: mockedWebex});
|
|
20
|
+
|
|
21
|
+
sinon.stub(fakedPreLoginMetricsBatcher, 'savePreLoginId');
|
|
22
|
+
const requestSpy = sinon.stub(fakedPreLoginMetricsBatcher, 'request');
|
|
23
|
+
|
|
24
|
+
await preLoginMetrics.submitPreLoginEvent({name: testEvent, preLoginId: testId, payload: {}});
|
|
25
|
+
|
|
26
|
+
assert.calledOnceWithMatch(requestSpy, {
|
|
27
|
+
type: ['business'],
|
|
28
|
+
eventPayload: {metricName: testEvent, value: {preLoginId: testId}},
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('Should send metadata to preloginMetricsBatcher', async () => {
|
|
33
|
+
const testEvent = 'test';
|
|
34
|
+
const testId = 'abc123';
|
|
35
|
+
const testMetadata = { 'testKey': 'test-value' };
|
|
36
|
+
const preLoginMetrics = new PreLoginMetrics(fakedPreLoginMetricsBatcher, {}, {parent: mockedWebex});
|
|
37
|
+
|
|
38
|
+
sinon.stub(fakedPreLoginMetricsBatcher, 'savePreLoginId');
|
|
39
|
+
const requestSpy = sinon.stub(fakedPreLoginMetricsBatcher, 'request');
|
|
40
|
+
|
|
41
|
+
await preLoginMetrics.submitPreLoginEvent({name: testEvent, preLoginId: testId, payload: {}, metadata: testMetadata});
|
|
42
|
+
|
|
43
|
+
assert.calledOnceWithMatch(requestSpy, {
|
|
44
|
+
type: ['business'],
|
|
45
|
+
eventPayload: {metricName: testEvent, value: {preLoginId: testId, ...testMetadata}},
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('Should send payload to preloginMetricsBatcher', async () => {
|
|
50
|
+
const testEvent = 'test';
|
|
51
|
+
const testId = 'abc123';
|
|
52
|
+
const testPayload = { 'testKey': 'test-value' };
|
|
53
|
+
const preLoginMetrics = new PreLoginMetrics(fakedPreLoginMetricsBatcher, {}, {parent: mockedWebex});
|
|
54
|
+
|
|
55
|
+
sinon.stub(fakedPreLoginMetricsBatcher, 'savePreLoginId');
|
|
56
|
+
const requestSpy = sinon.stub(fakedPreLoginMetricsBatcher, 'request');
|
|
57
|
+
|
|
58
|
+
await preLoginMetrics.submitPreLoginEvent({name: testEvent, preLoginId: testId, payload: testPayload});
|
|
59
|
+
|
|
60
|
+
assert.calledOnceWithMatch(requestSpy, {
|
|
61
|
+
type: ['business'],
|
|
62
|
+
eventPayload: {metricName: testEvent, value: {preLoginId: testId, ...testPayload}},
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('Should fill appType if not defined', async () => {
|
|
67
|
+
const testEvent = 'test';
|
|
68
|
+
const preLoginMetrics = new PreLoginMetrics(fakedPreLoginMetricsBatcher, {}, {parent: mockedWebex});
|
|
69
|
+
|
|
70
|
+
sinon.stub(fakedPreLoginMetricsBatcher, 'savePreLoginId');
|
|
71
|
+
const requestSpy = sinon.stub(fakedPreLoginMetricsBatcher, 'request');
|
|
72
|
+
|
|
73
|
+
await preLoginMetrics.submitPreLoginEvent({name: testEvent, preLoginId: 'abc123', payload: {}});
|
|
74
|
+
|
|
75
|
+
assert.calledOnceWithMatch(requestSpy, {
|
|
76
|
+
type: ['business'],
|
|
77
|
+
eventPayload: {metricName: testEvent, value: {appType: 'Web Client'}},
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('Should add browser details', async () => {
|
|
82
|
+
const testEvent = 'test';
|
|
83
|
+
const testBrowserDetails = { browser: 'Firefox', domain: 'test.example.com' };
|
|
84
|
+
const preLoginMetrics = new PreLoginMetrics(fakedPreLoginMetricsBatcher, {}, {parent: mockedWebex});
|
|
85
|
+
|
|
86
|
+
sinon.stub(preLoginMetrics, 'getBrowserDetails').returns(testBrowserDetails);
|
|
87
|
+
sinon.stub(fakedPreLoginMetricsBatcher, 'savePreLoginId');
|
|
88
|
+
const requestSpy = sinon.stub(fakedPreLoginMetricsBatcher, 'request');
|
|
89
|
+
|
|
90
|
+
await preLoginMetrics.submitPreLoginEvent({name: testEvent, preLoginId: 'abc123', payload: {}});
|
|
91
|
+
|
|
92
|
+
assert.calledOnceWithMatch(requestSpy, {
|
|
93
|
+
type: ['business'],
|
|
94
|
+
eventPayload: {browserDetails: testBrowserDetails, metricName: testEvent},
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('Should add context', async () => {
|
|
99
|
+
const testEvent = 'test';
|
|
100
|
+
const testContext = { device: { id: 'abc123' }};
|
|
101
|
+
const preLoginMetrics = new PreLoginMetrics(fakedPreLoginMetricsBatcher, {}, {parent: mockedWebex});
|
|
102
|
+
|
|
103
|
+
sinon.stub(preLoginMetrics, 'getContext').returns(testContext);
|
|
104
|
+
sinon.stub(fakedPreLoginMetricsBatcher, 'savePreLoginId');
|
|
105
|
+
const requestSpy = sinon.stub(fakedPreLoginMetricsBatcher, 'request');
|
|
106
|
+
|
|
107
|
+
await preLoginMetrics.submitPreLoginEvent({name: testEvent, preLoginId: 'abc123', payload: {}});
|
|
108
|
+
|
|
109
|
+
assert.calledOnceWithMatch(requestSpy, {
|
|
110
|
+
type: ['business'],
|
|
111
|
+
eventPayload: {context: testContext, metricName: testEvent},
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('Should add timestamp', async () => {
|
|
116
|
+
const testEvent = 'test';
|
|
117
|
+
const testTime = 1234;
|
|
118
|
+
const preLoginMetrics = new PreLoginMetrics(fakedPreLoginMetricsBatcher, {}, {parent: mockedWebex});
|
|
119
|
+
|
|
120
|
+
sinon.useFakeTimers(testTime);
|
|
121
|
+
sinon.stub(fakedPreLoginMetricsBatcher, 'savePreLoginId');
|
|
122
|
+
const requestSpy = sinon.stub(fakedPreLoginMetricsBatcher, 'request');
|
|
123
|
+
|
|
124
|
+
await preLoginMetrics.submitPreLoginEvent({name: testEvent, preLoginId: 'abc123', payload: {}});
|
|
125
|
+
|
|
126
|
+
assert.calledOnceWithMatch(requestSpy, {
|
|
127
|
+
type: ['business'],
|
|
128
|
+
eventPayload: {metricName: testEvent, timestamp: testTime},
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
});
|