Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php |
||
| 17 | class UserTest extends \Codeception\Test\Unit |
||
| 18 | { |
||
| 19 | use Specify { |
||
| 20 | specify as parentSpecify; |
||
| 21 | } |
||
| 22 | |||
| 23 | /** @var Module */ |
||
| 24 | public $module; |
||
| 25 | |||
| 26 | /** |
||
| 27 | * Registration test with `null` data for User model |
||
| 28 | */ |
||
| 29 | public function testRegistrationNull() |
||
| 30 | { |
||
| 31 | $this->module->enableRegistration = true; |
||
| 32 | $this->module->enableConfirmation = true; |
||
| 33 | $this->module->registrationFields = []; |
||
| 34 | |||
| 35 | $this->specify("we have register with null data", function () { |
||
| 36 | $user = new User([ |
||
| 37 | 'status' => null, |
||
| 38 | 'email' => '[email protected]', |
||
| 39 | 'pass_hash' => null, |
||
| 40 | 'name' => null, |
||
| 41 | 'gender' => null, |
||
| 42 | 'birth' => null, |
||
| 43 | 'avatar' => null, |
||
| 44 | 'access_token' => null, |
||
| 45 | 'auth_key' => null, |
||
| 46 | 'token' => null, |
||
| 47 | 'token_created_at' => null, |
||
| 48 | 'registered_at' => null, |
||
| 49 | ]); |
||
| 50 | expect("we can register user with correct email and null data", $user->register())->true(); |
||
| 51 | }); |
||
| 52 | } |
||
| 53 | |||
| 54 | /** |
||
| 55 | * Creation test for User model |
||
| 56 | */ |
||
| 57 | public function testCreation() |
||
| 58 | { |
||
| 59 | $this->module->enableRegistration = false; |
||
| 60 | |||
| 61 | $this->specify("we have create user if registration disabled", function () { |
||
| 62 | $user = new User([ |
||
| 63 | 'email' => '[email protected]', |
||
| 64 | 'password' => 'password', |
||
| 65 | 'name' => 'Test user', |
||
| 66 | ]); |
||
| 67 | expect("we can create user if registration disabled", $user->create())->true(); |
||
| 68 | $this->tester->dontSeeEmailIsSent(); |
||
| 69 | //create() on existing user throw \RuntimeException |
||
| 70 | $user->create(); |
||
| 71 | }, ['throws' => new \RuntimeException]); |
||
| 72 | |||
| 73 | $this->module->enableRegistration = true; |
||
| 74 | $this->specify("we have create user with register email", function () { |
||
| 75 | $user = new User([ |
||
| 76 | 'email' => '[email protected]', |
||
| 77 | 'password' => 'password', |
||
| 78 | 'name' => 'Test user 2', |
||
| 79 | ]); |
||
| 80 | expect("we can create user if registration disabled", $user->create(true))->true(); |
||
| 81 | /** @var TestMailer $message */ |
||
| 82 | /** @var yii\swiftmailer\Message $message */ |
||
| 83 | $this->tester->seeEmailIsSent(); |
||
| 84 | $message = $this->tester->grabLastSentEmail(); |
||
| 85 | expect("we must see email", $message)->notNull(); |
||
| 86 | expect("we must see email to user", $message->getTo())->hasKey($user->email); |
||
| 87 | expect("we must see registration email", $message->getSubject())->contains('register'); |
||
| 88 | }); |
||
| 89 | |||
| 90 | $this->specify("we have create user wit autogenerated password", function () { |
||
| 91 | $user = new User([ |
||
| 92 | 'email' => '[email protected]', |
||
| 93 | 'name' => 'Test user', |
||
| 94 | ]); |
||
| 95 | expect("we can create user with autogenerated password", $user->create())->true(); |
||
| 96 | }); |
||
| 97 | |||
| 98 | $this->specify("we have create user without name", function () { |
||
| 99 | $user = new User([ |
||
| 100 | 'email' => '[email protected]', |
||
| 101 | 'password' => 'password', |
||
| 102 | ]); |
||
| 103 | expect("we can't create user without name", $user->create())->false(); |
||
| 104 | expect("we can see error `name`", $user->getErrors())->hasKey('name'); |
||
| 105 | }); |
||
| 106 | } |
||
| 107 | |||
| 108 | /** |
||
| 109 | * Blocking test for User model |
||
| 110 | */ |
||
| 111 | public function testBlocking() |
||
| 112 | { |
||
| 113 | $this->module->enableBlockingEmail = true; |
||
| 114 | |||
| 115 | $this->specify("we have block user", function () { |
||
| 116 | /** @var User $user */ |
||
| 117 | //$user = $this->getFixture('user')->getModel('active'); |
||
| 118 | $user = $this->tester->grabFixture('users', 'active'); |
||
| 119 | expect("we can block user", $user->block())->true(); |
||
| 120 | $this->tester->seeEmailIsSent(); |
||
| 121 | }); |
||
| 122 | |||
| 123 | $this->specify("we have block already blocked user", function () { |
||
| 124 | /** @var User $user */ |
||
| 125 | $user = $this->tester->grabFixture('users', 'blocked'); |
||
| 126 | expect("we can't block already blocked user", $user->block())->false(); |
||
| 127 | }); |
||
| 128 | |||
| 129 | $this->specify("we have block unconfirmed user", function () { |
||
| 130 | /** @var User $user */ |
||
| 131 | $user = $this->tester->grabFixture('users', 'unconfirmed'); |
||
| 132 | expect("we can't block unconfirmed user", $user->block())->false(); |
||
| 133 | }); |
||
| 134 | |||
| 135 | $this->module->enableUnblockingEmail = true; |
||
| 136 | $this->specify("we have unblock blocked user", function () { |
||
| 137 | /** @var User $user */ |
||
| 138 | $user = $this->tester->grabFixture('users', 'blocked'); |
||
| 139 | expect("we can unblock blocked user", $user->unblock())->true(); |
||
| 140 | $this->tester->seeEmailIsSent(); |
||
| 141 | }); |
||
| 142 | |||
| 143 | $this->specify("we have unblock not blocked user", function () { |
||
| 144 | /** @var User $user */ |
||
| 145 | $user = $this->tester->grabFixture('users', 'unconfirmed'); |
||
| 146 | expect("we can't unblock not blocked user", $user->unblock())->false(); |
||
| 147 | $this->tester->dontSeeEmailIsSent(); |
||
| 148 | }); |
||
| 149 | |||
| 150 | $this->specify("we have unblock user override mail setting", function () { |
||
| 151 | /** @var User $user */ |
||
| 152 | $user = $this->tester->grabFixture('users', 'active'); |
||
| 153 | expect("we can unblock user", $user->unblock(false))->true(); |
||
| 154 | $this->tester->dontSeeEmailIsSent(); |
||
| 155 | }); |
||
| 156 | |||
| 157 | $this->specify("we have block user override global email setting", function () { |
||
| 158 | /** @var User $user */ |
||
| 159 | $user = $this->tester->grabFixture('users', 'active'); |
||
| 160 | expect("we can block user", $user->block(false))->true(); |
||
| 161 | $this->tester->dontSeeEmailIsSent(); |
||
| 162 | }); |
||
| 163 | } |
||
| 164 | |||
| 165 | /** |
||
| 166 | * Registration test for User model |
||
| 167 | */ |
||
| 168 | public function testRegistration() |
||
| 169 | { |
||
| 170 | $this->module->enableRegistration = false; |
||
| 171 | |||
| 172 | $this->specify("we have register if registration disabled", function () { |
||
| 173 | $user = new User([ |
||
| 174 | 'email' => '[email protected]', |
||
| 175 | 'password' => 'password', |
||
| 176 | 'name' => 'Tester', |
||
| 177 | ]); |
||
| 178 | expect("we can't register if registration disabled", $user->register())->false(); |
||
| 179 | expect("we must see message about this", $user->getErrors())->hasKey('registration'); |
||
| 180 | }); |
||
| 181 | |||
| 182 | $this->module->enableRegistration = true; |
||
| 183 | $this->module->enableConfirmation = true; |
||
| 184 | $this->module->registrationFields = []; |
||
| 185 | $this->specify("we have register user by email", function () { |
||
| 186 | $user = new User([ |
||
| 187 | 'email' => '[email protected]', |
||
| 188 | ]); |
||
| 189 | expect("we can register user by email only", $user->register())->true(); |
||
| 190 | expect("user must have register date", $user->registered_at)->notEmpty(); |
||
| 191 | expect("user must have status STATUS_CONFIRM", $user->status)->equals(User::STATUS_CONFIRM); |
||
| 192 | expect("we can get user profile", Profile::findOne(['user_id' => $user->id]))->notNull(); |
||
| 193 | |||
| 194 | $this->tester->seeEmailIsSent(); |
||
| 195 | $message = $this->tester->grabLastSentEmail(); |
||
| 196 | expect("we must view confirmation email", $message->getTo())->hasKey($user->email); |
||
| 197 | expect("we must view confirmation email", $message->getSubject())->contains('confirm'); |
||
| 198 | |||
| 199 | //register() on existing user throw \RuntimeException |
||
| 200 | $user->register(); |
||
| 201 | }, ['throws' => new \RuntimeException]); |
||
| 202 | |||
| 203 | $this->specify("we have register user with same email", function () { |
||
| 204 | $user = new User([ |
||
| 205 | 'email' => '[email protected]', |
||
| 206 | ]); |
||
| 207 | expect("we can't create user with same email", $user->register())->false(); |
||
| 208 | expect("we must see error message", $user->getErrors())->hasKey('email'); |
||
| 209 | }); |
||
| 210 | |||
| 211 | $this->module->registrationFields = ['password']; |
||
| 212 | $this->specify("we have register user by email with password", function () { |
||
| 213 | $pass = 'password'; |
||
| 214 | $user = new User([ |
||
| 215 | 'email' => '[email protected]', |
||
| 216 | ]); |
||
| 217 | expect("we can't register user without pass", $user->register())->false(); |
||
| 218 | expect('we must see error in password', $user->getErrors())->hasKey('password'); |
||
| 219 | $user->password = $pass; |
||
| 220 | expect("we can register user", $user->register())->true(); |
||
| 221 | expect("`pass_hash` must match", Yii::$app->security->validatePassword($pass, $user->pass_hash))->true(); |
||
| 222 | expect("we can get user profile", Profile::findOne(['user_id' => $user->id]))->notNull(); |
||
| 223 | }); |
||
| 224 | |||
| 225 | $this->module->registrationFields = ['password', 'name']; |
||
| 226 | $this->specify("we have register user with full data", function () { |
||
| 227 | $pass = 'password'; |
||
| 228 | $name = 'Tester'; |
||
| 229 | $user = new User([ |
||
| 230 | 'email' => '[email protected]', |
||
| 231 | ]); |
||
| 232 | expect("we can't register user without pass and name", $user->register())->false(); |
||
| 233 | expect('we must see error in password', $user->getErrors())->hasKey('password'); |
||
| 234 | expect('we must see error in name', $user->getErrors())->hasKey('name'); |
||
| 235 | $user->password = $pass; |
||
| 236 | $user->name = $name; |
||
| 237 | expect("we can register user", $user->register())->true(); |
||
| 238 | expect("`pass_hash` must match", Yii::$app->security->validatePassword($pass, $user->pass_hash))->true(); |
||
| 239 | expect("we can get user profile", Profile::findOne(['user_id' => $user->id]))->notNull(); |
||
| 240 | $user1 = User::findOne($user->id); |
||
| 241 | expect("name must be set", $user1->name)->equals($name); |
||
| 242 | }); |
||
| 243 | |||
| 244 | $this->module->registrationFields = ['password', 'name', 'gender', 'birth']; |
||
| 245 | $this->specify("we have register user with full data", function () { |
||
| 246 | $pass = 'password'; |
||
| 247 | $name = 'Tester'; |
||
| 248 | $gender = User::MALE; |
||
| 249 | $birth = '2000-01-01'; |
||
| 250 | $user = new User([ |
||
| 251 | 'email' => '[email protected]', |
||
| 252 | 'password' => $pass, |
||
| 253 | 'name' => $name, |
||
| 254 | ]); |
||
| 255 | expect("we can register user without gender and birth", $user->register())->true(); |
||
| 256 | |||
| 257 | $user = new User([ |
||
| 258 | 'email' => '[email protected]', |
||
| 259 | 'password' => $pass, |
||
| 260 | 'name' => $name, |
||
| 261 | 'gender' => $gender, |
||
| 262 | 'birth' => $birth, |
||
| 263 | ]); |
||
| 264 | expect("we can register user with full data", $user->register())->true(); |
||
| 265 | $user1 = User::findOne($user->id); |
||
| 266 | expect('we must see gender', $user1->gender)->equals($gender); |
||
| 267 | expect('we must see birth', $user1->birth)->equals($birth); |
||
| 268 | }); |
||
| 269 | |||
| 270 | $this->module->enableConfirmation = false; |
||
| 271 | $this->module->registrationFields = []; |
||
| 272 | $this->specify("we have register user without confirm email", function () { |
||
| 273 | $user = new User([ |
||
| 274 | 'email' => '[email protected]', |
||
| 275 | ]); |
||
| 276 | expect("we can register user", $user->register())->true(); |
||
| 277 | expect("user must have status STATUS_ACTIVE", $user->status)->equals(User::STATUS_ACTIVE); |
||
| 278 | $this->tester->seeEmailIsSent(); |
||
| 279 | $message = $this->tester->grabLastSentEmail(); |
||
| 280 | expect("we must view registration email", $message->getTo())->hasKey($user->email); |
||
| 281 | expect("we must view registration email", $message->getSubject())->contains('register'); |
||
| 282 | }); |
||
| 283 | } |
||
| 284 | |||
| 285 | public function testConfirm() |
||
| 286 | { |
||
| 287 | $this->module->enableRegistration = true; |
||
| 288 | $this->module->enableConfirmation = true; |
||
| 289 | $this->module->registrationFields = []; |
||
| 290 | |||
| 291 | $this->specify("we have register and confirm user", function () { |
||
| 292 | $user = new User([ |
||
| 293 | 'email' => '[email protected]', |
||
| 294 | ]); |
||
| 295 | |||
| 296 | expect('we can register user', $user->register())->true(); |
||
| 297 | expect('we must see status STATUS_CONFIRM', $user->status)->equals(User::STATUS_CONFIRM); |
||
| 298 | |||
| 299 | $confirmedUser = User::findByToken($user->token); |
||
| 300 | expect('we can confirm user', $confirmedUser->confirm())->true(); |
||
| 301 | expect('confirm user must be equal registered user', $confirmedUser->id)->equals($user->id); |
||
| 302 | $this->tester->seeEmailIsSent(); |
||
| 303 | $message = $this->tester->grabLastSentEmail(); |
||
| 304 | expect("we must view register email", $message->getTo())->hasKey($user->email); |
||
| 305 | expect("we must view register email", $message->getSubject())->contains('register'); |
||
| 306 | |||
| 307 | expect('we cannot confirm already confirmed user', $confirmedUser->confirm())->false(); |
||
| 308 | expect('we must see error key `error`', $confirmedUser->getErrors())->hasKey('error'); |
||
| 309 | }); |
||
| 310 | |||
| 311 | $this->specify("we have register and try confirm user with expired token", function () { |
||
| 312 | $user = new User([ |
||
| 313 | 'email' => '[email protected]', |
||
| 314 | ]); |
||
| 315 | expect('we can register user', $user->register())->true(); |
||
| 316 | $user->updateAttributes([ |
||
| 317 | 'token_created_at' => time() - 60 * 60 * 24 * 1000, |
||
| 318 | ]); |
||
| 319 | expect("we can't confirm user with expired token", $user->confirm())->false(); |
||
| 320 | expect('we must see error key `token`', $user->getErrors())->hasKey('token'); |
||
| 321 | }); |
||
| 322 | } |
||
| 323 | |||
| 324 | public function testRestore() |
||
| 325 | { |
||
| 326 | $this->specify("we have register and confirm user", function () { |
||
| 327 | /** @var Module $module */ |
||
| 328 | $module = Yii::$app->getModule('activeuser'); |
||
| 329 | |||
| 330 | $module->enableRegistration = true; |
||
| 331 | $module->enableConfirmation = true; |
||
| 332 | $module->registrationFields = []; |
||
| 333 | |||
| 334 | $user = new User([ |
||
| 335 | 'email' => '[email protected]', |
||
| 336 | ]); |
||
| 337 | |||
| 338 | expect('we can register user', $user->register())->true(); |
||
| 339 | expect('we cannot request restore on unconfirmed user', $user->restore())->false(); |
||
| 340 | expect('we must see `error` error', $user->getErrors())->hasKey('error'); |
||
| 341 | expect('we can confirm user', $user->confirm())->true(); |
||
| 342 | |||
| 343 | $module->enablePasswordRestore = false; |
||
| 344 | expect("we can't request restore if disabled", $user->restore())->false(); |
||
| 345 | expect('we must see `error` error', $user->getErrors())->hasKey('error'); |
||
| 346 | |||
| 347 | $module->enablePasswordRestore = true; |
||
| 348 | Yii::$app->mailer->reset(); |
||
| 349 | expect('we can request restore', $user->restore())->true(); |
||
| 350 | |||
| 351 | $module->generatePassOnRestore = false; |
||
| 352 | $checkedUser = User::findOne($user->id); |
||
| 353 | expect('user must have STATUS_RESTORE', $checkedUser->status)->equals(User::STATUS_RESTORE); |
||
| 354 | expect('user must have not empty token', $checkedUser->token)->notEmpty(); |
||
| 355 | $this->tester->seeEmailIsSent(); |
||
| 356 | $message = $this->tester->grabLastSentEmail(); |
||
| 357 | expect("we must view restore email", $message->getTo())->hasKey($checkedUser->email); |
||
| 358 | expect("we must view restore email", $message->getSubject())->contains('restore'); |
||
| 359 | |||
| 360 | expect("we cannot change password on empty", $checkedUser->changePassword())->false(); |
||
| 361 | expect('we must see `password` error', $checkedUser->getErrors())->hasKey('password'); |
||
| 362 | |||
| 363 | $checkedUser->updateAttributes([ |
||
| 364 | 'token_created_at' => time() - 60 * 60 * 24 * 1000, |
||
| 365 | ]); |
||
| 366 | expect("we can't change password user with expired token", $checkedUser->changePassword())->false(); |
||
| 367 | expect('we must see error key `token`', $checkedUser->getErrors())->hasKey('token'); |
||
| 368 | $checkedUser->updateAttributes([ |
||
| 369 | 'token_created_at' => time() - 60, |
||
| 370 | ]); |
||
| 371 | |||
| 372 | $module->generatePassOnRestore = true; |
||
| 373 | $checkedUser->password = ''; |
||
| 374 | Yii::$app->mailer->reset(); |
||
| 375 | expect("we can change password by automatically generated", $checkedUser->changePassword())->true(); |
||
| 376 | $password = $checkedUser->password; |
||
| 377 | $user = User::findOne($checkedUser->id); |
||
| 378 | expect('user must have STATUS_ACTIVE', $user->status)->equals(User::STATUS_ACTIVE); |
||
| 379 | expect('token must be empty', $user->token)->isEmpty(); |
||
| 380 | expect('password must be changed and equal', Yii::$app->security->validatePassword($password, $user->pass_hash))->true(); |
||
| 381 | $this->tester->seeEmailIsSent(); |
||
| 382 | $message = $this->tester->grabLastSentEmail(); |
||
| 383 | expect("we must view change confirmation email", $message->getTo())->hasKey($user->email); |
||
| 384 | expect("we must view change confirmation email", $message->getSubject())->contains('changed'); |
||
| 385 | |||
| 386 | // test manually changed password |
||
| 387 | $user->restore(); |
||
| 388 | $checkedUser = User::findOne($user->id); |
||
| 389 | $module->generatePassOnRestore = true; |
||
| 390 | $password = 'qwerty'; |
||
| 391 | $checkedUser->password = $password; |
||
| 392 | expect("we can change password on manually entered if set autogeneration", $checkedUser->changePassword())->true(); |
||
| 393 | expect('password must be changed and equal', Yii::$app->security->validatePassword($password, $checkedUser->pass_hash))->true(); |
||
| 394 | |||
| 395 | $checkedUser->restore(); |
||
| 396 | $user = User::findOne($checkedUser->id); |
||
| 397 | $module->generatePassOnRestore = false; |
||
| 398 | $password = '123456'; |
||
| 399 | $user->password = $password; |
||
| 400 | expect("we can change password on manually entered if NOT set autogenerate", $user->changePassword())->true(); |
||
| 401 | expect('password must be changed and equal', Yii::$app->security->validatePassword($password, $user->pass_hash))->true(); |
||
| 402 | |||
| 403 | /** @var User $user */ |
||
| 404 | $user = $this->tester->grabFixture('users', 'active'); |
||
| 405 | expect("we can't change password if user not restore", $user->changePassword())->false(); |
||
| 406 | expect('we must see `error` error', $user->getErrors())->hasKey('error'); |
||
| 407 | }); |
||
| 408 | |||
| 409 | $this->specify("try to restore blocked user", function () { |
||
| 410 | $user = User::findOne(['status' => User::STATUS_BLOCKED]); |
||
| 411 | expect("we must have blocked user", $user)->notNull(); |
||
| 412 | expect("we cannot restore on blocked user", $user->restore())->false(); |
||
| 413 | expect('we must see `error`', $user->getErrors())->hasKey('error'); |
||
| 414 | }); |
||
| 415 | } |
||
| 416 | |||
| 417 | public function testChecks() |
||
| 418 | { |
||
| 419 | /** @var User $user */ |
||
| 420 | $user = $this->tester->grabFixture('users', 'blocked'); |
||
| 421 | expect('user must be blocked', $user->isBlocked())->true(); |
||
| 422 | expect("user can't be active", $user->isActive())->false(); |
||
| 423 | expect("user can be confirmed", $user->isConfirmed())->true(); |
||
| 424 | expect("user can't be restored", $user->isRestore())->false(); |
||
| 425 | |||
| 426 | $user = $this->tester->grabFixture('users', 'unconfirmed'); |
||
| 427 | expect('user must be not confirmed', $user->isConfirmed())->false(); |
||
| 428 | expect("user can't be blocked", $user->isBlocked())->false(); |
||
| 429 | expect("user can't be active", $user->isActive())->false(); |
||
| 430 | expect("user can't be restored", $user->isRestore())->false(); |
||
| 431 | |||
| 432 | $user = $this->tester->grabFixture('users', 'active'); |
||
| 433 | expect('user must be active', $user->isActive())->true(); |
||
| 434 | expect("user can't be blocked", $user->isBlocked())->false(); |
||
| 435 | expect("user can be confirmed", $user->isConfirmed())->true(); |
||
| 436 | expect("user can't be restored", $user->isRestore())->false(); |
||
| 437 | |||
| 438 | $user = $this->tester->grabFixture('users', 'restore'); |
||
| 439 | expect('user must be restore', $user->isRestore())->true(); |
||
| 440 | expect("user can't be active", $user->isActive())->false(); |
||
| 441 | expect("user can't be blocked", $user->isBlocked())->false(); |
||
| 442 | expect("user can be confirmed", $user->isConfirmed())->true(); |
||
| 443 | } |
||
| 444 | |||
| 445 | public function testGettersFinders() |
||
| 446 | { |
||
| 447 | /** @var User $user */ |
||
| 448 | $user = $this->tester->grabFixture('users', 'active'); |
||
| 449 | $accessTokens = ['active' => $user->access_token]; |
||
| 450 | expect("id getter must be equals direct access", $user->getId())->equals($user->id); |
||
| 451 | expect("auth_key getter must be equals direct access", $user->getAuthKey())->equals($user->auth_key); |
||
| 452 | |||
| 453 | expect("wrong auth_key cannot be tested", $user->validateAuthKey('wrong_key'))->false(); |
||
| 454 | expect("empty auth_key cannot be tested", $user->validateAuthKey(''))->false(); |
||
| 455 | expect("correct auth_key can be tested", $user->validateAuthKey($user->auth_key))->true(); |
||
| 456 | |||
| 457 | $user = $this->tester->grabFixture('users', 'blocked'); |
||
| 458 | $accessTokens['blocked'] = $user->access_token; |
||
| 459 | expect("user getProfile() must return query", $user->getProfile())->isInstanceOf(yii\db\ActiveQuery::className()); |
||
| 460 | expect("we can get blocked user profile", $user->profile)->notEmpty(); |
||
| 461 | expect("blocked user can't be validated by auth_key", $user->validateAuthKey($user->auth_key))->false(); |
||
| 462 | |||
| 463 | $user = $this->tester->grabFixture('users', 'unconfirmed'); |
||
| 464 | $accessTokens['unconfirmed'] = $user->access_token; |
||
| 465 | expect("we can get unconfirmed user profile", $user->getProfile()->one())->notEmpty(); |
||
| 466 | expect("unconfirmed user can't be validated by auth_key", $user->validateAuthKey($user->auth_key))->false(); |
||
| 467 | |||
| 468 | $user = $this->tester->grabFixture('users', 'emptyauth'); |
||
| 469 | $accessTokens['emptyauth'] = $user->access_token; |
||
| 470 | expect("we can get active user profile", $user->profile)->notEmpty(); |
||
| 471 | expect("user with empty auth_key can't be validated by auth_key", $user->validateAuthKey(''))->false(); |
||
| 472 | |||
| 473 | expect("founded identity must be equals", User::findIdentity($user->id)->toArray())->equals($user->toArray()); |
||
| 474 | expect("identity cannot be found", User::findIdentity(99999))->isEmpty(); |
||
| 475 | |||
| 476 | expect('only active user can be founded by access token', User::findIdentityByAccessToken($accessTokens['active']))->notNull(); |
||
| 477 | expect('only active user can be founded by access token', User::findIdentityByAccessToken($accessTokens['emptyauth']))->notNull(); |
||
| 478 | expect('blocked user cannot be founded by access token', User::findIdentityByAccessToken($accessTokens['blocked']))->null(); |
||
| 479 | expect('unconfirmed user cannot be founded by access token', User::findIdentityByAccessToken($accessTokens['unconfirmed']))->null(); |
||
| 480 | expect('user with empty access token cannot be founded by access token', User::findIdentityByAccessToken(''))->null(); |
||
| 481 | |||
| 482 | expect("we cannot find user by empty token", User::findByToken(''))->null(); |
||
| 483 | expect("we cannot find user by null-value token", User::findByToken(null))->null(); |
||
| 484 | expect("we cannot find user by wrong token", User::findByToken('1'))->null(); |
||
| 485 | |||
| 486 | // check false before save |
||
| 487 | $user = new User([ |
||
| 488 | 'email' => '[email protected]', |
||
| 489 | 'password' => 'pass', |
||
| 490 | 'name' => 'Name', |
||
| 491 | ]); |
||
| 492 | $user->on(yii\db\BaseActiveRecord::EVENT_BEFORE_INSERT, function ($event) { |
||
| 493 | /** @var yii\base\ModelEvent $event */ |
||
| 494 | $event->isValid = false; |
||
| 495 | $event->sender->addError('event', 'Error event'); |
||
| 496 | }); |
||
| 497 | expect("user cannot be saved", $user->save())->false(); |
||
| 498 | expect("we can see error", $user->getErrors())->hasKey('event'); |
||
| 499 | expect("password hash must be empty", $user->pass_hash)->isEmpty(); |
||
| 500 | } |
||
| 501 | |||
| 502 | protected function _before() |
||
| 503 | { |
||
| 504 | parent::_before(); |
||
| 505 | $this->tester->haveFixtures([ |
||
| 506 | 'users' => UserFixture::className(), |
||
| 507 | 'profiles' => ProfileFixture::className(), |
||
| 508 | ]); |
||
| 509 | } |
||
| 510 | |||
| 511 | protected function tearDown() |
||
| 512 | { |
||
| 513 | parent::tearDown(); |
||
| 514 | } |
||
| 515 | |||
| 516 | protected function setUp() |
||
| 517 | { |
||
| 518 | parent::setUp(); |
||
| 519 | $this->module = Yii::$app->getModule('activeuser'); |
||
| 520 | } |
||
| 521 | |||
| 522 | public function specify($specification, \Closure $callable = null, $params = []) |
||
| 523 | { |
||
| 524 | Yii::$app->mailer->reset(); |
||
| 525 | $this->parentSpecify($specification, $callable, $params); |
||
| 526 | } |
||
| 527 | } |
||
| 528 |