public function testResolveCategoryHierarchy() { $subject = DIWikiPage::newFromText('Foo'); $description = new ClassDescription(DIWikiPage::newFromText('Foocat', NS_CATEGORY)); $query = new Query($description); $query->setSubject($subject); $queryResult = $this->getMockBuilder('\\SMWQueryResult')->disableOriginalConstructor()->getMock(); $queryResult->expects($this->once())->method('getResults')->will($this->returnValue(array())); $queryResult->expects($this->any())->method('getQuery')->will($this->returnValue($query)); $store = $this->getMockBuilder('\\SMW\\Store')->disableOriginalConstructor()->getMockForAbstractClass(); $propertyHierarchyLookup = $this->getMockBuilder('\\SMW\\PropertyHierarchyLookup')->disableOriginalConstructor()->getMock(); $propertyHierarchyLookup->expects($this->any())->method('hasSubcategoryFor')->will($this->returnValue(true)); $propertyHierarchyLookup->expects($this->at(1))->method('findSubcategoryListFor')->with($this->equalTo(DIWikiPage::newFromText('Foocat', NS_CATEGORY)))->will($this->returnValue(array(DIWikiPage::newFromText('Subcat', NS_CATEGORY)))); $propertyHierarchyLookup->expects($this->at(3))->method('findSubcategoryListFor')->with($this->equalTo(DIWikiPage::newFromText('Subcat', NS_CATEGORY)))->will($this->returnValue(array())); $instance = new EmbeddedQueryDependencyListResolver($store, $propertyHierarchyLookup); $instance->setQueryResult($queryResult); $expected = array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('Subcat', NS_CATEGORY), DIWikiPage::newFromText('Foocat', NS_CATEGORY)); $this->assertEquals($expected, $instance->getQueryDependencySubjectList()); }
/** * This method is called from the `SMW::Store::AfterQueryResultLookupComplete` hook * to resolve and update dependencies fetched fro an embedded query and its * QueryResult object. * * @since 2.3 * * @param EmbeddedQueryDependencyListResolver $embeddedQueryDependencyListResolver */ public function addDependencyList(EmbeddedQueryDependencyListResolver $embeddedQueryDependencyListResolver) { if (!$this->isEnabled() || $embeddedQueryDependencyListResolver->getSubject() === null) { return null; } $subject = $embeddedQueryDependencyListResolver->getSubject(); $hash = $embeddedQueryDependencyListResolver->getQueryId(); $sid = $this->getIdForSubject($subject, $hash); if ($this->canSuppressUpdateOnSkewFactorFor($sid, $subject)) { return wfDebugLog('smw', __METHOD__ . " suppressed (skewed time) for SID " . $sid . "\n"); } $dependencyList = $embeddedQueryDependencyListResolver->getQueryDependencySubjectList(); if ($dependencyList === array()) { return null; } if ($sid > 0) { return $this->updateDependencyList($sid, $dependencyList); } // SID == 0 means the storage update/process has not been finalized // (new object hasn't been registered) hence an event is registered to // update the list after the update process has been completed // PHP 5.3 compatibility $embeddedQueryResultLinksUpdater = $this; EventHandler::getInstance()->addCallbackListener('deferred.embedded.query.dep.update', function () use($embeddedQueryResultLinksUpdater, $dependencyList, $subject, $hash) { wfDebugLog('smw', __METHOD__ . ' deferred.embedded.query.dep.update for ' . $hash . "\n"); $embeddedQueryResultLinksUpdater->updateDependencyList($embeddedQueryResultLinksUpdater->getIdForSubject($subject, $hash), $dependencyList); }); }