MultiColumnAuthenticateTest.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace Tools\Test\TestCase\Auth;
  3. use Cake\Http\ServerRequest;
  4. use Cake\I18n\Time;
  5. use Cake\TestSuite\TestCase;
  6. use Tools\Auth\MultiColumnAuthenticate;
  7. class MultiColumnAuthenticateTest extends TestCase {
  8. /**
  9. * @var array
  10. */
  11. protected $fixtures = [
  12. 'plugin.Tools.MultiColumnUsers',
  13. ];
  14. /**
  15. * @var \Tools\Auth\MultiColumnAuthenticate
  16. */
  17. protected $auth;
  18. /**
  19. * @var \Cake\Http\Response
  20. */
  21. protected $response;
  22. /**
  23. * @var \Cake\Controller\ComponentRegistry
  24. */
  25. protected $registry;
  26. /**
  27. * @return void
  28. */
  29. public function setUp(): void {
  30. parent::setUp();
  31. $this->registry = $this->getMockBuilder('Cake\Controller\ComponentRegistry')->getMock();
  32. $this->auth = new MultiColumnAuthenticate($this->registry, [
  33. 'fields' => ['username' => 'user_name', 'password' => 'password'],
  34. 'userModel' => 'MultiColumnUsers',
  35. 'columns' => ['user_name', 'email'],
  36. ]);
  37. $password = password_hash('password', PASSWORD_DEFAULT);
  38. $MultiColumnUsers = $this->getTableLocator()->get('MultiColumnUsers');
  39. $MultiColumnUsers->updateAll(['password' => $password], []);
  40. $this->response = $this->getMockBuilder('Cake\Http\Response')->getMock();
  41. }
  42. /**
  43. * @return void
  44. */
  45. public function testAuthenticateEmailOrUsername() {
  46. $request = new ServerRequest(['url' => 'posts/index']);
  47. $expected = [
  48. 'id' => 1,
  49. 'user_name' => 'mariano',
  50. 'email' => 'mariano@example.com',
  51. 'token' => '12345',
  52. 'created' => new Time('2007-03-17 01:16:23'),
  53. 'updated' => new Time('2007-03-17 01:18:31'),
  54. ];
  55. $request = $request->withData('user_name', 'mariano')->withData('password', 'password');
  56. $result = $this->auth->authenticate($request, $this->response);
  57. $this->assertEquals($expected, $result);
  58. $request = $request->withData('user_name', 'mariano@example.com')->withData('password', 'password');
  59. $result = $this->auth->authenticate($request, $this->response);
  60. $this->assertEquals($expected, $result);
  61. }
  62. /**
  63. * @return void
  64. */
  65. public function testAuthenticateNoUsername() {
  66. $request = new ServerRequest(['url' => 'posts/index']);
  67. $request = $request->withData('password', 'foobar');
  68. $this->assertFalse($this->auth->authenticate($request, $this->response));
  69. }
  70. /**
  71. * @return void
  72. */
  73. public function testAuthenticateNoPassword() {
  74. $request = new ServerRequest(['url' => 'posts/index']);
  75. $request = $request->withData('user_name', 'mariano');
  76. $this->assertFalse($this->auth->authenticate($request, $this->response));
  77. $request = $request->withData('user_name', 'mariano@example.com');
  78. $this->assertFalse($this->auth->authenticate($request, $this->response));
  79. }
  80. /**
  81. * @return void
  82. */
  83. public function testAuthenticateInjection() {
  84. $request = new ServerRequest(['url' => 'posts/index']);
  85. $request = $request->withData('user_name', '> 1')->withData('password', "' OR 1 = 1");
  86. $this->assertFalse($this->auth->authenticate($request, $this->response));
  87. }
  88. /**
  89. * test scope failure.
  90. *
  91. * @return void
  92. */
  93. public function testAuthenticateScopeFail() {
  94. $this->auth->setConfig('scope', ['user_name' => 'nate']);
  95. $request = new ServerRequest(['url' => 'posts/index']);
  96. $request = $request->withData('user_name', 'mariano')->withData('password', 'password');
  97. $this->assertFalse($this->auth->authenticate($request, $this->response));
  98. }
  99. }