invoiceninja/tests/Unit/Rules/CommaSeparatedEmailsTest.php

112 lines
3.1 KiB
PHP

<?php
namespace Tests\Unit\Rules;
use App\Rules\CommaSeparatedEmails;
use PHPUnit\Framework\TestCase;
class CommaSeparatedEmailsTest extends TestCase
{
public function test_validates_single_email()
{
$rule = new CommaSeparatedEmails();
$failed = false;
$rule->validate('emails', 'test@example.com', function() use (&$failed) {
$failed = true;
});
$this->assertFalse($failed);
}
public function test_validates_multiple_emails()
{
$rule = new CommaSeparatedEmails();
$failed = false;
$rule->validate('emails', 'test1@example.com, test2@example.com, test3@example.com', function() use (&$failed) {
$failed = true;
});
$this->assertFalse($failed);
}
public function test_validates_emails_with_whitespace()
{
$rule = new CommaSeparatedEmails();
$failed = false;
$rule->validate('emails', ' test1@example.com , test2@example.com ', function() use (&$failed) {
$failed = true;
});
$this->assertFalse($failed);
}
public function test_fails_with_invalid_email()
{
$rule = new CommaSeparatedEmails();
$failed = false;
$errorMessage = '';
$rule->validate('emails', 'invalid-email, test@example.com', function($message) use (&$failed, &$errorMessage) {
$failed = true;
$errorMessage = $message;
});
$this->assertTrue($failed);
$this->assertStringContainsString('invalid-email', $errorMessage);
}
public function test_fails_with_empty_emails()
{
$rule = new CommaSeparatedEmails();
$failed = false;
$rule->validate('emails', 'test@example.com, , test2@example.com', function() use (&$failed) {
$failed = true;
});
$this->assertFalse($failed); // Empty emails are filtered out
}
public function test_fails_when_exceeding_max_emails()
{
$rule = new CommaSeparatedEmails(2); // Max 2 emails
$failed = false;
$errorMessage = '';
$rule->validate('emails', 'test1@example.com, test2@example.com, test3@example.com', function($message) use (&$failed, &$errorMessage) {
$failed = true;
$errorMessage = $message;
});
$this->assertTrue($failed);
$this->assertStringContainsString('cannot contain more than 2', $errorMessage);
}
public function test_validates_null_value()
{
$rule = new CommaSeparatedEmails();
$failed = false;
$rule->validate('emails', null, function() use (&$failed) {
$failed = true;
});
$this->assertFalse($failed);
}
public function test_validates_empty_string()
{
$rule = new CommaSeparatedEmails();
$failed = false;
$rule->validate('emails', '', function() use (&$failed) {
$failed = true;
});
$this->assertFalse($failed);
}
}