diff --git a/extensions/doPlugins_global.js b/extensions/doPlugins_global.js index 7490beee..d72fd130 100644 --- a/extensions/doPlugins_global.js +++ b/extensions/doPlugins_global.js @@ -372,6 +372,7 @@ s._articleViewTypeObj = { const referringDomain = s._utils.getDomainFromURLString(referrer); const isSessionStart = s._utils.isSessionStart(); const isHomepage = s._utils.isHomepage(); + const isArticle = s._utils.isArticlePage(); let pageViewEvent; let channel; @@ -399,7 +400,7 @@ s._articleViewTypeObj = { } else if (this.isFromSecureMypass(referrer)||this.isFromPaypal(referrer)) { pageViewEvent = 'event23,event201'; // Login via secure.mypass during session //channel = ''; - } else if (this.isWithoutReferrer() && this.isNavigated()) { + } else if (this.isWithoutReferrer() && this.isNavigated() && isArticle) { pageViewEvent = 'event26,event202'; // Dark Social channel = 'Dark Social'; } else if (this.isDirect(referrer)) { @@ -517,9 +518,9 @@ s._articleViewTypeObj = { const channelCategory = viewTypesResults ? viewTypesResults.channelCategory : ''; if (!s._utils.isAdWall(s)) { - if (s._utils.isArticlePage()) { + if (pageViewEvent) { s._articleViewType = s.eVar44 = window.utag.data.sp_events = pageViewEvent; - s.eVar37 = s.prop59 = window.utag.data.sp_m_channel = channel || 'no-entry'; + s.eVar37 = s.prop59 = window.utag.data.sp_m_channel = channel; s.eVar38 = s.prop60 = window.utag.data.sp_m_channel_category = channelCategory; s._eventsObj.addEvent(pageViewEvent); this.setPageSourceAndAgeForCheckout(s); @@ -643,27 +644,24 @@ s._setExternalReferringDomainEvents = function (s) { ]; - - if (s._utils.isArticlePage()) { - const referringURL = s._utils.getReferrer(); - if (!referringURL) { - return; - } - domainsToEventMapping.forEach(domainEventMap => { - const { domains, event, matchRegex, channel, channelCategory} = domainEventMap; - const isRegexMatch = matchRegex && referringURL.match(matchRegex); - const isDomainMatch = domains && domains.some(domain => { - return referringURL && referringURL.includes(domain); - }); - if (isRegexMatch || isDomainMatch) { - s._eventsObj.addEvent(event); - s.eVar44 = window.utag.data.sp_events = s.eVar44 ? s.eVar44 + ',' + event : event; - s.eVar37 = s.prop59 = window.utag.data.sp_m_channel = channel || 'no-entry'; - s.eVar38 = s.prop60 = window.utag.data.sp_m_channel_category = channelCategory; - s._articleViewType = s.eVar44; - } - }); + const referringURL = s._utils.getReferrer(); + if (!referringURL) { + return; } + domainsToEventMapping.forEach(domainEventMap => { + const { domains, event, matchRegex, channel, channelCategory} = domainEventMap; + const isRegexMatch = matchRegex && referringURL.match(matchRegex); + const isDomainMatch = domains && domains.some(domain => { + return referringURL && referringURL.includes(domain); + }); + if (isRegexMatch || isDomainMatch) { + s._eventsObj.addEvent(event); + s.eVar44 = window.utag.data.sp_events = s.eVar44 ? s.eVar44 + ',' + event : event; + s.eVar37 = s.prop59 = window.utag.data.sp_m_channel = channel || 'no-entry'; + s.eVar38 = s.prop60 = window.utag.data.sp_m_channel_category = channelCategory; + s._articleViewType = s.eVar44; + } + }); }; /** @@ -672,60 +670,58 @@ s._setExternalReferringDomainEvents = function (s) { s._setTrackingValueEvents = function (s) { - if (s._utils.isArticlePage()) { - const trackingValuesFromQueryParameter = s._articleViewTypeObj.getTrackingValue(); + const trackingValuesFromQueryParameter = s._articleViewTypeObj.getTrackingValue(); - if (trackingValuesFromQueryParameter) { - const socialTrackingParameter = s._articleViewTypeObj.isTrackingValueOrganicSocial(); - const socialTrackingValue = trackingValuesFromQueryParameter; + if (trackingValuesFromQueryParameter) { + const socialTrackingParameter = s._articleViewTypeObj.isTrackingValueOrganicSocial(); + const socialTrackingValue = trackingValuesFromQueryParameter; - if (socialTrackingParameter) { - let event; - let channel = 'Organic Social'; - let channelCategory; - switch (true) { - case socialTrackingValue.includes('telegram'): - event = 'event225'; - channelCategory = 'Telegram'; - break; - case socialTrackingValue.includes('instagram'): - event = 'event53,event224'; - channelCategory = 'Instagram'; - break; - case socialTrackingValue.includes('youtube'): - event = 'event50,event223'; - channelCategory = 'Youtube'; - break; - case socialTrackingValue.includes('twitter'): - event = 'event51,event222'; - channelCategory = 'Twitter'; - break; - case socialTrackingValue.includes('facebook'): - event = 'event52,event221'; - channelCategory = 'Facebook'; - break; - case socialTrackingValue.includes('linkedin'): - event = 'event227'; - channelCategory = 'LinkedIn'; - break; - case socialTrackingValue.includes('xing'): - event = 'event228'; - channelCategory = 'Xing'; - break; - case socialTrackingValue.includes('pinterest'): - event = 'event229'; - channelCategory = 'Pinterest'; - break; - default: - event = 'event226'; - channelCategory = 'Other organic Social'; - } - s._eventsObj.addEvent(event); - s._articleViewType = s.eVar44 = window.utag.data.sp_events += ',' + event; - s.eVar37 = s.prop59 = window.utag.data.sp_m_channel = channel || 'no-entry'; - s.eVar38 = s.prop60 = window.utag.data.sp_m_channel_category = channelCategory || ''; - } - } + if (socialTrackingParameter) { + let event; + let channel = 'Organic Social'; + let channelCategory; + switch (true) { + case socialTrackingValue.includes('telegram'): + event = 'event225'; + channelCategory = 'Telegram'; + break; + case socialTrackingValue.includes('instagram'): + event = 'event53,event224'; + channelCategory = 'Instagram'; + break; + case socialTrackingValue.includes('youtube'): + event = 'event50,event223'; + channelCategory = 'Youtube'; + break; + case socialTrackingValue.includes('twitter'): + event = 'event51,event222'; + channelCategory = 'Twitter'; + break; + case socialTrackingValue.includes('facebook'): + event = 'event52,event221'; + channelCategory = 'Facebook'; + break; + case socialTrackingValue.includes('linkedin'): + event = 'event227'; + channelCategory = 'LinkedIn'; + break; + case socialTrackingValue.includes('xing'): + event = 'event228'; + channelCategory = 'Xing'; + break; + case socialTrackingValue.includes('pinterest'): + event = 'event229'; + channelCategory = 'Pinterest'; + break; + default: + event = 'event226'; + channelCategory = 'Other organic Social'; + } + s._eventsObj.addEvent(event); + s._articleViewType = s.eVar44 = window.utag.data.sp_events += ',' + event; + s.eVar37 = s.prop59 = window.utag.data.sp_m_channel = channel; + s.eVar38 = s.prop60 = window.utag.data.sp_m_channel_category = channelCategory || ''; + } } }; diff --git a/tests/doplugins/doplugins_article_view_type.test.js b/tests/doplugins/doplugins_article_view_type.test.js index 23b42d6f..a97bae56 100644 --- a/tests/doplugins/doplugins_article_view_type.test.js +++ b/tests/doplugins/doplugins_article_view_type.test.js @@ -568,6 +568,7 @@ describe('articleViewType()', () => { let isSessionStartMock; let isNavigatedMock; let isHomepageMock; + let isArticleMock; beforeEach(() => { jest.spyOn(s._utils, 'getDomainFromURLString').mockReturnValue(anyReferrerDomain); @@ -583,6 +584,7 @@ describe('articleViewType()', () => { isSessionStartMock = jest.spyOn(s._utils, 'isSessionStart').mockReturnValue(false); isNavigatedMock = jest.spyOn(s._articleViewTypeObj, 'isNavigated').mockReturnValue(false); isHomepageMock = jest.spyOn(s._utils, 'isHomepage').mockReturnValue(false); + isArticleMock = jest.spyOn(s._utils, 'isArticlePage').mockReturnValue(true); }); @@ -944,8 +946,7 @@ describe('articleViewType()', () => { jest.restoreAllMocks(); }); - it('should evaluate referrer URL when available to determine article-view-type', function () { - isArticlePageMock.mockReturnValue(true); + it('should evaluate referrer URL when available', function () { isAdWallMock.mockReturnValue(false); isOtherTrackingValueMock.mockReturnValue(false); window.document.referrer = 'any-referrer-url'; @@ -954,7 +955,6 @@ describe('articleViewType()', () => { }); it('should evaluate tracking URL param when referrer is NOT available', function () { - isArticlePageMock.mockReturnValue(true); isAdWallMock.mockReturnValue(false); window.location.search = 'cid=email.-cid'; s._articleViewTypeObj.setViewTypes(s); @@ -968,7 +968,6 @@ describe('articleViewType()', () => { channelCategory: 'any-channel-category' }; isAdWallMock.mockReturnValue(false); - isArticlePageMock.mockReturnValue(true); window.location.search = 'cid=any-cid'; getViewTypeByTrackingPropertyMock.mockReturnValue(anyViewType); @@ -991,7 +990,6 @@ describe('articleViewType()', () => { it('should NOT assign the page-view-type to s._articleViewType and s.eVar44 if page is NOT of type article', function () { const anyViewType = 'any-view-type'; isAdWallMock.mockReturnValue(false); - isArticlePageMock.mockReturnValue(false); getViewTypeByTrackingPropertyMock.mockReturnValue(anyViewType); expect(s._articleViewType).toBeUndefined(); @@ -1004,8 +1002,14 @@ describe('articleViewType()', () => { }); it('should call setPageSourceAndAgeForCheckout() function if page is of type article', function () { + const anyViewType = { + pageViewEvent: 'any-view-type', + channel: 'any-channel', + channelCategory: 'any-channel-category' + }; + getViewTypeByReferrerMock.mockReturnValue(anyViewType); + getViewTypeByTrackingPropertyMock.mockReturnValue(anyViewType); isAdWallMock.mockReturnValue(false); - isArticlePageMock.mockReturnValue(true); s._articleViewTypeObj.setViewTypes(s); expect(setPageSourceAndAgeForCheckoutMock).toHaveBeenCalled(); @@ -1013,11 +1017,10 @@ describe('articleViewType()', () => { it('should NOT call setPageSourceAndAgeForCheckout() function if page is NOT of type article', function () { isAdWallMock.mockReturnValue(false); - isArticlePageMock.mockReturnValue(false); s._articleViewTypeObj.setViewTypes(s); expect(setPageSourceAndAgeForCheckoutMock).not.toHaveBeenCalled(); - }); + }); it('should call s._eventsObj.addEvent() with pag-view-type as the argument if page is of type article', function () { //const anyViewType = 'any-view-type'; @@ -1036,17 +1039,6 @@ describe('articleViewType()', () => { expect(addEventMock).toHaveBeenCalledWith(anyViewType.pageViewEvent); }); - it('should NOT call s._eventsObj.addEvent() with pag-view-type as the argument if page is NOT of type article', function () { - const anyViewType = 'any-view-type'; - isAdWallMock.mockReturnValue(false); - isArticlePageMock.mockReturnValue(false); - getViewTypeByTrackingPropertyMock.mockReturnValue(anyViewType); - - s._articleViewTypeObj.setViewTypes(s); - - expect(addEventMock).not.toHaveBeenCalled(); - }); - it('should call s._eventsObj.addEvent() with event20 as the argument if page was viewed after the homepage (homepage teaser click)', function () { isAdWallMock.mockReturnValue(false); isPageViewFromHomeMock.mockReturnValue(true); diff --git a/tests/doplugins/doplugins_externel_referring_domain.test.js b/tests/doplugins/doplugins_externel_referring_domain.test.js index 06f5b56f..67e8d69d 100644 --- a/tests/doplugins/doplugins_externel_referring_domain.test.js +++ b/tests/doplugins/doplugins_externel_referring_domain.test.js @@ -24,13 +24,6 @@ describe('External referring domains', () => { jest.restoreAllMocks(); }); - it('should run only on article pages', function () { - isArticlePageMock.mockReturnValue(false); - - s._setExternalReferringDomainEvents(s); - expect(getReferrerMock).not.toBeCalled(); - }); - it('should set event49 and it should not set event213 if the referring domain is www.google.de', () => { getReferrerMock.mockReturnValue('www.google.com'); diff --git a/tests/doplugins/doplugins_trackingValue_events.test.js b/tests/doplugins/doplugins_trackingValue_events.test.js index 563e5011..99611aaa 100644 --- a/tests/doplugins/doplugins_trackingValue_events.test.js +++ b/tests/doplugins/doplugins_trackingValue_events.test.js @@ -25,13 +25,6 @@ describe('_setTrackingValueEvents (URL Parameter like cid)', () => { afterEach(() => { jest.restoreAllMocks(); }); - - it('should run only on article pages', function () { - isArticlePageMock.mockReturnValue(false); - - s._setTrackingValueEvents(s); - expect(getTrackingValueMock).not.toBeCalled(); - }); //Telegram it('should set event225 if the trackingValue contains telegram', () => {