Files
huginn/tests/Feature/GuestPreviewTest.php
m105 72b87ab579 Track and display subdomains under their root domain
Adds sites.root_domain (indexed string, backfilled for existing rows)
computed via a naive "last two labels" heuristic (App\Support\RootDomain)
— good enough for example.com/somesite.es, but wrong for two-part
public suffixes like .co.uk. Doing that correctly needs the Mozilla
Public Suffix List; flagged as a known simplification rather than
built now.

Deliberately not a hard FK: like Backlink.target_domain, a subdomain
can get indexed before its root domain does (or vice versa), so
Site::subdomains()/rootSite() match on the domain string rather than
requiring the relationship to exist at write time.

Site detail page: a root domain shows a paginated "Subdomains"
section (same guest-preview cap as Pages/Backlinks); a subdomain
shows "Subdomain of {root}" linking back, when the root is itself
indexed.

Verified against real data: 21k.ro correctly lists its two known
subdomains (buzau.21k.ro, timisoara.21k.ro), each of which correctly
links back to 21k.ro. Added SubdomainsTest (root lists subdomains,
subdomain links to root, empty state) — full suite (31 tests) passes.
2026-07-25 15:44:12 +03:00

46 lines
1.1 KiB
PHP

<?php
namespace Tests\Feature;
use App\Models\Site;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class GuestPreviewTest extends TestCase
{
use RefreshDatabase;
private function seedSites(int $count): void
{
for ($i = 0; $i < $count; $i++) {
Site::create([
'collection' => 'CC-MAIN-TEST',
'domain' => "example{$i}.com",
'root_domain' => "example{$i}.com",
'url' => "https://example{$i}.com/",
]);
}
}
public function test_guest_sees_only_a_preview_of_sites(): void
{
$this->seedSites(8);
$response = $this->get(route('sites.index'));
$response->assertOk();
$response->assertSeeText('Showing a preview (5 of 8 results)');
}
public function test_authenticated_user_sees_all_sites(): void
{
$this->seedSites(8);
$response = $this->actingAs(User::factory()->create())->get(route('sites.index'));
$response->assertOk();
$response->assertDontSeeText('Showing a preview');
}
}