RequestContextTest.php 4.2 KB

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