diff --git a/src/components/LegacyMediaAnalytics/createGetInstance.js b/src/components/LegacyMediaAnalytics/createGetInstance.js index 754c40612..31998acb6 100644 --- a/src/components/LegacyMediaAnalytics/createGetInstance.js +++ b/src/components/LegacyMediaAnalytics/createGetInstance.js @@ -13,6 +13,7 @@ import { EVENT, MEDIA_EVENTS_INTERNAL } from "./constants/constants.js"; import { includes, isEmptyObject, + isNil, isNonEmptyArray, isNumber, } from "../../utils/index.js"; @@ -22,10 +23,13 @@ import { } from "./constants/mediaKeysToXdmConverter.js"; export default ({ logger, trackMediaSession, trackMediaEvent, uuid }) => { - let trackerState = { - qoe: null, - lastPlayhead: 0, - playerId: uuid(), + let trackerState = null; + const instantiateTracker = () => { + trackerState = { + qoe: null, + lastPlayhead: 0, + playerId: uuid(), + }; }; const getEventType = ({ eventType }) => { if ( @@ -98,7 +102,7 @@ export default ({ logger, trackMediaSession, trackMediaEvent, uuid }) => { return { trackSessionStart: (mediaObject, contextData = {}) => { - if (isEmptyObject(mediaObject)) { + if (isNil(mediaObject) || isEmptyObject(mediaObject)) { logger.warn("Invalid media object"); return {}; } @@ -106,11 +110,7 @@ export default ({ logger, trackMediaSession, trackMediaEvent, uuid }) => { logger.warn( "The Media Session was completed. Restarting a new session.", ); - trackerState = { - qoe: null, - lastPlayhead: 0, - playerId: uuid(), - }; + instantiateTracker(); } const xdm = createXdmObject({ eventType: MEDIA_EVENTS_INTERNAL.SessionStart, diff --git a/test/unit/specs/components/LegacyMediaAnalytics/createGetInstance.spec.js b/test/unit/specs/components/LegacyMediaAnalytics/createGetInstance.spec.js index e52ff5328..f34e9f4db 100644 --- a/test/unit/specs/components/LegacyMediaAnalytics/createGetInstance.spec.js +++ b/test/unit/specs/components/LegacyMediaAnalytics/createGetInstance.spec.js @@ -52,6 +52,7 @@ describe("createGetInstance", () => { trackMediaEvent, uuid, }); + result.trackSessionStart({ sessionDetails: {} }); result.trackPlay(); expect(trackMediaEvent).toHaveBeenCalledWith({ @@ -66,6 +67,7 @@ describe("createGetInstance", () => { trackMediaEvent, uuid, }); + result.trackSessionStart({ sessionDetails: {} }); result.trackPause(); expect(trackMediaEvent).toHaveBeenCalledWith({ @@ -129,6 +131,7 @@ describe("createGetInstance", () => { trackMediaEvent, uuid, }); + result.trackSessionStart({ sessionDetails: {} }); result.trackError("error"); expect(trackMediaEvent).toHaveBeenCalledWith({ @@ -150,6 +153,7 @@ describe("createGetInstance", () => { trackMediaEvent, uuid, }); + result.trackSessionStart({ sessionDetails: {} }); result.trackComplete(); expect(trackMediaEvent).toHaveBeenCalledWith({ @@ -167,6 +171,7 @@ describe("createGetInstance", () => { trackMediaEvent, uuid, }); + result.trackSessionStart({ sessionDetails: {} }); result.trackSessionEnd(); expect(trackMediaEvent).toHaveBeenCalledWith({ @@ -187,6 +192,7 @@ describe("createGetInstance", () => { const state = { name: "muted", }; + result.trackSessionStart({ sessionDetails: {} }); result.trackEvent("stateStart", state); expect(trackMediaEvent).toHaveBeenCalledWith({ @@ -209,6 +215,7 @@ describe("createGetInstance", () => { const state = { name: "muted", }; + result.trackSessionStart({ sessionDetails: {} }); result.trackEvent("stateEnd", state); expect(trackMediaEvent).toHaveBeenCalledWith({ @@ -241,7 +248,7 @@ describe("createGetInstance", () => { "a.media.ad.advertiser": "Sample Advertiser 2", "a.media.ad.campaign": "csmpaign2", }; - + result.trackSessionStart({ sessionDetails: {} }); result.trackEvent("adStart", { advertisingDetails }, adContextData); expect(trackMediaEvent).toHaveBeenCalledWith({