manager = new Manager(); $this->manager->addRule('email', new EmailRule()); $this->manager->addRule('min', new MinRule()); $this->manager->addRule('required', new RequiredRule()); } public function testInvalidEmailValuesFail() { $expected = ['email' => ['email should be an email']]; [ $exception ] = $this->assertExceptionThrown( fn() => $this->manager->validate(['email' => 'foo'], ['email' => ['email']]), ValidationException::class, ); $this->assertEquals($expected, $exception->getErrors()); } public function testValidEmailValuesPass() { $data = $this->manager->validate(['email' => 'foo@bar.com'], ['email' => ['email']]); $this->assertEquals($data['email'], 'foo@bar.com'); } public function testInvalidRequiredValuesFail() { $expected = ['email' => ['email is required']]; [ $exception ] = $this->assertExceptionThrown( fn() => $this->manager->validate(['email' => ''], ['email' => ['required']]), ValidationException::class, ); $this->assertEquals($expected, $exception->getErrors()); } public function testValidRequiredValuesPass() { $data = $this->manager->validate(['email' => 'foo@bar.com'], ['email' => ['required']]); $this->assertEquals($data['email'], 'foo@bar.com'); } public function testInvalidMinValuesFail() { $expected = ['email' => ['email should be at least 4 characters']]; [ $exception ] = $this->assertExceptionThrown( fn() => $this->manager->validate(['email' => 'foo'], ['email' => ['min:4']]), ValidationException::class, ); $this->assertEquals($expected, $exception->getErrors()); } public function testValidMinValuesPass() { $data = $this->manager->validate(['email' => 'foo@bar.com'], ['email' => ['min:4']]); $this->assertEquals($data['email'], 'foo@bar.com'); } }