feat(mailbox): Implement tier-based dynamic expiration with real-time Alpine.js countdown

This commit is contained in:
idevakk
2026-03-06 01:33:15 +05:30
parent 3763847dd6
commit e79c3f79a2
3 changed files with 142 additions and 12 deletions

View File

@@ -86,4 +86,39 @@ class UserTierTest extends TestCase
$this->assertTrue($accessibleDomains->contains($publicDomain));
$this->assertFalse($accessibleDomains->contains($premiumDomain));
}
public function test_mailbox_expiration_is_based_on_user_tier()
{
$domain = Domain::factory()->create(['allowed_types' => ['public'], 'name' => 'public.com']);
// Test Guest (1 day)
\Livewire\Livewire::test(\App\Livewire\Mailbox::class)
->call('autoCreateRandomMailbox');
$guestMailbox = \App\Models\Mailbox::latest()->first();
$this->assertEquals(1, round(now()->diffInDays($guestMailbox->expires_at)));
// Test Free (3 days)
$freeUser = User::factory()->free()->create();
$this->actingAs($freeUser);
\Livewire\Livewire::test(\App\Livewire\Mailbox::class)
->call('autoCreateRandomMailbox');
$freeMailbox = \App\Models\Mailbox::where('user_id', $freeUser->id)->first();
$this->assertEquals(3, round(now()->diffInDays($freeMailbox->expires_at)));
// Test Pro (7 days)
$proUser = User::factory()->pro()->create();
$this->actingAs($proUser);
\Livewire\Livewire::test(\App\Livewire\Mailbox::class)
->call('autoCreateRandomMailbox');
$proMailbox = \App\Models\Mailbox::where('user_id', $proUser->id)->first();
$this->assertEquals(7, round(now()->diffInDays($proMailbox->expires_at)));
// Test Enterprise (14 days)
$entUser = User::factory()->enterprise()->create();
$this->actingAs($entUser);
\Livewire\Livewire::test(\App\Livewire\Mailbox::class)
->call('autoCreateRandomMailbox');
$entMailbox = \App\Models\Mailbox::where('user_id', $entUser->id)->first();
$this->assertEquals(14, round(now()->diffInDays($entMailbox->expires_at)));
}
}