request = new LoginRequest(); } #[Test] public function it_validates_correctly(): void { $data = [ 'email' => 'test@example.com', 'password' => 'password123', ]; $validator = Validator::make($data, $this->request->rules()); $this->assertTrue($validator->passes()); } #[Test] #[DataProvider('invalidEmailProvider')] public function it_rejects_invalid_emails(string $invalidEmail): void { $data = [ 'email' => $invalidEmail, 'password' => 'password123', ]; $validator = Validator::make($data, $this->request->rules()); $this->assertFalse($validator->passes()); $this->assertTrue($validator->errors()->has('email')); } public static function invalidEmailProvider(): array { return [ ['invalid-email'], ['invalid@'], ['@example.com'], ['invalid@.com'], [''], ]; } #[Test] #[DataProvider('validEmailProvider')] public function it_accepts_valid_emails(string $validEmail): void { $data = [ 'email' => $validEmail, 'password' => 'password123', ]; $validator = Validator::make($data, $this->request->rules()); $this->assertTrue( $validator->passes(), "Email '$validEmail' should be valid" ); } public static function validEmailProvider(): array { return [ ['user@example.com'], ['user.name@example.com'], ['user+tag@example.com'], ['user@sub.example.com'], ['user@example.co.uk'], ['user123@example.io'], ]; } #[Test] public function it_requires_email_and_password(): void { $validator = Validator::make([], $this->request->rules(), $this->request->messages()); $this->assertFalse($validator->passes()); $this->assertTrue($validator->errors()->has('email')); $this->assertTrue($validator->errors()->has('password')); $this->assertEquals('Email is required', $validator->errors()->first('email')); $this->assertEquals('Password is required', $validator->errors()->first('password')); } #[Test] public function it_enforces_email_max_length(): void { $longEmail = str_repeat('a', 256).'@example.com'; $data = [ 'email' => $longEmail, 'password' => 'password123', ]; $validator = Validator::make($data, $this->request->rules()); $this->assertFalse($validator->passes()); $this->assertTrue($validator->errors()->has('email')); } #[Test] public function it_allows_email_at_max_length(): void { $maxEmail = str_repeat('a', 240).'@example.com'; $data = [ 'email' => $maxEmail, 'password' => 'password123', ]; $validator = Validator::make($data, $this->request->rules()); $this->assertTrue( $validator->passes(), 'Email at max length should be valid' ); } }