/**
  * @dataProvider conditions
  */
 public function testAddItemToCache($articleExist, $articlesList, $cachedList, $expectedResult, $brokenCache = false)
 {
     // Game
     $articlesIdentifiers = array();
     foreach ($articlesList as $art) {
         $articlesIdentifiers[] = ScavengerHunt::makeIdentifier(self::LANDING_WIKI_ID, $art);
     }
     $mockedGame = $this->getMock('ScavengerHuntGame', array('getArticleIdentifier'), array($this->app));
     $mockedGame->expects($this->any())->method('getArticleIdentifier')->will($this->returnValue($articlesIdentifiers));
     $this->mockClass('ScavengerHuntGame', $mockedGame);
     $game = $this->getFakeGame();
     // Hunt
     $scavengerHunt = $this->getMock('ScavengerHunt', array('getDataFromCache', 'saveDataToCache'));
     $scavengerHunt->setGame($articleExist ? $game : null);
     $cachedIdentifiers = array();
     foreach ($cachedList as $art) {
         $cachedIdentifiers[] = ScavengerHunt::makeIdentifier(self::LANDING_WIKI_ID, $art);
     }
     $scavengerHunt->expects($this->any())->method('saveDataToCache')->will($this->returnValue(true));
     $scavengerHunt->expects($this->any())->method('getDataFromCache')->will($this->returnValue(array('gameId' => $scavengerHunt->getHuntId(), ScavengerHunt::VISITED_ART_KEY => $brokenCache ? 'broken' : $cachedIdentifiers)));
     // User
     $mockedUser = $this->getMock('User', array('isAnon'));
     $mockedUser->expects($this->any())->method('isAnon')->will($this->returnValue(self::MOCK_USER_NAME));
     $this->mockClass('User', $mockedUser);
     $_COOKIE[$scavengerHunt->getHuntIdKey()] = $articleExist ? self::MOCK_GAME_ID : 0;
     $result = $scavengerHunt->addItemToCache(self::MOCK_TEXT, self::LANDING_WIKI_ID);
     $this->assertEquals(empty($result), empty($expectedResult));
 }
 /**
  * @dataProvider conditions
  */
 public function testGetFoundIndexes($gameExists, $articlesList, $foundList, $expectedResult, $brokenCache = false)
 {
     // mocking game object
     $articlesIdentifiers = array();
     foreach ($articlesList as $art) {
         $articlesIdentifiers[] = ScavengerHunt::makeIdentifier(self::LANDING_WIKI_ID, $art);
     }
     $mockedGame = $this->getMock('ScavengerHuntGame', array('getArticleIdentifier'), array($this->app));
     $mockedGame->expects($this->any())->method('getArticleIdentifier')->will($this->returnValue($articlesIdentifiers));
     $this->mockClass('ScavengerHuntGame', $mockedGame);
     $game = $this->getFakeGame();
     // mocking scavenger hunt and passing game to the hunt
     $scavengerHunt = $this->getMock('ScavengerHunt', array('getDataFromCache'));
     $scavengerHunt->setGame($gameExists ? $game : null);
     $cachedIdentifiers = array();
     foreach ($foundList as $art) {
         $cachedIdentifiers[] = ScavengerHunt::makeIdentifier(self::LANDING_WIKI_ID, $art);
     }
     $scavengerHunt->expects($this->any())->method('getDataFromCache')->will($this->returnValue(array('gameId' => $scavengerHunt->getHuntId(), ScavengerHunt::VISITED_ART_KEY => $brokenCache ? 'broken' : $cachedIdentifiers)));
     // mocking user
     $mockedUser = $this->getMock('User', array('isAnon'));
     $mockedUser->expects($this->any())->method('isAnon')->will($this->returnValue(self::MOCK_USER_NAME));
     $this->mockClass('User', $mockedUser);
     // setting cookie values
     $_COOKIE[$scavengerHunt->getHuntIdKey()] = $gameExists ? self::MOCK_GAME_ID : 0;
     // test and assertions
     $result = $scavengerHunt->getFoundIndexes();
     $this->assertEquals($expectedResult, $result);
 }
 /**
  * @dataProvider conditions
  */
 public function testGameNotLoaded($isUserAnon, $cookieValue)
 {
     // starting conditions
     $scavengerHunt = new ScavengerHunt();
     $scavengerHunt->setGame(null);
     $mockedUser = $this->getMock('User', array('isAnon', 'getName'));
     $mockedUser->expects($this->any())->method('isAnon')->will($this->returnValue(self::MOCK_USER_NAME));
     $mockedUser->expects($this->any())->method('getName')->will($this->returnValue(self::MOCK_USER_NAME));
     $this->mockClass('User', $mockedUser);
     $_COOKIE[$scavengerHunt->getHuntIdKey()] = $cookieValue;
     // mocks
     $oFakeGame = $this->getFakeGame();
     // test
     $oFinalGame = $scavengerHunt->getActiveGame();
     if (empty($cookieValue)) {
         $this->assertEmpty($oFinalGame);
     } else {
         $this->assertNotEmpty($oFinalGame);
         $oFakeGameID = $oFinalGame->getId();
         $this->assertEquals($oFakeGameID, $oFinalGame->getId());
     }
 }
 public function getArticleIdentifier()
 {
     $articleIdentifiers = array();
     foreach ($this->articles as $article) {
         $articleIdentifiers[] = ScavengerHunt::makeIdentifier($article->getWikiId(), $article->getArticleName());
     }
     return $articleIdentifiers;
 }
 private function getFinalModalArray()
 {
     $aReturn = array();
     $game = $this->getActiveGame();
     if ($this->isGameCompleated()) {
         $template = WF::build('EasyTemplate', array(dirname(__FILE__) . '/templates/'));
         /** @var $template EasyTemplate  */
         $template->set_vars(array('game' => $game));
         $aReturn['text'] = $template->render('modal-form');
         $aReturn['title'] = $game->getEntryFormTitle();
         $aReturn['image'] = ScavengerHunt::formatSpriteForJS($game->getFinishPopupSprite());
     }
     return $aReturn;
 }
 /**
  * @return array|bool|Mixed
  */
 public function getJSParamsForCurrent()
 {
     $cityId = $this->app->wg->cityId;
     $articleName = $this->app->wg->title->getPartialURL();
     if (!$this->isPagePartOfAnyHunt($cityId, $articleName)) {
         return false;
     }
     $key = wfSharedMemcKey('ScavengerHuntIndexer', $cityId, md5($articleName));
     $value = $this->getCache()->get($key);
     if (empty($value)) {
         self::log('performance', __METHOD__);
         $enabledGames = $this->getEnabledGames();
         $value = array();
         foreach ($enabledGames as $game) {
             $template = WF::build('EasyTemplate', array(dirname(__FILE__) . '/../templates/'));
             /* @var $template EasyTemplate */
             $template->set_vars(array('game' => $game));
             if ($game->getLandingArticleName() == $articleName) {
                 $value['wgScavengerHuntStart'][] = (int) $game->getId();
                 $value['wgScavengerHuntStartMsg'][] = $game->getLandingButtonText();
                 $value['wgScavengerHuntStartPosition'][] = array('X' => $game->getLandingButtonX(), 'Y' => $game->getLandingButtonY());
                 $value['wgScavengerHuntStartClueTitle'][] = $game->getStartingClueTitle();
                 $value['wgScavengerHuntSpriteImg'][] = $game->getSpriteImg();
                 $value['wgScavengerHuntSprite'][] = ScavengerHunt::formatSpriteForJS(array('sprite' => $game->getStartPopupSprite()), 'sprite');
                 $value['wgScavengerHuntStartClueHtml'][] = $template->render('modal-starting');
             }
         }
         $value['wgCookieDomain'] = $this->app->wg->cookieDomain;
         $this->getCache()->set($key, $value, self::CACHE_TTL);
     } else {
         self::log('performance(cache)', __METHOD__);
     }
     return $value;
 }
 public function getCurrentUserGameData()
 {
     $helper = new ScavengerHunt();
     $this->setVal('key', $helper->getCacheKey());
     $wgMemc = $this->app->getGlobal('wgMemc');
     $memcData = $wgMemc->get($helper->getCacheKey());
     $this->setVal('val', $memcData);
 }