mirror of
https://github.com/OPSnet/Gazelle.git
synced 2026-01-17 03:04:47 -05:00
143 lines
6.8 KiB
PHP
143 lines
6.8 KiB
PHP
<?php
|
|
|
|
namespace Gazelle;
|
|
|
|
use Gazelle\Enum\UserMatchQuality;
|
|
use Gazelle\UserMatch\MatchCandidate;
|
|
use Gazelle\UserMatch\MatchResult;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class MatchCandidateTest extends TestCase {
|
|
protected MatchCandidate $mc;
|
|
|
|
public function setUp(): void {
|
|
$this->mc = new MatchCandidate(['cand1', 'match'], ['some@email.example', 'cand1@test.domain'], [
|
|
['1.2.3.4', new \DateTimeImmutable(), new \DateTimeImmutable()],
|
|
['1.2.3.4', new \DateTimeImmutable('2018-03-04 12:34'), new \DateTimeImmutable('2018-05-04 22:43')],
|
|
['2.3.4.5', new \DateTimeImmutable('2020-03-04 12:34'), null]
|
|
]);
|
|
}
|
|
|
|
public function testMatchSelf(): void {
|
|
$this->assertEqualsCanonicalizing(['1.2.3.4', '2.3.4.5'], array_keys($this->mc->keyedIps()), 'matchcandidate-keyedips');
|
|
$result = $this->mc->match($this->mc);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-self-matches');
|
|
$this->assertEqualsCanonicalizing([
|
|
['cand1', 'cand1', UserMatchQuality::full],
|
|
['match', 'match', UserMatchQuality::full],
|
|
['cand1', 'cand1@test.domain', UserMatchQuality::partial],
|
|
['cand1@test.domain', 'cand1', UserMatchQuality::partial]
|
|
], $result->usernames(), 'matchcandidate-self-usernames'
|
|
);
|
|
$this->assertEqualsCanonicalizing([
|
|
['some@email.example', 'some@email.example', UserMatchQuality::full],
|
|
['cand1@test.domain', 'cand1@test.domain', UserMatchQuality::full]
|
|
], $result->emails(), 'matchcandidate-self-emails'
|
|
);
|
|
$this->assertCount(3, $result->ips(), 'matchcandidate-self-ips');
|
|
$this->assertEquals(400, $result->score(), 'matchcandidate-self-score');
|
|
$this->assertEquals([
|
|
'usernames' => [UserMatchQuality::full->value => 2, UserMatchQuality::partial->value => 2],
|
|
'emails' => [UserMatchQuality::full->value => 2],
|
|
'ips' => [UserMatchQuality::full->value => 3]
|
|
], $result->summary(), 'matchcandidate-self-summary'
|
|
);
|
|
}
|
|
|
|
public function testMatchNamesEmails(): void {
|
|
$c2 = new MatchCandidate(['cand1'], ['someother@email.example'], []);
|
|
$result = new MatchResult();
|
|
$this->mc->matchNamesEmails($c2, $result);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-matchNamesEmails-matches');
|
|
$this->assertEquals(['usernames' => [UserMatchQuality::partial->value => 1]],
|
|
$result->summary(), 'matchcandidate-matchNamesEmails-summary');
|
|
$this->assertEquals([['cand1@test.domain', 'cand1', UserMatchQuality::partial]],
|
|
$result->usernames(), 'matchcandidate-matchNamesEmails-usernames');
|
|
}
|
|
|
|
public function testMatchNames(): void {
|
|
$c2 = new MatchCandidate(['cand1'], [], []);
|
|
$result = new MatchResult();
|
|
$this->mc->matchNames($c2, $result);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-matchNames-matches');
|
|
$this->assertEquals(['usernames' => [UserMatchQuality::full->value => 1]],
|
|
$result->summary(), 'matchcandidate-matchNames-summary');
|
|
|
|
$c3 = new MatchCandidate(['cand2'], [], []);
|
|
$result = new MatchResult();
|
|
$this->mc->matchNames($c3, $result);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-matchNames-matches2');
|
|
$this->assertEquals(['usernames' => [UserMatchQuality::partial->value => 1]],
|
|
$result->summary(), 'matchcandidate-matchNames-summary2');
|
|
|
|
$c4 = new MatchCandidate(['dude'], [], []);
|
|
$result = new MatchResult();
|
|
$this->mc->matchNames($c4, $result);
|
|
$this->assertFalse($result->hasMatch(), 'matchcandidate-matchNames-nomatch');
|
|
}
|
|
|
|
public function testMatchEmails(): void {
|
|
$c2 = new MatchCandidate([], ['some@email.example'], []);
|
|
$result = new MatchResult();
|
|
$this->mc->matchEmails($c2, $result);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-matchEmails-matches');
|
|
$this->assertEquals(['emails' => [UserMatchQuality::full->value => 1]],
|
|
$result->summary(), 'matchcandidate-matchEmails-summary');
|
|
|
|
$c3 = new MatchCandidate([], ['some1@email.example'], []);
|
|
$result = new MatchResult();
|
|
$this->mc->matchEmails($c3, $result);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-matchEmails-matches2');
|
|
$this->assertEquals(['emails' => [UserMatchQuality::weak->value => 1]],
|
|
$result->summary(), 'matchcandidate-matchEmails-summary2');
|
|
|
|
$c4 = new MatchCandidate([], ['e@b.c'], []);
|
|
$result = new MatchResult();
|
|
$this->mc->matchEmails($c4, $result);
|
|
$this->assertFalse($result->hasMatch(), 'matchcandidate-matchEmails-nomatch');
|
|
}
|
|
|
|
public function testMatchIps(): void {
|
|
$c2 = new MatchCandidate([], [], [['1.2.3.4', new \DateTimeImmutable(), null]]);
|
|
$result = new MatchResult();
|
|
$this->mc->matchIps($c2, $result);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-matchIps-matches');
|
|
$this->assertEquals(['ips' => [UserMatchQuality::full->value => 1]],
|
|
$result->summary(), 'matchcandidate-matchIps-summary');
|
|
|
|
$c3 = new MatchCandidate([], [], [['1.2.3.4', new \DateTimeImmutable('2018-04-04 12:34'), new \DateTimeImmutable('2018-06-04 22:43')]]);
|
|
$result = new MatchResult();
|
|
$this->mc->matchIps($c3, $result);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-matchIps-matches2');
|
|
$this->assertEquals(['ips' => [UserMatchQuality::partial->value => 1]],
|
|
$result->summary(), 'matchcandidate-matchIps-summary2');
|
|
|
|
$c4 = new MatchCandidate([], [], [['1.2.3.4', null, null]]);
|
|
$result = new MatchResult();
|
|
$this->mc->matchIps($c4, $result);
|
|
|
|
$this->assertTrue($result->hasMatch(), 'matchcandidate-matchIps-matches3');
|
|
$this->assertEquals(['ips' => [UserMatchQuality::weak->value => 1]],
|
|
$result->summary(), 'matchcandidate-matchIps-summary3');
|
|
|
|
$c5 = new MatchCandidate([], [], [['6.2.3.4', new \DateTimeImmutable(), new \DateTimeImmutable()]]);
|
|
$result = new MatchResult();
|
|
$this->mc->matchIps($c5, $result);
|
|
$this->assertFalse($result->hasMatch(), 'matchcandidate-matchIps-nomatch');
|
|
}
|
|
|
|
public function testCleanupEmail(): void {
|
|
$this->assertEquals(['te.st', 'test.domain'], $this->mc->cleanupEmail('te.st+1@test.domain'), 'matchcandidate-cleanupemail-basic');
|
|
$this->assertEquals(['te.st', 'proton.me'], $this->mc->cleanupEmail('te.st@pm.me'), 'matchcandidate-cleanupemail-proton');
|
|
$this->assertEquals(['test', 'gmail.com'], $this->mc->cleanupEmail('t.e.s.t+abc1@googlemail.com'), 'matchcandidate-cleanupemail-gmail');
|
|
}
|
|
}
|