/**
  * @dataProvider filterByArticleDataProvider
  */
 public function testFilterByArticle($testDescription, $input, $expected)
 {
     $dbMock = $this->getMock('StdClass', array('selectSQLText', 'query', 'addQuotes'));
     $revisionService = new RevisionService($dbMock, 0);
     $result = $revisionService->filterByArticle($input);
     $this->assertEquals($expected, $result, $testDescription);
 }
 public function getNew()
 {
     wfProfileIn(__METHOD__);
     $ns = $this->request->getArray(self::PARAMETER_NAMESPACES);
     $limit = $this->request->getInt(self::PARAMETER_LIMIT, self::DEFAULT_NEW_ARTICLES_LIMIT);
     $minArticleQuality = $this->request->getInt(self::PARAM_ARTICLE_QUALITY);
     if ($limit < 1) {
         throw new InvalidParameterApiException(self::PARAMETER_LIMIT);
     }
     if ($limit > self::MAX_NEW_ARTICLES_LIMIT) {
         $limit = self::MAX_NEW_ARTICLES_LIMIT;
     }
     if (empty($ns)) {
         $ns = [self::DEFAULT_SEARCH_NAMESPACE];
     } else {
         $ns = self::processNamespaces($ns, __METHOD__);
         sort($ns);
         $ns = array_unique($ns);
     }
     $key = self::getCacheKey(self::NEW_ARTICLES_CACHE_ID, '', [implode('-', $ns), $minArticleQuality, $limit]);
     $results = $this->wg->Memc->get($key);
     if ($results === false) {
         $solrResults = $this->getNewArticlesFromSolr($ns, $limit, $minArticleQuality);
         if (empty($solrResults)) {
             $results = [];
         } else {
             $articles = array_keys($solrResults);
             $articles = array_slice($articles, 0, $limit);
             $rev = new RevisionService();
             $revisions = $rev->getFirstRevisionByArticleId($articles);
             $creators = $this->getUserDataForArticles($articles, $revisions);
             $thumbs = $this->getArticlesThumbnails($articles);
             $results = [];
             foreach ($solrResults as $id => $item) {
                 $title = Title::newFromText($item['title']);
                 $item['title'] = $title->getText();
                 $item['url'] = $title->getLocalURL();
                 $item['creator'] = $creators[$id];
                 $item['creation_date'] = isset($revisions[$id]) ? $revisions[$id]['rev_timestamp'] : null;
                 $item['abstract'] = wfShortenText($item['abstract'], self::DEFAULT_ABSTRACT_LENGTH, true);
                 $item = array_merge($item, $thumbs[$id]);
                 $results[] = $item;
             }
             $this->wg->Memc->set($key, $results, self::CLIENT_CACHE_VALIDITY);
         }
     }
     if (empty($results)) {
         throw new NotFoundApiException('No members');
     }
     $this->setResponseData(['items' => $results, 'basepath' => $this->wg->Server], ['imgFields' => 'thumbnail', 'urlFields' => ['thumbnail', 'url', 'avatar']], self::NEW_ARTICLES_VARNISH_CACHE_EXPIRATION);
     wfProfileOut(__METHOD__);
 }