Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Feature/EntitlementTest.php
Show All 37 Lines | public function tearDown(): void | ||||
parent::tearDown(); | parent::tearDown(); | ||||
} | } | ||||
/** | /** | ||||
* Test for Entitlement::costsPerDay() | * Test for Entitlement::costsPerDay() | ||||
*/ | */ | ||||
public function testCostsPerDay(): void | public function testCostsPerDay(): void | ||||
{ | { | ||||
// 444 | // 500 | ||||
// 28 days: 15.86 | // 28 days: 17.86 | ||||
// 31 days: 14.32 | // 31 days: 16.13 | ||||
$user = $this->getTestUser('entitlement-test@kolabnow.com'); | $user = $this->getTestUser('entitlement-test@kolabnow.com'); | ||||
$package = Package::where('title', 'kolab')->first(); | $package = Package::withEnvTenantContext()->where('title', 'kolab')->first(); | ||||
$mailbox = Sku::where('title', 'mailbox')->first(); | $mailbox = Sku::withEnvTenantContext()->where('title', 'mailbox')->first(); | ||||
$user->assignPackage($package); | $user->assignPackage($package); | ||||
$entitlement = $user->entitlements->where('sku_id', $mailbox->id)->first(); | $entitlement = $user->entitlements->where('sku_id', $mailbox->id)->first(); | ||||
$costsPerDay = $entitlement->costsPerDay(); | $costsPerDay = $entitlement->costsPerDay(); | ||||
$this->assertTrue($costsPerDay < 15.86); | $this->assertTrue($costsPerDay < 17.86); | ||||
$this->assertTrue($costsPerDay > 14.32); | $this->assertTrue($costsPerDay > 16.31); | ||||
} | } | ||||
/** | /** | ||||
* Tests for entitlements | * Tests for entitlements | ||||
* @todo This really should be in User or Wallet tests file | * @todo This really should be in User or Wallet tests file | ||||
*/ | */ | ||||
public function testEntitlements(): void | public function testEntitlements(): void | ||||
{ | { | ||||
$packageDomain = Package::where('title', 'domain-hosting')->first(); | $packageDomain = Package::withEnvTenantContext()->where('title', 'domain-hosting')->first(); | ||||
$packageKolab = Package::where('title', 'kolab')->first(); | $packageKolab = Package::withEnvTenantContext()->where('title', 'kolab')->first(); | ||||
$skuDomain = Sku::where('title', 'domain-hosting')->first(); | $skuDomain = Sku::withEnvTenantContext()->where('title', 'domain-hosting')->first(); | ||||
$skuMailbox = Sku::where('title', 'mailbox')->first(); | $skuMailbox = Sku::withEnvTenantContext()->where('title', 'mailbox')->first(); | ||||
$owner = $this->getTestUser('entitlement-test@kolabnow.com'); | $owner = $this->getTestUser('entitlement-test@kolabnow.com'); | ||||
$user = $this->getTestUser('entitled-user@custom-domain.com'); | $user = $this->getTestUser('entitled-user@custom-domain.com'); | ||||
$domain = $this->getTestDomain( | $domain = $this->getTestDomain( | ||||
'custom-domain.com', | 'custom-domain.com', | ||||
[ | [ | ||||
'status' => Domain::STATUS_NEW, | 'status' => Domain::STATUS_NEW, | ||||
'type' => Domain::TYPE_EXTERNAL, | 'type' => Domain::TYPE_EXTERNAL, | ||||
] | ] | ||||
); | ); | ||||
$domain->assignPackage($packageDomain, $owner); | $domain->assignPackage($packageDomain, $owner); | ||||
$owner->assignPackage($packageKolab); | $owner->assignPackage($packageKolab); | ||||
$owner->assignPackage($packageKolab, $user); | $owner->assignPackage($packageKolab, $user); | ||||
$wallet = $owner->wallets->first(); | $wallet = $owner->wallets->first(); | ||||
$this->assertCount(4, $owner->entitlements()->get()); | $this->assertCount(7, $owner->entitlements()->get()); | ||||
$this->assertCount(1, $skuDomain->entitlements()->where('wallet_id', $wallet->id)->get()); | $this->assertCount(1, $skuDomain->entitlements()->where('wallet_id', $wallet->id)->get()); | ||||
$this->assertCount(2, $skuMailbox->entitlements()->where('wallet_id', $wallet->id)->get()); | $this->assertCount(2, $skuMailbox->entitlements()->where('wallet_id', $wallet->id)->get()); | ||||
$this->assertCount(9, $wallet->entitlements); | $this->assertCount(15, $wallet->entitlements); | ||||
$this->backdateEntitlements( | $this->backdateEntitlements( | ||||
$owner->entitlements, | $owner->entitlements, | ||||
Carbon::now()->subMonthsWithoutOverflow(1) | Carbon::now()->subMonthsWithoutOverflow(1) | ||||
); | ); | ||||
$wallet->chargeEntitlements(); | $wallet->chargeEntitlements(); | ||||
$this->assertTrue($wallet->fresh()->balance < 0); | $this->assertTrue($wallet->fresh()->balance < 0); | ||||
} | } | ||||
/** | /** | ||||
* @todo This really should be in User tests file | * @todo This really should be in User tests file | ||||
*/ | */ | ||||
public function testEntitlementFunctions(): void | public function testEntitlementFunctions(): void | ||||
{ | { | ||||
$user = $this->getTestUser('entitlement-test@kolabnow.com'); | $user = $this->getTestUser('entitlement-test@kolabnow.com'); | ||||
$package = \App\Package::where('title', 'kolab')->first(); | $package = \App\Package::withEnvTenantContext()->where('title', 'kolab')->first(); | ||||
$user->assignPackage($package); | $user->assignPackage($package); | ||||
$wallet = $user->wallets()->first(); | $wallet = $user->wallets()->first(); | ||||
$this->assertNotNull($wallet); | $this->assertNotNull($wallet); | ||||
$sku = \App\Sku::where('title', 'mailbox')->first(); | $sku = \App\Sku::withEnvTenantContext()->where('title', 'mailbox')->first(); | ||||
$entitlement = Entitlement::where('wallet_id', $wallet->id) | $entitlement = Entitlement::where('wallet_id', $wallet->id) | ||||
->where('sku_id', $sku->id)->first(); | ->where('sku_id', $sku->id)->first(); | ||||
$this->assertNotNull($entitlement); | $this->assertNotNull($entitlement); | ||||
$this->assertSame($sku->id, $entitlement->sku->id); | $this->assertSame($sku->id, $entitlement->sku->id); | ||||
$this->assertSame($wallet->id, $entitlement->wallet->id); | $this->assertSame($wallet->id, $entitlement->wallet->id); | ||||
$this->assertEquals($user->id, $entitlement->entitleable->id); | $this->assertEquals($user->id, $entitlement->entitleable->id); | ||||
$this->assertTrue($entitlement->entitleable instanceof \App\User); | $this->assertTrue($entitlement->entitleable instanceof \App\User); | ||||
} | } | ||||
/** | /** | ||||
* Test Entitlement::entitlementTitle() | * Test Entitlement::entitlementTitle() | ||||
*/ | */ | ||||
public function testEntitlementTitle(): void | public function testEntitlementTitle(): void | ||||
{ | { | ||||
$packageDomain = Package::where('title', 'domain-hosting')->first(); | $packageDomain = Package::withEnvTenantContext()->where('title', 'domain-hosting')->first(); | ||||
$packageKolab = Package::where('title', 'kolab')->first(); | $packageKolab = Package::withEnvTenantContext()->where('title', 'kolab')->first(); | ||||
$user = $this->getTestUser('entitled-user@custom-domain.com'); | $user = $this->getTestUser('entitled-user@custom-domain.com'); | ||||
$group = $this->getTestGroup('test-group@custom-domain.com'); | $group = $this->getTestGroup('test-group@custom-domain.com'); | ||||
$domain = $this->getTestDomain( | $domain = $this->getTestDomain( | ||||
'custom-domain.com', | 'custom-domain.com', | ||||
[ | [ | ||||
'status' => Domain::STATUS_NEW, | 'status' => Domain::STATUS_NEW, | ||||
'type' => Domain::TYPE_EXTERNAL, | 'type' => Domain::TYPE_EXTERNAL, | ||||
] | ] | ||||
); | ); | ||||
$wallet = $user->wallets->first(); | $wallet = $user->wallets->first(); | ||||
$domain->assignPackage($packageDomain, $user); | $domain->assignPackage($packageDomain, $user); | ||||
$user->assignPackage($packageKolab); | $user->assignPackage($packageKolab); | ||||
$group->assignToWallet($wallet); | $group->assignToWallet($wallet); | ||||
$sku_mailbox = \App\Sku::where('title', 'mailbox')->first(); | $sku_mailbox = \App\Sku::withEnvTenantContext()->where('title', 'mailbox')->first(); | ||||
$sku_group = \App\Sku::where('title', 'group')->first(); | $sku_group = \App\Sku::withEnvTenantContext()->where('title', 'group')->first(); | ||||
$sku_domain = \App\Sku::where('title', 'domain-hosting')->first(); | $sku_domain = \App\Sku::withEnvTenantContext()->where('title', 'domain-hosting')->first(); | ||||
$entitlement = Entitlement::where('wallet_id', $wallet->id) | $entitlement = Entitlement::where('wallet_id', $wallet->id) | ||||
->where('sku_id', $sku_mailbox->id)->first(); | ->where('sku_id', $sku_mailbox->id)->first(); | ||||
$this->assertSame($user->email, $entitlement->entitleableTitle()); | $this->assertSame($user->email, $entitlement->entitleableTitle()); | ||||
$entitlement = Entitlement::where('wallet_id', $wallet->id) | $entitlement = Entitlement::where('wallet_id', $wallet->id) | ||||
->where('sku_id', $sku_group->id)->first(); | ->where('sku_id', $sku_group->id)->first(); | ||||
Show All 9 Lines |