Initial commit
This commit is contained in:
138
laravel/tests/Unit/LoginRequestTest.php
Normal file
138
laravel/tests/Unit/LoginRequestTest.php
Normal file
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\Http\Requests\LoginRequest;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use Tests\TestCase;
|
||||
|
||||
class LoginRequestTest extends TestCase
|
||||
{
|
||||
|
||||
private LoginRequest $request;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
$this->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'
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user