/**
  * 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);
 }
Esempio n. 2
0
 /**
  * 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;
 }