/** * @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__); }