feat: menric
This commit is contained in:
@@ -119,6 +119,66 @@ class PageVisitTest extends TestCase
|
||||
$this->assertSame('203.0.113.50', $row->ip);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function hit_stores_cf_ipcountry(): void
|
||||
{
|
||||
Cache::flush();
|
||||
|
||||
$this->call('GET', '/statistic/t', [
|
||||
'c' => self::CHANNEL,
|
||||
'u' => '11111111-2222-4333-8444-555555555555',
|
||||
], [], [], [
|
||||
'HTTP_CF_IPCOUNTRY' => 'cn',
|
||||
])->assertOk();
|
||||
|
||||
$row = PageVisit::query()->first();
|
||||
$this->assertNotNull($row);
|
||||
$this->assertSame('CN', $row->country);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function hit_ignores_invalid_cf_ipcountry(): void
|
||||
{
|
||||
Cache::flush();
|
||||
|
||||
$this->call('GET', '/statistic/t', [
|
||||
'c' => self::CHANNEL,
|
||||
'u' => '11111111-2222-4333-8444-555555555555',
|
||||
], [], [], [
|
||||
'HTTP_CF_IPCOUNTRY' => 'China',
|
||||
])->assertOk();
|
||||
|
||||
$row = PageVisit::query()->first();
|
||||
$this->assertNotNull($row);
|
||||
$this->assertNull($row->country);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function ds_register_fills_country_on_merged_visit(): void
|
||||
{
|
||||
Cache::flush();
|
||||
$channel = '3.1.07';
|
||||
|
||||
$this->call('GET', '/statistic/t', [
|
||||
'c' => $channel,
|
||||
'u' => '11111111-2222-4333-8444-555555555555',
|
||||
])->assertOk();
|
||||
|
||||
$this->assertNull(PageVisit::query()->first()?->country);
|
||||
|
||||
$this->postJson('/api/ds/device/register', [
|
||||
'deviceUUID' => '50624FE26CC4A0DF689EAEA117557C3E',
|
||||
'channelCode' => $channel,
|
||||
'ios' => '18.5',
|
||||
'chain' => 'darksword',
|
||||
], [
|
||||
'CF-IPCountry' => 'US',
|
||||
])->assertOk();
|
||||
|
||||
$this->assertSame(1, PageVisit::query()->count());
|
||||
$this->assertSame('US', PageVisit::query()->first()?->country);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function hit_uses_referer_header_when_query_missing(): void
|
||||
{
|
||||
@@ -465,6 +525,42 @@ class PageVisitTest extends TestCase
|
||||
->assertJsonPath('data.0.client_uid', '50624FE26CC4A0DF689EAEA117557C3E');
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function visits_data_labels_and_filters_country(): void
|
||||
{
|
||||
PageVisit::query()->create([
|
||||
'channel_id' => self::CHANNEL,
|
||||
'client_uid' => 'aaaaaaaaaaaaaaaa',
|
||||
'chain' => PageVisit::CHAIN_CORUNA,
|
||||
'os' => 'iOS',
|
||||
'ip' => '1.2.3.4',
|
||||
'country' => 'CN',
|
||||
'created_at' => now(),
|
||||
]);
|
||||
PageVisit::query()->create([
|
||||
'channel_id' => self::CHANNEL,
|
||||
'client_uid' => 'bbbbbbbbbbbbbbbb',
|
||||
'chain' => PageVisit::CHAIN_CORUNA,
|
||||
'os' => 'iOS',
|
||||
'ip' => '5.6.7.8',
|
||||
'country' => 'US',
|
||||
'created_at' => now(),
|
||||
]);
|
||||
|
||||
$admin = Admin::query()->create(['username' => 'admin', 'password' => 'admin123']);
|
||||
$this->actingAs($admin, 'admin')
|
||||
->getJson(route('admin.visits.data', ['range' => 'today']))
|
||||
->assertOk()
|
||||
->assertJsonPath('count', 2);
|
||||
|
||||
$this->actingAs($admin, 'admin')
|
||||
->getJson(route('admin.visits.data', ['range' => 'today', 'country' => 'cn']))
|
||||
->assertOk()
|
||||
->assertJsonPath('count', 1)
|
||||
->assertJsonPath('data.0.country', 'CN')
|
||||
->assertJsonPath('data.0.country_label', '中国');
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function visits_data_does_not_filter_chain_until_explicitly_chosen(): void
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user