reseller() ->create([ 'max_events_per_year' => 5, ]); $tenant = Tenant::factory()->create([ 'event_credits_balance' => 0, ]); TenantPackage::factory()->for($tenant)->for($package)->create([ 'used_events' => 1, 'active' => true, ]); $this->assertTrue($tenant->consumeEventAllowance()); $updatedPackage = $tenant->getActiveResellerPackage(); $this->assertNotNull($updatedPackage); $this->assertSame(2, $updatedPackage->used_events); } public function test_consume_event_allowance_decrements_credits_when_no_package(): void { $tenant = Tenant::factory()->create([ 'event_credits_balance' => 2, ]); $this->assertTrue($tenant->consumeEventAllowance(1, 'event.create', 'Event #1 created')); $tenant->refresh(); $this->assertSame(1, $tenant->event_credits_balance); $this->assertDatabaseHas('event_credits_ledger', [ 'tenant_id' => $tenant->id, 'delta' => -1, 'reason' => 'event.create', 'note' => 'Event #1 created', ]); } public function test_consume_event_allowance_returns_false_without_package_or_credits(): void { $tenant = Tenant::factory()->create([ 'event_credits_balance' => 0, ]); $this->assertFalse($tenant->consumeEventAllowance()); $this->assertDatabaseCount('event_credits_ledger', 0); } }