This commit is contained in:
hashbro
2026-08-27 01:28:15 +08:00
parent 3a2be309dc
commit e660335808
9 changed files with 178 additions and 11 deletions
+82
View File
@@ -65,6 +65,33 @@ class PageVisitTest extends TestCase
$this->assertSame('https://example.com/from', $row->referer);
}
#[Test]
public function hit_marks_darksword_for_ios_after_17_2_1_before_18_7(): void
{
$cases = [
['17_2_1', PageVisit::CHAIN_CORUNA, '17.2.1'],
['17_2_2', PageVisit::CHAIN_DARKSWORD, '17.2.2'],
['18_0', PageVisit::CHAIN_DARKSWORD, '18.0'],
['18_6_2', PageVisit::CHAIN_DARKSWORD, '18.6.2'],
['18_7', PageVisit::CHAIN_CORUNA, '18.7'],
];
foreach ($cases as [$token, $chain, $osVersion]) {
Cache::flush();
PageVisit::query()->delete();
$ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS '.$token.' like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/'.$osVersion.' Mobile/15E148 Safari/604.1';
$this->call('GET', '/statistic/t', [
'c' => self::CHANNEL,
'u' => '11111111-2222-4333-8444-555555555555',
], [], [], [
'HTTP_USER_AGENT' => $ua,
])->assertOk();
$row = PageVisit::query()->first();
$this->assertNotNull($row, $osVersion);
$this->assertSame($osVersion, $row->os_version, $osVersion);
$this->assertSame($chain, $row->chain, $osVersion);
}
}
#[Test]
public function hit_uses_x_forwarded_for_when_proxies_trusted(): void
{
@@ -114,6 +141,61 @@ class PageVisitTest extends TestCase
$this->assertNotSame($a, $d);
}
#[Test]
public function statistic_and_ds_register_merge_into_one_visit(): void
{
Cache::flush();
$channel = '3.1.07';
$ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1';
$this->call('GET', '/statistic/t', [
'c' => $channel,
'u' => '11111111-2222-4333-8444-555555555555',
'p' => '/channel/'.$channel.'/weifile/weifile.html',
], [], [], [
'HTTP_USER_AGENT' => $ua,
])->assertOk();
$this->postJson('/api/ds/device/register', [
'deviceUUID' => '50624FE26CC4A0DF689EAEA117557C3E',
'channelCode' => $channel,
'ios' => '18.5',
'chain' => 'darksword',
'user_agent' => $ua,
])->assertOk();
$this->assertSame(1, PageVisit::query()->count());
$row = PageVisit::query()->first();
$this->assertSame($channel, $row->channel_id);
$this->assertSame(PageVisit::CHAIN_DARKSWORD, $row->chain);
$this->assertSame('50624FE26CC4A0DF689EAEA117557C3E', $row->client_uid);
$this->assertSame('18.5', $row->os_version);
}
#[Test]
public function statistic_after_ds_register_does_not_add_a_second_visit(): void
{
Cache::flush();
$channel = '3.1.07';
$this->postJson('/api/ds/device/register', [
'deviceUUID' => '50624FE26CC4A0DF689EAEA117557C3E',
'channelCode' => $channel,
'ios' => '18.5',
'chain' => 'darksword',
])->assertOk();
$this->call('GET', '/statistic/t', [
'c' => $channel,
'u' => '11111111-2222-4333-8444-555555555555',
])->assertOk();
$this->assertSame(1, PageVisit::query()->count());
$row = PageVisit::query()->first();
$this->assertSame(PageVisit::CHAIN_DARKSWORD, $row->chain);
$this->assertSame('50624FE26CC4A0DF689EAEA117557C3E', $row->client_uid);
}
#[Test]
public function hit_debounces_duplicate_uid(): void
{