/** * @dataProvider provideMutateParserOutput */ public function testMutateParserOutput($references, $expectedItems) { list($workflow, $revision, $title) = $this->getBlandTestObjects(); /* * Because the data provider is static, we can't access $this->workflow * in there. Once of the things being tested is a subpage link. * Thus, we would have to provide the correct namespace & title for * $this->workflow->getArticleTitle(), under which the subpage will be * created. * Let's work around this by overwriting $workflow->title to a "known" * value, so that we can hardcode that into the expected return value in * the static provider. */ $title = static::getTestTitle(); $reflectionWorkflow = new \ReflectionObject($workflow); $reflectionProperty = $reflectionWorkflow->getProperty('title'); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($workflow, $title); $references = $this->expandReferences($workflow, $revision, $references); $parserOutput = new \ParserOutput(); // Clear the LinksUpdate to allow clean testing foreach (array_keys($expectedItems) as $fieldName) { $parserOutput->{$fieldName} = array(); } $this->updater->mutateParserOutput($title, $parserOutput, $references); foreach ($expectedItems as $method => $content) { $this->assertEquals($content, $parserOutput->{$method}(), $method); } }
public function onAfterInsert($revision, array $new, array $metadata) { if (!isset($metadata['workflow'])) { return; } if (!$revision instanceof AbstractRevision) { throw new InvalidDataException('ReferenceRecorder can only attach to AbstractRevision storage'); } $workflow = $metadata['workflow']; if ($revision instanceof PostRevision && $revision->isTopicTitle()) { list($added, $removed) = $this->calculateChangesFromTopic($workflow, $revision); } else { list($added, $removed) = $this->calculateChangesFromExisting($workflow, $revision); } $this->storage->multiPut($added); $this->storage->multiRemove($removed); // Data updates $this->linksTableUpdater->doUpdate($workflow); }