Browse Source

Subject model: added attr 'identity_id'

Fabian Peter Hammerle 8 years ago
parent
commit
615659bf9d
4 changed files with 63 additions and 39 deletions
  1. 4 6
      Subject.php
  2. 6 0
      migrations/CreateSubjectTable.php
  3. 36 0
      tests/SubjectStaticTest.php
  4. 17 33
      tests/SubjectTest.php

+ 4 - 6
Subject.php

@@ -9,25 +9,23 @@ class Subject extends \yii\db\ActiveRecord
         return 'identity_cert_subject';
     }
 
-    public function __construct($dn = null)
+    public function __construct($identity_id = null, $dn = null)
     {
+        $this->identity_id = $identity_id;
         $this->distinguished_name = $dn;
     }
 
     public function rules()
     {
         return [
+            [['distinguished_name', 'identity_id'], 'required'],
             [['distinguished_name'], 'required'],
             [['distinguished_name'], 'string'],
             [['distinguished_name'], 'unique'],
+            [['identity_id'], self::getIdentityIdSchema()->type],
             ];
     }
 
-    // public function getIdentityId()
-    // {
-    //     return $this->identity_id;
-    // }
-
     public static function getIdentityClass()
     {
         return \Yii::$app->user->identityClass;

+ 6 - 0
migrations/CreateSubjectTable.php

@@ -8,8 +8,14 @@ class CreateSubjectTable extends \yii\db\Migration
 {
     public function safeUp()
     {
+        $identity_id_schema = Subject::getIdentityIdSchema();
+        $identity_id_builder = $this->db->schema->createColumnSchemaBuilder(
+            $identity_id_schema->dbType,
+            $identity_id_schema->size
+        );
         $this->createTable(Subject::tableName(), [
             'id' => $this->primaryKey(),
+            'identity_id' => $identity_id_builder->notNull(),
             'distinguished_name' => $this->string()->notNull()->unique(),
         ]);
     }

+ 36 - 0
tests/SubjectStaticTest.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace fphammerle\yii2\auth\clientcert\tests;
+
+use \fphammerle\yii2\auth\clientcert\Subject;
+
+class SubjectStaticTest extends TestCase
+{
+    protected function setUp()
+    {
+        $this->mockApplication();
+    }
+    public function testGetIdentityClass()
+    {
+        $this->assertEquals(
+            'fphammerle\yii2\auth\clientcert\tests\models\User',
+            Subject::getIdentityClass()
+        );
+    }
+
+    public function testGetIdentityTableSchema()
+    {
+        $this->assertEquals(
+            'user',
+            Subject::getIdentityTableSchema()->name
+        );
+    }
+
+    public function testGetIdentityIdSchema()
+    {
+        $schema = Subject::getIdentityIdSchema();
+        $this->assertEquals('id', $schema->name);
+        $this->assertEquals('integer', $schema->type);
+        $this->assertTrue($schema->isPrimaryKey);
+    }
+}

+ 17 - 33
tests/SubjectTest.php

@@ -8,26 +8,34 @@ use \fphammerle\yii2\auth\clientcert\migrations;
 
 class SubjectTest extends TestCase
 {
+    protected $alice;
+    protected $bob;
+
     protected function setUp()
     {
         $this->mockApplication();
         (new migrations\CreateSubjectTable)->up();
+
+        $this->alice = new models\User('alice');
+        $this->bob = new models\User('bob');
+        $this->assertTrue($this->alice->save());
+        $this->assertTrue($this->bob->save());
     }
 
     public function testCreateModel()
     {
-        (new Subject('CN=Alice,C=AT'))->save();
-        (new Subject('CN=Alice,O=Office,C=AT'))->save();
-        (new Subject('CN=Bob,C=AT'))->save();
+        (new Subject($this->alice->id, 'CN=Alice,C=AT'))->save();
+        (new Subject($this->alice->id, 'CN=Alice,O=Office,C=AT'))->save();
+        (new Subject($this->bob->id, 'CN=Bob,C=AT'))->save();
         $subjects = ArrayHelper::map(
             Subject::find()->all(),
             function($s) { return $s->getAttributes(); }
         );
         $this->assertEquals(3, sizeof($subjects));
         ArrayHelper::map(
-            [['id' => 1, 'distinguished_name' => 'CN=Alice,C=AT'],
-             ['id' => 2, 'distinguished_name' => 'CN=Alice,O=Office,C=AT'],
-             ['id' => 3, 'distinguished_name' => 'CN=Bob,C=AT']],
+            [['id' => 1, 'identity_id' => $this->alice->id, 'distinguished_name' => 'CN=Alice,C=AT'],
+             ['id' => 2, 'identity_id' => $this->alice->id, 'distinguished_name' => 'CN=Alice,O=Office,C=AT'],
+             ['id' => 3, 'identity_id' => $this->bob->id, 'distinguished_name' => 'CN=Bob,C=AT']],
             function($a) use ($subjects) {
                 $this->assertContains($a, $subjects);
             }
@@ -36,35 +44,11 @@ class SubjectTest extends TestCase
 
     public function testDNUnique()
     {
-        $this->assertTrue((new Subject('CN=Alice,C=AT'))->save());
-        $this->assertTrue((new Subject('CN=Bob,C=AT'))->save());
-        $dup = new Subject('CN=Alice,C=AT');
+        $this->assertTrue((new Subject($this->alice->id, 'CN=Alice,C=AT'))->save());
+        $this->assertTrue((new Subject($this->bob->id, 'CN=Bob,C=AT'))->save());
+        $dup = new Subject($this->alice->id, 'CN=Alice,C=AT');
         $this->assertFalse($dup->save());
         $this->assertEquals(1, sizeof($dup->getErrors()));
         $this->assertEquals(1, sizeof($dup->getErrors('distinguished_name')));
     }
-
-    public function testGetIdentityClass()
-    {
-        $this->assertEquals(
-            'fphammerle\yii2\auth\clientcert\tests\models\User',
-            Subject::getIdentityClass()
-        );
-    }
-
-    public function testGetIdentityTableSchema()
-    {
-        $this->assertEquals(
-            'user',
-            Subject::getIdentityTableSchema()->name
-        );
-    }
-
-    public function testGetIdentityIdSchema()
-    {
-        $schema = Subject::getIdentityIdSchema();
-        $this->assertEquals('id', $schema->name);
-        $this->assertEquals('integer', $schema->type);
-        $this->assertTrue($schema->isPrimaryKey);
-    }
 }