認証ユニットテスト

諏訪子 <suwako@076.moe>、2025-12-22 20:04
コミット 3a7bbb635a386b183b8190df1cd6c5e92abe59d9 ・親 e648d83 ・ファイルを見る

2個のファイル、+227 -0

@@ -0,0 +1,223 @@
1+<?php
2+namespace Site\Test;
3+
4+require_once __DIR__.'/../../../autoload.php';
5+
6+use Site\Lib\Tester;
7+use Site\Lib\Auth;
8+
9+$test = new Tester([
10+ 'colorOutput' => true,
11+ 'verboseOutput' => true
12+]);
13+
14+$test->describe('ユーザー登録', function($test): void {
15+ $test->it('アカウントを作成出来るはず', function($test): void {
16+ $user = "admin1234";
17+ $pass = "testTEST1234!#$%@[]:;";
18+ $passVerify = "testTEST1234!#$%@[]:;";
19+ $email = "test@076.co.jp";
20+
21+ $auth = new Auth();
22+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
23+
24+ $expect = true;
25+
26+ $test->assertNotNull($res);
27+ $test->assertEquals($res->isSuccess, $expect);
28+ });
29+
30+ $test->it('空フィールドでアカウントを作成出来ないはず', function($test): void {
31+ $user = "";
32+ $pass = "testTEST1234!#$%@[]:;";
33+ $passVerify = "testTEST1234!#$%@[]:;";
34+ $email = "test@076.ne.jp";
35+
36+ $auth = new Auth();
37+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
38+
39+ $expect = 'エラー:ユーザー名をご入力下さい。'.'<br />';
40+
41+ $test->assertNotNull($res);
42+ $test->assertEquals($res->message, $expect);
43+
44+ $user = "admin5678";
45+ $pass = "";
46+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
47+
48+ $expect = 'エラー:パスワードをご入力下さい。'.'<br />';
49+
50+ $test->assertNotNull($res);
51+ $test->assertEquals($res->message, $expect);
52+
53+ $pass = "testTEST1234!#$%@[]:;";
54+ $email = "";
55+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
56+
57+ $expect = 'エラー:メールアドレスをご入力下さい。'.'<br />';
58+
59+ $test->assertNotNull($res);
60+ $test->assertEquals($res->message, $expect);
61+ });
62+
63+ $test->it('既にユーザー名やメールアドレスが存在するアカウントを作成出来ないはず', function($test): void {
64+ $user = "admin1234";
65+ $pass = "testTEST1234!#$%@[]:;";
66+ $passVerify = "testTEST1234!#$%@[]:;";
67+ $email = "test@076.ne.jp";
68+
69+ $auth = new Auth();
70+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
71+
72+ $expect = 'ユーザー「admin1234」は既に存在します。'.'<br />';
73+
74+ $test->assertNotNull($res);
75+ $test->assertEquals($res->message, $expect);
76+
77+ $user = "admin5678";
78+ $email = "test@076.co.jp";
79+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
80+
81+ $expect = 'ユーザー「test@076.co.jp」は既に存在します。'.'<br />';
82+
83+ $test->assertNotNull($res);
84+ $test->assertEquals($res->message, $expect);
85+ });
86+
87+ $test->it('一致しない、短い、又は不安なパスワードでアカウントを作成出来ないはず', function($test): void {
88+ $user = "admin5678";
89+ $pass = "testtest1234!#$%@[]:;";
90+ $passVerify = "testTEST1234!#$%@[]:;";
91+ $email = "test@076.ne.jp";
92+
93+ $auth = new Auth();
94+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
95+
96+ $expect = 'エラー:パスワードは一致していません。'.'<br />';
97+
98+ $test->assertNotNull($res);
99+ $test->assertEquals($res->message, $expect);
100+
101+ $pass = "testTEST1234";
102+ $passVerify = "testTEST1234";
103+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
104+
105+ $expect = 'エラー:パスワードは20以上をご入力下さい。'.'<br />';
106+
107+ $test->assertNotNull($res);
108+ $test->assertEquals($res->message, $expect);
109+
110+ $pass = "testTEST1234testTEST";
111+ $passVerify = "testTEST1234testTEST";
112+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
113+
114+ $expect = 'エラー:パスワードは2つ以上の大文字、2つ以上の小文字、2つ以上の数字、及び2つ以上の特別文字を含む事が必須です。'.'<br />';
115+
116+ $test->assertNotNull($res);
117+ $test->assertEquals($res->message, $expect);
118+ });
119+
120+ $test->it('不正なメールアドレスでアカウントを作成出来ないはず', function($test): void {
121+ $user = "admin5678";
122+ $pass = "testTEST1234!#$%@[]:;";
123+ $passVerify = "testTEST1234!#$%@[]:;";
124+ $email = "test@076.niggerballs";
125+
126+ $auth = new Auth();
127+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
128+
129+ $expect = 'エラー:メールアドレスは不正です。'.'<br />';
130+
131+ $test->assertNotNull($res);
132+ $test->assertEquals($res->message, $expect);
133+
134+ $email = "test@076";
135+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
136+
137+ $expect = 'エラー:メールアドレスは不正です。'.'<br />';
138+
139+ $test->assertNotNull($res);
140+ $test->assertEquals($res->message, $expect);
141+ });
142+
143+ // ユーザーの削除
144+ $users = scandir(ROOT.'/data/user');
145+ $userFile = '';
146+ foreach ($users as $u) {
147+ if (str_contains($u, 'admin1234')) {
148+ $userFile = $u;
149+ break;
150+ }
151+ }
152+ unlink(ROOT.'/data/user/'.$userFile);
153+ rmdir(ROOT.'/public/static/user/admin1234');
154+});
155+
156+// TODO: CLIからクッキーを設定出来ないから、「Site\Lib\Auth::getUserData(): Return value must be of type stdClass, null returned」って発生する・・・
157+// $test->describe('ログインとログアウト', function($test): void {
158+// $user = "admin1234";
159+// $pass = "testTEST1234!#$%@[]:;";
160+// $passVerify = "testTEST1234!#$%@[]:;";
161+// $email = "test@076.co.jp";
162+
163+// $auth = new Auth();
164+// $res = $auth->mkUser($user, $pass, $passVerify, $email);
165+// unset($auth);
166+
167+// $test->it('正しい認証情報でログイン出来るはず', function($test) use ($user, $pass): void {
168+// $auth = new Auth();
169+// $res = $auth->setToken($user, $pass);
170+
171+// $test->assertTrue($res->isSuccess);
172+// $test->assertEquals('ログイン成功', $res->message);
173+
174+// $auth2 = new Auth();
175+// $usr = $auth2->getLoggedInUser();
176+
177+// $test->assertNotNull($usr);
178+// $test->assertEquals($user, $usr->username);
179+// });
180+
181+// $test->it('間違ったパスワードでログイン出来ないはず', function($test) use ($user): void {
182+// $auth = new Auth();
183+// $res = $auth->setToken($user, 'fuseipassword');
184+
185+// $test->assertFalse($res->isSuccess);
186+// $test->assertEquals('ユーザー名又はパスワードが一致していません', $res->message);
187+// });
188+
189+// $test->it('存在しないユーザーでログイン出来ないはず', function($test) use ($pass): void {
190+// $auth = new Auth();
191+// $res = $auth->setToken('fumeiuser', $pass);
192+
193+// $test->assertFalse($res->isSuccess);
194+// $test->assertEquals('ユーザー名又はパスワードが一致していません', $res->message);
195+// });
196+
197+// $test->it('ログアウト出来るはず', function($test) use ($user, $pass): void {
198+// $auth = new Auth();
199+// $auth->setToken($user, $pass);
200+
201+// $res = $auth->logout();
202+
203+// $test->assertTrue($res->isSuccess);
204+// $test->assertEquals('ログイン成功', $res->message);
205+
206+// $auth2 = new Auth();
207+// $usr = $auth2->getLoggedInUser();
208+
209+// $test->assertNull($usr);
210+// });
211+
212+// // ユーザーの削除
213+// $users = scandir(ROOT.'/data/user');
214+// $userFile = '';
215+// foreach ($users as $u) {
216+// if (str_contains($u, 'admin1234')) {
217+// $userFile = $u;
218+// break;
219+// }
220+// }
221+// unlink(ROOT.'/data/user/'.$userFile);
222+// rmdir(ROOT.'/public/static/user/admin1234');
223+// });
変更 tester.php
@@ -1,7 +1,11 @@
11 <?php
22 require_once __DIR__.DIRECTORY_SEPARATOR.'/autoload.php';
3+require_once __DIR__.DIRECTORY_SEPARATOR.'/util.php';
34 define('ROOT', realpath(__DIR__));
45 require_once __DIR__.DIRECTORY_SEPARATOR.'/config/config.php';
6+
7+mb_internal_encoding('UTF-8');
8+header('Content-Type: text/plain; charset=UTF-8');
59
610 $testDir = __DIR__.DIRECTORY_SEPARATOR.'src/Site/Test';
711 $testFiles = glob($testDir.'/*.php');