MobileComponentTest.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. namespace Tools\Test\TestCase\Controller\Component;
  3. use Cake\Core\Configure;
  4. use Cake\Event\Event;
  5. use Cake\Network\Request;
  6. use Detection\MobileDetect;
  7. use Tools\Controller\Controller;
  8. use Tools\TestSuite\TestCase;
  9. /**
  10. * Test MobileComponent
  11. */
  12. class MobileComponentTest extends TestCase {
  13. /**
  14. * @var array
  15. */
  16. public $fixtures = ['core.sessions'];
  17. /**
  18. * SetUp method
  19. *
  20. * @return void
  21. */
  22. public function setUp() {
  23. parent::setUp();
  24. Request::addDetector('mobile', function ($request) {
  25. $detector = new MobileDetect();
  26. return $detector->isMobile();
  27. });
  28. Request::addDetector('tablet', function ($request) {
  29. $detector = new MobileDetect();
  30. return $detector->isTablet();
  31. });
  32. $this->event = new Event('Controller.beforeFilter');
  33. $this->Controller = new MobileComponentTestController(new Request());
  34. //$this->Controller->constructClasses();
  35. $this->Controller->request->session()->delete('User');
  36. Configure::delete('User');
  37. }
  38. /**
  39. * Tear-down method. Resets environment state.
  40. *
  41. * @return void
  42. */
  43. public function tearDown() {
  44. parent::tearDown();
  45. unset($this->Controller->Mobile);
  46. unset($this->Controller);
  47. }
  48. public function testDetect() {
  49. $is = $this->Controller->Mobile->detect();
  50. $this->assertFalse($is);
  51. $this->Controller->request->env('HTTP_ACCEPT', 'text/vnd.wap.wml,text/html,text/plain,image/png,*/*');
  52. $is = $this->Controller->Mobile->detect();
  53. $this->assertTrue($is);
  54. }
  55. public function testMobileNotMobile() {
  56. $this->Controller->Mobile->config('on', 'initialize');
  57. $this->Controller->Mobile->initialize([]);
  58. $this->assertFalse($this->Controller->Mobile->isMobile);
  59. }
  60. public function testMobileForceActivated() {
  61. $this->Controller->request->query['mobile'] = 1;
  62. $this->Controller->Mobile->beforeFilter($this->event);
  63. $session = $this->Controller->request->session()->read('User');
  64. $this->assertSame(['mobile' => 1], $session);
  65. $this->Controller->Mobile->setMobile();
  66. $this->assertTrue($this->Controller->Mobile->setMobile);
  67. $configure = Configure::read('User');
  68. $this->assertSame(['isMobile' => 0, 'setMobile' => 1], $configure);
  69. $this->assertEquals(['desktopUrl' => '/?mobile=0'], $this->Controller->viewVars);
  70. }
  71. public function testMobileForceDeactivated() {
  72. $this->Controller->request->query['mobile'] = 0;
  73. $this->Controller->Mobile->beforeFilter($this->event);
  74. $session = $this->Controller->request->session()->read('User');
  75. $this->assertSame(['mobile' => 0], $session);
  76. $this->Controller->Mobile->setMobile();
  77. $configure = Configure::read('User');
  78. $this->assertSame(['isMobile' => 0, 'setMobile' => 0], $configure);
  79. $this->assertEquals(['mobileUrl' => '/?mobile=1'], $this->Controller->viewVars);
  80. }
  81. public function testMobileFakeMobile() {
  82. $_SERVER['HTTP_USER_AGENT'] = 'Some Android device';
  83. $this->Controller->Mobile->beforeFilter($this->event);
  84. $this->assertTrue($this->Controller->Mobile->isMobile);
  85. $this->Controller->Mobile->setMobile();
  86. $configure = Configure::read('User');
  87. $this->assertSame(['isMobile' => 1, 'setMobile' => 1], $configure);
  88. }
  89. public function testMobileFakeMobileForceDeactivated() {
  90. $this->Controller->request->query['mobile'] = 0;
  91. $_SERVER['HTTP_USER_AGENT'] = 'Some Android device';
  92. $this->Controller->Mobile->beforeFilter($this->event);
  93. $session = $this->Controller->request->session()->read('User');
  94. $this->assertSame(['mobile' => 0], $session);
  95. $this->assertTrue($this->Controller->Mobile->isMobile);
  96. $this->Controller->Mobile->setMobile();
  97. $this->assertFalse($this->Controller->Mobile->setMobile);
  98. $configure = Configure::read('User');
  99. $this->assertSame(['isMobile' => 1, 'setMobile' => 0], $configure);
  100. }
  101. public function testMobileFakeMobileAuto() {
  102. $this->Controller->Mobile->config('auto', true);
  103. $_SERVER['HTTP_USER_AGENT'] = 'Some Android device';
  104. $this->Controller->Mobile->beforeFilter($this->event);
  105. $this->assertTrue($this->Controller->Mobile->isMobile);
  106. $configure = Configure::read('User');
  107. $this->assertSame(['isMobile' => 1, 'setMobile' => 1], $configure);
  108. $this->assertTrue($this->Controller->Mobile->setMobile);
  109. }
  110. public function testMobileVendorEngineCake() {
  111. $this->Controller->Mobile->config('engine', '');
  112. $_SERVER['HTTP_USER_AGENT'] = 'Some Android device';
  113. $this->Controller->Mobile->beforeFilter($this->event);
  114. $session = $this->Controller->request->session()->read('User');
  115. $this->assertTrue($this->Controller->Mobile->isMobile);
  116. }
  117. public function testMobileCustomMobileInvalid() {
  118. $_SERVER['HTTP_USER_AGENT'] = 'Some Foo device';
  119. $this->Controller->Mobile->beforeFilter($this->event);
  120. $this->assertFalse($this->Controller->Mobile->isMobile);
  121. }
  122. public function testMobileCustomMobile() {
  123. $_SERVER['HTTP_USER_AGENT'] = 'Some Android device';
  124. $this->Controller->Mobile->beforeFilter($this->event);
  125. $this->assertTrue($this->Controller->Mobile->isMobile);
  126. }
  127. public function testMobileCustomMobileTablet() {
  128. $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25';
  129. $this->Controller->Mobile->beforeFilter($this->event);
  130. $this->assertTrue($this->Controller->Mobile->isMobile);
  131. }
  132. public function testMobileEngineClosure() {
  133. $closure = function() {
  134. return $_SERVER['HTTP_USER_AGENT'] === 'Foo';
  135. };
  136. $this->Controller->Mobile->config('engine', $closure);
  137. $_SERVER['HTTP_USER_AGENT'] = 'Foo';
  138. $this->Controller->Mobile->beforeFilter($this->event);
  139. $this->assertTrue($this->Controller->Mobile->isMobile);
  140. }
  141. }
  142. class MobileComponentTestController extends Controller {
  143. /**
  144. * Components property
  145. *
  146. * @var array
  147. */
  148. public $components = ['RequestHandler', 'Tools.Mobile'];
  149. }