'use strict';
describe('AnalyticsTest', function() {
var url;
var analytics;
var eventTime;
var eventType;
var realDateNow;
var realSendAsyncRequest;
beforeEach(function() {
url = 'https://test.org';
analytics = new Analytics(url);
eventType = enums.EventType.ROOM_SIZE_2;
eventTime = 1234;
realDateNow = Date.now;
realSendAsyncRequest = sendAsyncUrlRequest;
sendAsyncUrlRequest = Mock.createSendAsyncUrlRequestMock();
Date.now = function() {
return eventTime;
};
});
afterEach(function() {
sendAsyncUrlRequest = realSendAsyncRequest;
Date.now = realDateNow;
});
it('Report with all fields', function() {
var roomId = 'my awesome room';
var flowId = 24;
analytics.reportEvent(eventType, roomId, flowId);
expect(sendAsyncUrlRequest.calls().length).toEqual(1);
var call = sendAsyncUrlRequest.calls()[0];
expect(call.method).toEqual('POST');
expect(call.url.indexOf(url) === 0).toBeTruthy();
var actualRequest = JSON.parse(call.body);
expect(actualRequest[enums.RequestField.TYPE])
.toEqual(enums.RequestField.MessageType.EVENT);
expect(actualRequest[enums.RequestField.REQUEST_TIME_MS])
.toEqual(eventTime);
var actualEvent = actualRequest[enums.RequestField.EVENT];
expect(actualEvent[enums.RequestField.EventField.EVENT_TYPE])
.toEqual(eventType);
expect(actualEvent[enums.RequestField.EventField.EVENT_TIME_MS])
.toEqual(eventTime);
expect(actualEvent[enums.RequestField.EventField.ROOM_ID]).toEqual(roomId);
expect(actualEvent[enums.RequestField.EventField.FLOW_ID]).toEqual(flowId);
});
it('Report without any optional fields', function() {
analytics.reportEvent(eventType);
expect(sendAsyncUrlRequest.calls().length).toEqual(1);
var call = sendAsyncUrlRequest.calls()[0];
expect(call.method).toEqual('POST');
expect(call.url.indexOf(url) === 0).toBeTruthy();
var actualRequest = JSON.parse(call.body);
expect(actualRequest[enums.RequestField.TYPE])
.toEqual(enums.RequestField.MessageType.EVENT);
expect(actualRequest[enums.RequestField.REQUEST_TIME_MS])
.toEqual(eventTime);
var actualEvent = actualRequest[enums.RequestField.EVENT];
expect(actualEvent[enums.RequestField.EventField.EVENT_TYPE])
.toEqual(eventType);
expect(actualEvent[enums.RequestField.EventField.EVENT_TIME_MS])
.toEqual(eventTime);
expect(actualEvent[enums.RequestField.EventField.ROOM_ID])
.toEqual(undefined);
expect(actualEvent[enums.RequestField.EventField.FLOW_ID])
.toEqual(undefined);
});
});