SubjectTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace fphammerle\yii2\auth\clientcert\tests;
  3. use \fphammerle\helpers\ArrayHelper;
  4. use \fphammerle\yii2\auth\clientcert\Subject;
  5. class DummyUser implements \yii\web\IdentityInterface
  6. {
  7. public static function findIdentity($id) {}
  8. public static function findIdentityByAccessToken($token, $type = null) {}
  9. public function getId() {}
  10. public function getAuthKey() {}
  11. public function validateAuthKey($authKey) {}
  12. }
  13. class SubjectTest extends TestCase
  14. {
  15. protected $alice;
  16. protected $bob;
  17. protected function setUp()
  18. {
  19. $this->mockApplication();
  20. $this->createSubjectTable();
  21. $this->alice = new models\User('alice');
  22. $this->bob = new models\User('bob');
  23. $this->assertTrue($this->alice->save());
  24. $this->assertTrue($this->bob->save());
  25. }
  26. public function testCreateModel()
  27. {
  28. (new Subject($this->alice, 'CN=Alice,C=AT'))->save();
  29. (new Subject($this->alice, 'CN=Alice,O=Office,C=AT'))->save();
  30. (new Subject($this->bob, 'CN=Bob,C=AT'))->save();
  31. $subjects = ArrayHelper::map(
  32. Subject::find()->all(),
  33. function($s) { return $s->getAttributes(); }
  34. );
  35. $this->assertEquals(3, sizeof($subjects));
  36. ArrayHelper::map(
  37. [['id' => 1, 'identity_id' => $this->alice->id, 'distinguished_name' => 'CN=Alice,C=AT'],
  38. ['id' => 2, 'identity_id' => $this->alice->id, 'distinguished_name' => 'CN=Alice,O=Office,C=AT'],
  39. ['id' => 3, 'identity_id' => $this->bob->id, 'distinguished_name' => 'CN=Bob,C=AT']],
  40. function($a) use ($subjects) {
  41. $this->assertContains($a, $subjects);
  42. }
  43. );
  44. }
  45. public function testDNUnique()
  46. {
  47. $this->assertTrue((new Subject($this->alice, 'CN=Alice,C=AT'))->save());
  48. $this->assertTrue((new Subject($this->bob, 'CN=Bob,C=AT'))->save());
  49. $dup = new Subject($this->alice, 'CN=Alice,C=AT');
  50. $this->assertFalse($dup->save());
  51. $this->assertEquals(1, sizeof($dup->getErrors()));
  52. $this->assertEquals(1, sizeof($dup->getErrors('distinguished_name')));
  53. }
  54. public function testGetIdentity()
  55. {
  56. $s = new Subject;
  57. $this->assertNull($s->identity);
  58. $s = new Subject($this->alice, 'CN=Alice,C=AT');
  59. $this->assertEquals($this->alice->id, $s->identity_id);
  60. $this->assertInstanceOf(models\User::className(), $s->identity);
  61. $this->assertEquals($this->alice->id, $s->identity->id);
  62. $s->identity_id = $this->bob->id;
  63. $s->save();
  64. $s = Subject::findOne(['identity_id' => $this->bob->id]);
  65. $this->assertEquals($this->bob->id, $s->identity_id);
  66. $this->assertInstanceOf(models\User::className(), $s->identity);
  67. $this->assertEquals($this->bob->id, $s->identity->id);
  68. }
  69. public function testSetIdentity()
  70. {
  71. $s = new Subject($this->alice, 'CN=Alice,C=AT');
  72. $this->assertInstanceOf(models\User::className(), $s->identity);
  73. $this->assertEquals($this->alice->id, $s->identity->id);
  74. $s->identity = $this->bob;
  75. $this->assertEquals($this->bob->id, $s->identity_id);
  76. // TODO: $this->assertEquals($this->bob->id, $s->identity->id);
  77. $s->save();
  78. $s = Subject::findOne(['identity_id' => $this->bob->id]);
  79. $this->assertEquals($this->bob->id, $s->identity_id);
  80. $this->assertEquals($this->bob->id, $s->identity->id);
  81. $s->identity = null;
  82. $this->assertNull($s->identity_id);
  83. }
  84. public function testSetIdentityInvalidType()
  85. {
  86. $s = new Subject;
  87. $this->setExpectedException('\InvalidArgumentException');
  88. $s->identity = new DummyUser;
  89. }
  90. public function testConstructInvalidType()
  91. {
  92. $this->setExpectedException('\InvalidArgumentException');
  93. new Subject(new DummyUser);
  94. }
  95. public function testFindByDN()
  96. {
  97. $a1 = new Subject($this->alice, 'CN=Alice,C=AT');
  98. $a2 = new Subject($this->alice, 'CN=Alice,O=Office,C=AT');
  99. $b = new Subject($this->bob, 'CN=Bob,C=AT');
  100. $a1->save();
  101. $a2->save();
  102. $b->save();
  103. $this->assertEquals(
  104. $a1->id,
  105. Subject::findByDistinguishedName('CN=Alice,C=AT')->id
  106. );
  107. $this->assertEquals(
  108. $a2->id,
  109. Subject::findByDistinguishedName('CN=Alice,O=Office,C=AT')->id
  110. );
  111. $this->assertNull(
  112. Subject::findByDistinguishedName('CN=Bob,O=Office,C=AT')
  113. );
  114. }
  115. }