protected function setUp()
 {
     parent::setUp();
     global $wgFlowAbuseFilterGroup, $wgFlowAbuseFilterEmergencyDisableThreshold, $wgFlowAbuseFilterEmergencyDisableCount, $wgFlowAbuseFilterEmergencyDisableAge;
     // Needed because abuse filter tries to read the title out and then
     // set it back.  If we never provide one it tries to set a null title
     // and bails.
     \RequestContext::getMain()->setTitle(Title::newMainPage());
     $user = User::newFromName('UTSysop');
     $this->spamFilter = new AbuseFilter($user, $wgFlowAbuseFilterGroup);
     if (!$this->spamFilter->enabled()) {
         $this->markTestSkipped('AbuseFilter not enabled');
     }
     $this->spamFilter->setup(array('threshold' => $wgFlowAbuseFilterEmergencyDisableThreshold, 'count' => $wgFlowAbuseFilterEmergencyDisableCount, 'age' => $wgFlowAbuseFilterEmergencyDisableAge));
     foreach ($this->filters as $pattern => $action) {
         $this->createFilter($pattern, $action);
     }
 }
 /**
  * @param IContextSource $context
  * @param AbstractRevision $newRevision
  * @param AbstractRevision|null $oldRevision
  * @param Title $title
  * @return Status
  */
 public function validate(IContextSource $context, AbstractRevision $newRevision, AbstractRevision $oldRevision = null, Title $title)
 {
     $vars = \AbuseFilter::getEditVars($title);
     $vars->addHolders(\AbuseFilter::generateUserVars($this->user), \AbuseFilter::generateTitleVars($title, 'ARTICLE'));
     $vars->setVar('ACTION', $newRevision->getChangeType());
     /*
      * This should not roundtrip to Parsoid; AbuseFilter checks will be
      * performed upon submitting new content, and content is always
      * submitted in wikitext. It will only be transformed once it's being
      * saved to DB.
      */
     $vars->setLazyLoadVar('new_wikitext', 'FlowRevisionContent', array('revision' => $newRevision));
     $vars->setLazyLoadVar('new_size', 'length', array('length-var' => 'new_wikitext'));
     /*
      * This may roundtrip to Parsoid if content is stored in HTML.
      * Since the variable is lazy-loaded, it will not roundtrip unless the
      * variable is actually used.
      */
     $vars->setLazyLoadVar('old_wikitext', 'FlowRevisionContent', array('revision' => $oldRevision));
     $vars->setLazyLoadVar('old_size', 'length', array('length-var' => 'old_wikitext'));
     return \AbuseFilter::filterAction($vars, $title, $this->group);
 }