Files
cf7-spam-to-telegram/tests/ClassifierDropTest.php
T
2026-04-21 16:01:58 +05:00

85 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
namespace Cf7stg\Tests;
use Cf7stg\Classifier;
final class ClassifierDropTest extends Cf7stgTestCase
{
public function test_has_valid_email_anywhere_finds_gmail(): void
{
$fields = ['some-key' => 'pasha@gmail.com'];
self::assertTrue(Classifier::has_valid_email_anywhere($fields));
}
public function test_has_valid_email_anywhere_finds_in_array_value(): void
{
$fields = ['x' => ['noise', 'info@some-domain.com']];
self::assertTrue(Classifier::has_valid_email_anywhere($fields));
}
public function test_has_valid_email_anywhere_returns_false_for_invalid(): void
{
$fields = ['email' => 'not-an-email', 'x' => 'AB'];
self::assertFalse(Classifier::has_valid_email_anywhere($fields));
}
public function test_has_valid_email_anywhere_returns_false_when_empty(): void
{
self::assertFalse(Classifier::has_valid_email_anywhere([]));
}
public function test_has_valid_email_anywhere_finds_email_embedded_in_text(): void
{
$fields = ['your-message' => 'reach me at user@domain.com thanks'];
self::assertTrue(Classifier::has_valid_email_anywhere($fields));
}
public function test_has_valid_email_anywhere_finds_second_email_when_first_invalid(): void
{
// First candidate is "alice@in" which is not a valid email; second is valid.
// Without preg_match_all, the method would return false here.
$fields = ['msg' => 'try alice@in or bob@example.com'];
self::assertTrue(Classifier::has_valid_email_anywhere($fields));
}
public function test_has_short_latin_name_true_for_two_letters(): void
{
$fields = ['your-name' => 'OB'];
self::assertTrue(Classifier::has_short_latin_name($fields));
}
public function test_has_short_latin_name_true_for_three_alnum(): void
{
$fields = ['name' => 'A1B'];
self::assertTrue(Classifier::has_short_latin_name($fields));
}
public function test_has_short_latin_name_false_for_long_name(): void
{
$fields = ['your-name' => 'Melissa'];
self::assertFalse(Classifier::has_short_latin_name($fields));
}
public function test_has_short_latin_name_false_for_cyrillic(): void
{
$fields = ['your-name' => 'Иван'];
self::assertFalse(Classifier::has_short_latin_name($fields));
}
public function test_has_short_latin_name_false_when_no_name_field(): void
{
// Только телефон, нет name-полей. FieldDetector::find_name пропустит +79991234567 (digits)
$fields = ['tel-1' => '+79991234567'];
self::assertFalse(Classifier::has_short_latin_name($fields));
}
public function test_has_short_latin_name_picks_via_field_detector(): void
{
// text-211 не в списке известных name-ключей, FieldDetector найдёт 'XY' (no digits, len=2)
$fields = ['text-211' => 'XY', 'text-212' => '+79991234567'];
self::assertTrue(Classifier::has_short_latin_name($fields));
}
}