/** * Test getContext * * @covers AdEngine2ContextService::getContext * @dataProvider adContextDataProvider */ public function testGetContext($titleMockType = 'article', $flags = [], $expectedOpts = [], $expectedTargeting = [], $expectedProviders = [], $expectedForcedProvider = null, $expectedSlots = []) { $langCode = 'xx'; $artId = 777; $artDbKey = 'articledbkey'; $skinName = 'someskin'; $vertical = 'Fakevertical'; $dbName = 'mydbname'; $cityId = 666; $customDartKvs = 'a=b;c=d'; $catId = WikiFactoryHub::CATEGORY_ID_LIFESTYLE; $shortCat = 'shortcat'; $sevenOneMediaSub2Site = 'customsub2site'; $expectedSevenOneMediaUrlFormat = 'http://%s/__load/-/cb%3D%d%26debug%3Dfalse%26lang%3D%s%26only%3Dscripts%26skin%3Doasis/wikia.ext.adengine.sevenonemedia'; if ($titleMockType === 'article' || $titleMockType === 'mainpage') { $expectedTargeting['pageArticleId'] = $artId; $expectedTargeting['pageIsArticle'] = true; } // Mock globals $this->mockGlobalVariable('wgCityId', $cityId); $this->mockGlobalVariable('wgDartCustomKeyValues', $customDartKvs); $this->mockGlobalVariable('wgDBname', $dbName); $this->mockGlobalVariable('wgAdDriverSevenOneMediaOverrideSub2Site', $sevenOneMediaSub2Site); if (!is_null($expectedForcedProvider)) { $this->mockGlobalVariable('wgAdDriverForcedProvider', $expectedForcedProvider); } // Flags $this->mockGlobalVariable('wgAdDriverEnableAdsInMaps', false); $this->mockGlobalVariable('wgAdDriverEnableInvisibleHighImpactSlot', false); $this->mockGlobalVariable('wgAdDriverTrackState', false); $this->mockGlobalVariable('wgAdDriverUseMonetizationService', false); $this->mockGlobalVariable('wgAdDriverUseSevenOneMedia', false); $this->mockGlobalVariable('wgEnableAdsInContent', false); $this->mockGlobalVariable('wgEnableKruxTargeting', false); $this->mockGlobalVariable('wgEnableMonetizationModuleExt', false); $this->mockGlobalVariable('wgEnableWikiaHomePageExt', false); $this->mockGlobalVariable('wgEnableWikiaHubsV3Ext', false); $this->mockGlobalVariable('wgEnableOutboundScreenExt', false); $this->mockGlobalVariable('wgOutboundScreenRedirectDelay', false); $this->mockGlobalVariable('wgWikiDirectedAtChildrenByFounder', false); $this->mockGlobalVariable('wgWikiDirectedAtChildrenByStaff', false); foreach ($flags as $flag) { $this->mockGlobalVariable($flag, true); } // Mock WikiFactoryHub $this->mockStaticMethod('WikiFactoryHub', 'getCategoryId', $catId); $this->mockStaticMethod('WikiFactoryHub', 'getCategoryShort', $shortCat); // Mock HubService $this->mockStaticMethod('HubService', 'getCategoryInfoForCity', (object) ['cat_name' => $vertical]); // Mock MonetizationModule if (in_array('wgAdDriverUseMonetizationService', $flags)) { $this->mockMonetizationModule(); } $adContextService = new AdEngine2ContextService(); $result = $adContextService->getContext($this->getTitleMock($titleMockType, $langCode, $artId, $artDbKey), $skinName); $expected = ['opts' => ['pageType' => 'all_ads', 'showAds' => true], 'targeting' => ['pageName' => $artDbKey, 'pageType' => 'article', 'sevenOneMediaSub2Site' => $sevenOneMediaSub2Site, 'skin' => $skinName, 'wikiCategory' => $shortCat, 'wikiCustomKeyValues' => $customDartKvs, 'wikiDbName' => $dbName, 'wikiLanguage' => $langCode, 'wikiVertical' => $vertical], 'providers' => [], 'slots' => [], 'forcedProvider' => $expectedForcedProvider]; foreach ($expectedOpts as $var => $val) { $expected['opts'][$var] = $val; } foreach ($expectedTargeting as $var => $val) { $expected['targeting'][$var] = $val; } foreach ($expectedProviders as $var => $val) { $expected['providers'][$var] = $val; } foreach ($expectedSlots as $var => $val) { $expected['slots'][$var] = $val; } // Extra check for SevenOne Media URL if (isset($expectedProviders['sevenOneMedia'])) { $this->assertStringMatchesFormat($expectedSevenOneMediaUrlFormat, $result['providers']['sevenOneMediaCombinedUrl']); unset($result['providers']['sevenOneMediaCombinedUrl']); } // Extra check for Monetization Service if (isset($expectedProviders['monetizationService'])) { $this->assertTrue(is_array($result['providers']['monetizationServiceAds'])); $this->assertNotEmpty($result['providers']['monetizationServiceAds']); unset($result['providers']['monetizationServiceAds']); } $this->assertEquals($expected, $result); }
/** * Get ads context for Title. Return null if Ad Engine extension is not enabled * * @param Title $title Title object * @return array|null Article Ad context */ public function getAdsContext(Title $title) { global $wgEnableAdEngineExt; if (!empty($wgEnableAdEngineExt)) { $adContext = new AdEngine2ContextService(); return $adContext->getContext($title, self::MERCURY_SKIN_NAME); } return null; }