getMockBuilder(EmailActivationKeyValidator::class) ->onlyMethods(['findEmailActivationModel']) ->getMock(); $expiredActivation = new ForgotPassword(); $expiredActivation->created_at = time() - 60 * 60 - 10; $validActivation = new EmailActivation(); $validator->expects($this->exactly(3)) ->method('findEmailActivationModel') ->willReturnOnConsecutiveCalls(null, $expiredActivation, $validActivation); $validator->validateAttribute($model, 'key'); $this->assertSame([E::KEY_REQUIRED], $model->getErrors('key')); $this->assertNull($model->key); $model->clearErrors(); $model->key = 'original value'; $validator->validateAttribute($model, 'key'); $this->assertSame([E::KEY_NOT_EXISTS], $model->getErrors('key')); $this->assertSame('original value', $model->key); $model->clearErrors(); $validator->validateAttribute($model, 'key'); $this->assertSame([E::KEY_EXPIRE], $model->getErrors('key')); $this->assertSame('original value', $model->key); $model->clearErrors(); $validator->validateAttribute($model, 'key'); $this->assertEmpty($model->getErrors('key')); $this->assertSame($validActivation, $model->key); } public function testFindEmailActivationModel(): void { $this->tester->haveFixtures(['emailActivations' => EmailActivationFixture::class]); $key = $this->tester->grabFixture('emailActivations', 'freshRegistrationConfirmation')['key']; $model = new EmailActivationKeyValidator(); /** @var EmailActivation $result */ $result = $this->callProtected($model, 'findEmailActivationModel', $key); $this->assertInstanceOf(EmailActivation::class, $result, 'valid key without specifying type must return model'); $this->assertSame($key, $result->key); /** @var EmailActivation $result */ $result = $this->callProtected($model, 'findEmailActivationModel', $key, 0); $this->assertInstanceOf(EmailActivation::class, $result, 'valid key with valid type must return model'); /** @var EmailActivation|null $result */ $result = $this->callProtected($model, 'findEmailActivationModel', $key, 1); $this->assertNull($result, 'valid key, but invalid type must return null'); $model = new EmailActivationKeyValidator(); $result = $this->callProtected($model, 'findEmailActivationModel', 'invalid-key'); $this->assertNull($result, 'invalid key must return null'); } }