Selaa lähdekoodia

Subject model: added attr 'distinguished_name'

Fabian Peter Hammerle 8 vuotta sitten
vanhempi
commit
980dcf36b8
3 muutettua tiedostoa jossa 38 lisäystä ja 6 poistoa
  1. 14 0
      Subject.php
  2. 1 0
      migrations/CreateSubjectTable.php
  3. 23 6
      tests/SubjectTest.php

+ 14 - 0
Subject.php

@@ -9,6 +9,20 @@ class Subject extends \yii\db\ActiveRecord
         return 'identity_cert_subject';
     }
 
+    public function __construct($dn = null)
+    {
+        $this->distinguished_name = $dn;
+    }
+
+    public function rules()
+    {
+        return [
+            [['distinguished_name'], 'required'],
+            [['distinguished_name'], 'string'],
+            [['distinguished_name'], 'unique'],
+            ];
+    }
+
     // public function getIdentityId()
     // {
     //     return $this->identity_id;

+ 1 - 0
migrations/CreateSubjectTable.php

@@ -10,6 +10,7 @@ class CreateSubjectTable extends \yii\db\Migration
     {
         $this->createTable(Subject::tableName(), [
             'id' => $this->primaryKey(),
+            'distinguished_name' => $this->string()->notNull()->unique(),
         ]);
     }
 

+ 23 - 6
tests/SubjectTest.php

@@ -12,16 +12,33 @@ class SubjectTest extends TestCase
     {
         $app = $this->mockApplication();
         (new migrations\CreateSubjectTable)->up();
-        (new Subject())->save();
-        (new Subject())->save();
-        (new Subject())->save();
+        (new Subject('CN=Alice,C=AT'))->save();
+        (new Subject('CN=Alice,O=Office,C=AT'))->save();
+        (new Subject('CN=Bob,C=AT'))->save();
         $subjects = ArrayHelper::map(
             Subject::find()->all(),
             function($s) { return $s->getAttributes(); }
         );
         $this->assertEquals(3, sizeof($subjects));
-        $this->assertContains(['id' => 1], $subjects);
-        $this->assertContains(['id' => 2], $subjects);
-        $this->assertContains(['id' => 3], $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']],
+            function($a) use ($subjects) {
+                $this->assertContains($a, $subjects);
+            }
+        );
+    }
+
+    public function testDNUnique()
+    {
+        $app = $this->mockApplication();
+        (new migrations\CreateSubjectTable)->up();
+        $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->assertFalse($dup->save());
+        $this->assertEquals(1, sizeof($dup->getErrors()));
+        $this->assertEquals(1, sizeof($dup->getErrors('distinguished_name')));
     }
 }