public function testSortByOption()
 {
     $user = User::newFromId(1);
     $user->setOption('flow-topiclist-sortby', '');
     // reset flow state, so everything ($container['permissions'])
     // uses this particular $user
     \FlowHooks::resetFlowExtension();
     Container::reset();
     $container = Container::getContainer();
     $container['user'] = $user;
     $ctx = $this->getMock('IContextSource');
     $ctx->expects($this->any())->method('getUser')->will($this->returnValue($user));
     $workflow = Workflow::create('discussion', Title::newFromText('Talk:Flow_QA'));
     $block = new TopicListBlock($workflow, Container::get('storage'));
     $block->init($ctx, 'view');
     $res = $block->renderApi(array());
     $this->assertEquals('newest', $res['sortby'], 'With no sortby defaults to newest');
     $res = $block->renderApi(array('sortby' => 'foo'));
     $this->assertEquals('newest', $res['sortby'], 'With invalid sortby defaults to newest');
     $res = $block->renderApi(array('sortby' => 'updated'));
     $this->assertEquals('updated', $res['sortby'], 'With sortby updated output changes to updated');
     $res = $block->renderApi(array());
     $this->assertEquals('newest', $res['sortby'], 'Sort still defaults to newest');
     $res = $block->renderApi(array('sortby' => 'updated', 'savesortby' => '1'));
     $this->assertEquals('updated', $res['sortby'], 'Request saving sortby option');
     $res = $block->renderApi(array());
     $this->assertEquals('updated', $res['sortby'], 'Default sortby now changed to updated');
     $res = $block->renderApi(array('sortby' => ''));
     $this->assertEquals('updated', $res['sortby'], 'Default sortby with blank sortby still uses user default');
 }
 public function setUp()
 {
     parent::setUp();
     // reset flow state, so everything ($container['permissions'])
     // uses this particular $user
     \FlowHooks::resetFlowExtension();
     Container::reset();
     $container = Container::getContainer();
     $container['user'] = User::newFromName('127.0.0.1', false);
 }
 /**
  * @dataProvider onIRCLineUrlProvider
  */
 public function testOnIRCLineUrl($message, $metadataGen, $expectedQuery)
 {
     $user = User::newFromName('127.0.0.1', false);
     // reset flow state, so everything ($container['permissions'])
     // uses this particular $user
     \FlowHooks::resetFlowExtension();
     Container::reset();
     $container = Container::getContainer();
     $container['user'] = $user;
     $rc = new RecentChange();
     $rc->mAttribs = array('rc_namespace' => 0, 'rc_title' => 'Main Page', 'rc_source' => RecentChangesListener::SRC_FLOW);
     $metadata = $metadataGen($user);
     Container::get('formatter.irclineurl')->associate($rc, $metadata);
     $url = 'unset';
     $query = 'unset';
     $this->assertTrue(FlowHooks::onIRCLineURL($url, $query, $rc));
     $expectedQuery['title'] = $metadata['workflow']->getArticleTitle()->getPrefixedDBkey();
     $parts = parse_url($url);
     $this->assertArrayHasKey('query', $parts, $url);
     parse_str($parts['query'], $queryParts);
     foreach ($expectedQuery as $key => $value) {
         $this->assertEquals($value, $queryParts[$key], "Query part {$key}");
     }
     $this->assertEquals('', $query, $message);
 }