Merge "Add config for serving main Page from the domain root"
[lhc/web/wiklou.git] / tests / phpunit / includes / context / RequestContextTest.php
1 <?php
2
3 /**
4 * @group Database
5 * @group RequestContext
6 */
7 class RequestContextTest extends MediaWikiTestCase {
8
9 /**
10 * Test the relationship between title and wikipage in RequestContext
11 * @covers RequestContext::getWikiPage
12 * @covers RequestContext::getTitle
13 */
14 public function testWikiPageTitle() {
15 $context = new RequestContext();
16
17 $curTitle = Title::newFromText( "A" );
18 $context->setTitle( $curTitle );
19 $this->assertTrue( $curTitle->equals( $context->getWikiPage()->getTitle() ),
20 "When a title is first set WikiPage should be created on-demand for that title." );
21
22 $curTitle = Title::newFromText( "B" );
23 $context->setWikiPage( WikiPage::factory( $curTitle ) );
24 $this->assertTrue( $curTitle->equals( $context->getTitle() ),
25 "Title must be updated when a new WikiPage is provided." );
26
27 $curTitle = Title::newFromText( "C" );
28 $context->setTitle( $curTitle );
29 $this->assertTrue(
30 $curTitle->equals( $context->getWikiPage()->getTitle() ),
31 "When a title is updated the WikiPage should be purged "
32 . "and recreated on-demand with the new title."
33 );
34 }
35
36 /**
37 * @covers RequestContext::importScopedSession
38 */
39 public function testImportScopedSession() {
40 // Make sure session handling is started
41 if ( !MediaWiki\Session\PHPSessionHandler::isInstalled() ) {
42 MediaWiki\Session\PHPSessionHandler::install(
43 MediaWiki\Session\SessionManager::singleton()
44 );
45 }
46 $oldSessionId = session_id();
47
48 $context = RequestContext::getMain();
49
50 $oInfo = $context->exportSession();
51 $this->assertEquals( '127.0.0.1', $oInfo['ip'], "Correct initial IP address." );
52 $this->assertSame( 0, $oInfo['userId'], "Correct initial user ID." );
53 $this->assertFalse( MediaWiki\Session\SessionManager::getGlobalSession()->isPersistent(),
54 'Global session isn\'t persistent to start' );
55
56 $user = User::newFromName( 'UnitTestContextUser' );
57 $user->addToDatabase();
58
59 $sinfo = [
60 'sessionId' => 'd612ee607c87e749ef14da4983a702cd',
61 'userId' => $user->getId(),
62 'ip' => '192.0.2.0',
63 'headers' => [
64 'USER-AGENT' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0'
65 ]
66 ];
67 // importScopedSession() sets these variables
68 $this->setMwGlobals( [
69 'wgUser' => new User,
70 'wgRequest' => new FauxRequest,
71 ] );
72 $sc = RequestContext::importScopedSession( $sinfo ); // load new context
73
74 $info = $context->exportSession();
75 $this->assertEquals( $sinfo['ip'], $info['ip'], "Correct IP address." );
76 $this->assertEquals( $sinfo['headers'], $info['headers'], "Correct headers." );
77 $this->assertEquals( $sinfo['sessionId'], $info['sessionId'], "Correct session ID." );
78 $this->assertEquals( $sinfo['userId'], $info['userId'], "Correct user ID." );
79 $this->assertEquals(
80 $sinfo['ip'],
81 $context->getRequest()->getIP(),
82 "Correct context IP address."
83 );
84 $this->assertEquals(
85 $sinfo['headers'],
86 $context->getRequest()->getAllHeaders(),
87 "Correct context headers."
88 );
89 $this->assertEquals(
90 $sinfo['sessionId'],
91 MediaWiki\Session\SessionManager::getGlobalSession()->getId(),
92 "Correct context session ID."
93 );
94 if ( \MediaWiki\Session\PHPSessionHandler::isEnabled() ) {
95 $this->assertEquals( $sinfo['sessionId'], session_id(), "Correct context session ID." );
96 } else {
97 $this->assertEquals( $oldSessionId, session_id(), "Unchanged PHP session ID." );
98 }
99 $this->assertEquals( true, $context->getUser()->isLoggedIn(), "Correct context user." );
100 $this->assertEquals( $sinfo['userId'], $context->getUser()->getId(), "Correct context user ID." );
101 $this->assertEquals(
102 'UnitTestContextUser',
103 $context->getUser()->getName(),
104 "Correct context user name."
105 );
106
107 unset( $sc ); // restore previous context
108
109 $info = $context->exportSession();
110 $this->assertEquals( $oInfo['ip'], $info['ip'], "Correct restored IP address." );
111 $this->assertEquals( $oInfo['headers'], $info['headers'], "Correct restored headers." );
112 $this->assertEquals( $oInfo['sessionId'], $info['sessionId'], "Correct restored session ID." );
113 $this->assertEquals( $oInfo['userId'], $info['userId'], "Correct restored user ID." );
114 $this->assertFalse( MediaWiki\Session\SessionManager::getGlobalSession()->isPersistent(),
115 'Global session isn\'t persistent after restoring the context' );
116 }
117 }