Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Feature/SkuTest.php
<?php | <?php | ||||
namespace Tests\Feature; | namespace Tests\Feature; | ||||
use App\Domain; | use App\Domain; | ||||
use App\Entitlement; | use App\Entitlement; | ||||
use App\Handlers; | use App\Handlers; | ||||
use App\Quota; | |||||
use App\Sku; | use App\Sku; | ||||
use App\User; | use App\User; | ||||
use Tests\TestCase; | use Tests\TestCase; | ||||
class SkuTest extends TestCase | class SkuTest extends TestCase | ||||
{ | { | ||||
public function setUp(): void | public function setUp(): void | ||||
{ | { | ||||
parent::setUp(); | parent::setUp(); | ||||
User::where('email', 'sku-test-user@custom-domain.com')->delete(); | $this->deleteTestUser('sku-test-user@custom-domain.com'); | ||||
Domain::where('namespace', 'custom-domain.com')->delete(); | $this->deleteTestDomain('custom-domain.com'); | ||||
} | |||||
public function tearDown(): void | |||||
{ | |||||
$this->deleteTestUser('sku-test-user@custom-domain.com'); | |||||
$this->deleteTestDomain('custom-domain.com'); | |||||
parent::tearDown(); | |||||
} | } | ||||
/** | /** | ||||
* Tests for Sku::registerEntitlements() | * Tests for Sku::registerEntitlements() | ||||
*/ | */ | ||||
public function testRegisterEntitlement(): void | public function testRegisterEntitlement(): void | ||||
machniak: As registerEntitlement() method does not exist now, I think we need tests for Package::assign()… | |||||
{ | { | ||||
// TODO: This test depends on seeded SKUs, but probably should not | // TODO: This test depends on seeded SKUs, but probably should not | ||||
$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, | ||||
] | ] | ||||
); | ); | ||||
\Log::debug(var_export($domain->toArray(), true)); | |||||
$user = $this->getTestUser('sku-test-user@custom-domain.com'); | $user = $this->getTestUser('sku-test-user@custom-domain.com'); | ||||
$wallet = $user->wallets()->first(); | $wallet = $user->wallets()->first(); | ||||
// \App\Handlers\Mailbox SKU | // \App\Handlers\Mailbox SKU | ||||
// Note, we're testing mailbox SKU before domain SKU as it may potentially fail in that order | // Note, we're testing mailbox SKU before domain SKU as it may potentially fail in that | ||||
// order | |||||
$sku = Sku::where('title', 'mailbox')->first(); | $sku = Sku::where('title', 'mailbox')->first(); | ||||
$sku->registerEntitlement($user); | Entitlement::create( | ||||
[ | |||||
'owner_id' => $user->id, | |||||
'wallet_id' => $wallet->id, | |||||
'sku_id' => $sku->id, | |||||
'entitleable_id' => $user->id, | |||||
'entitleable_type' => User::class | |||||
] | |||||
); | |||||
$entitlements = $sku->entitlements()->where('owner_id', $user->id)->get(); | $entitlements = $sku->entitlements()->where('owner_id', $user->id)->get(); | ||||
$wallet->refresh(); | $wallet->refresh(); | ||||
if ($sku->active) { | if ($sku->active) { | ||||
$balance = -$sku->cost; | $balance = -$sku->cost; | ||||
$this->assertCount(1, $entitlements); | $this->assertCount(1, $entitlements); | ||||
$this->assertEquals($user->id, $entitlements[0]->entitleable_id); | $this->assertEquals($user->id, $entitlements[0]->entitleable_id); | ||||
$this->assertSame(Handlers\Mailbox::entitleableClass(), $entitlements[0]->entitleable_type); | $this->assertSame( | ||||
Handlers\Mailbox::entitleableClass(), | |||||
$entitlements[0]->entitleable_type | |||||
); | |||||
Not Done Inline ActionsThis line wasn't really that long, should we change the limit? machniak: This line wasn't really that long, should we change the limit? | |||||
} else { | } else { | ||||
$this->assertCount(0, $entitlements); | $this->assertCount(0, $entitlements); | ||||
} | } | ||||
$this->assertEquals($balance, $wallet->balance); | $this->assertEquals($balance, $wallet->balance); | ||||
// \App\Handlers\Domain SKU | // \App\Handlers\Domain SKU | ||||
$sku = Sku::where('title', 'domain')->first(); | $sku = Sku::where('title', 'domain')->first(); | ||||
$sku->registerEntitlement($user, [$domain]); | Entitlement::create( | ||||
[ | |||||
'owner_id' => $user->id, | |||||
'wallet_id' => $wallet->id, | |||||
'sku_id' => $sku->id, | |||||
'entitleable_id' => $domain->id, | |||||
'entitleable_type' => Domain::class | |||||
] | |||||
); | |||||
$entitlements = $sku->entitlements->where('owner_id', $user->id); | |||||
foreach ($entitlements as $entitlement) { | |||||
\Log::debug(var_export($entitlement->toArray(), true)); | |||||
} | |||||
$entitlements = $sku->entitlements()->where('owner_id', $user->id)->get(); | |||||
$wallet->refresh(); | $wallet->refresh(); | ||||
if ($sku->active) { | if ($sku->active) { | ||||
$balance -= $sku->cost; | $balance -= $sku->cost; | ||||
$this->assertCount(1, $entitlements); | $this->assertCount(1, $entitlements); | ||||
$this->assertEquals($domain->id, $entitlements[0]->entitleable_id); | |||||
$this->assertSame(Handlers\Domain::entitleableClass(), $entitlements[0]->entitleable_type); | $_domain = Domain::find($entitlements->first()->entitleable_id); | ||||
$this->assertEquals( | |||||
$domain->id, | |||||
$entitlements->first()->entitleable_id, | |||||
var_export($_domain->toArray(), true) | |||||
); | |||||
$this->assertSame( | |||||
Handlers\Domain::entitleableClass(), | |||||
$entitlements->first()->entitleable_type | |||||
); | |||||
} else { | } else { | ||||
$this->assertCount(0, $entitlements); | $this->assertCount(0, $entitlements); | ||||
} | } | ||||
$this->assertEquals($balance, $wallet->balance); | $this->assertEquals($balance, $wallet->balance); | ||||
// \App\Handlers\DomainRegistration SKU | // \App\Handlers\DomainRegistration SKU | ||||
$sku = Sku::where('title', 'domain-registration')->first(); | $sku = Sku::where('title', 'domain-registration')->first(); | ||||
$sku->registerEntitlement($user, [$domain]); | Entitlement::create( | ||||
[ | |||||
'owner_id' => $user->id, | |||||
'wallet_id' => $user->wallets()->get()[0]->id, | |||||
'sku_id' => $sku->id, | |||||
'entitleable_id' => $domain->id, | |||||
'entitleable_type' => Domain::class | |||||
] | |||||
); | |||||
$entitlements = $sku->entitlements()->where('owner_id', $user->id)->get(); | $entitlements = $sku->entitlements->where('owner_id', $user->id); | ||||
$wallet->refresh(); | $wallet->refresh(); | ||||
if ($sku->active) { | if ($sku->active) { | ||||
$balance -= $sku->cost; | $balance -= $sku->cost; | ||||
$this->assertCount(1, $entitlements); | $this->assertCount(1, $entitlements); | ||||
$this->assertEquals($domain->id, $entitlements[0]->entitleable_id); | $this->assertEquals($domain->id, $entitlements->first()->entitleable_id); | ||||
$this->assertSame(Handlers\DomainRegistration::entitleableClass(), $entitlements[0]->entitleable_type); | $this->assertSame( | ||||
Handlers\DomainRegistration::entitleableClass(), | |||||
$entitlements->first()->entitleable_type | |||||
); | |||||
} else { | } else { | ||||
$this->assertCount(0, $entitlements); | $this->assertCount(0, $entitlements); | ||||
} | } | ||||
$this->assertEquals($balance, $wallet->balance); | $this->assertEquals($balance, $wallet->balance); | ||||
// \App\Handlers\DomainHosting SKU | // \App\Handlers\DomainHosting SKU | ||||
$sku = Sku::where('title', 'domain-hosting')->first(); | $sku = Sku::where('title', 'domain-hosting')->first(); | ||||
$sku->registerEntitlement($user, [$domain]); | Entitlement::create( | ||||
[ | |||||
'owner_id' => $user->id, | |||||
'wallet_id' => $wallet->id, | |||||
'sku_id' => $sku->id, | |||||
'entitleable_id' => $domain->id, | |||||
'entitleable_type' => Domain::class | |||||
] | |||||
); | |||||
$entitlements = $sku->entitlements()->where('owner_id', $user->id)->get(); | $entitlements = $sku->entitlements->where('owner_id', $user->id); | ||||
$wallet->refresh(); | $wallet->refresh(); | ||||
if ($sku->active) { | if ($sku->active) { | ||||
$balance -= $sku->cost; | $balance -= $sku->cost; | ||||
$this->assertCount(1, $entitlements); | $this->assertCount(1, $entitlements); | ||||
$this->assertEquals($domain->id, $entitlements[0]->entitleable_id); | $this->assertEquals($domain->id, $entitlements->first()->entitleable_id); | ||||
$this->assertSame(Handlers\DomainHosting::entitleableClass(), $entitlements[0]->entitleable_type); | $this->assertSame( | ||||
Handlers\DomainHosting::entitleableClass(), | |||||
$entitlements->first()->entitleable_type | |||||
); | |||||
} else { | } else { | ||||
$this->assertCount(0, $entitlements); | $this->assertCount(0, $entitlements); | ||||
} | } | ||||
$this->assertEquals($balance, $wallet->balance); | $this->assertEquals($balance, $wallet->balance); | ||||
// \App\Handlers\Groupware SKU | // \App\Handlers\Groupware SKU | ||||
$sku = Sku::where('title', 'groupware')->first(); | $sku = Sku::where('title', 'groupware')->first(); | ||||
$sku->registerEntitlement($user, [$domain]); | Entitlement::create( | ||||
[ | |||||
'owner_id' => $user->id, | |||||
'wallet_id' => $user->wallets()->get()[0]->id, | |||||
'sku_id' => $sku->id, | |||||
'entitleable_id' => $user->id, | |||||
'entitleable_type' => User::class | |||||
] | |||||
); | |||||
$entitlements = $sku->entitlements()->where('owner_id', $user->id)->get(); | $entitlements = $sku->entitlements->where('owner_id', $user->id); | ||||
$wallet->refresh(); | $wallet->refresh(); | ||||
if ($sku->active) { | if ($sku->active) { | ||||
$balance -= $sku->cost; | $balance -= $sku->cost; | ||||
$this->assertCount(1, $entitlements); | $this->assertCount(1, $entitlements); | ||||
$this->assertEquals($user->id, $entitlements[0]->entitleable_id); | $this->assertEquals($user->id, $entitlements->first()->entitleable_id); | ||||
$this->assertSame(Handlers\Mailbox::entitleableClass(), $entitlements[0]->entitleable_type); | $this->assertSame( | ||||
Handlers\Mailbox::entitleableClass(), | |||||
$entitlements->first()->entitleable_type | |||||
); | |||||
} else { | } else { | ||||
$this->assertCount(0, $entitlements); | $this->assertCount(0, $entitlements); | ||||
} | } | ||||
$this->assertEquals($balance, $wallet->balance); | $this->assertEquals($balance, $wallet->balance); | ||||
// \App\Handlers\Storage SKU | // \App\Handlers\Storage SKU | ||||
$sku = Sku::where('title', 'storage')->first(); | $sku = Sku::where('title', 'storage')->first(); | ||||
$sku->registerEntitlement($user, [$domain]); | Entitlement::create( | ||||
[ | |||||
'owner_id' => $user->id, | |||||
'wallet_id' => $wallet->id, | |||||
'sku_id' => $sku->id, | |||||
'entitleable_id' => $user->id, | |||||
'entitleable_type' => User::class | |||||
] | |||||
); | |||||
$entitlements = $sku->entitlements()->where('owner_id', $user->id)->get(); | $entitlements = $sku->entitlements->where('owner_id', $user->id); | ||||
$wallet->refresh(); | $wallet->refresh(); | ||||
if ($sku->active) { | if ($sku->active) { | ||||
$balance -= $sku->cost; | $balance -= $sku->cost; | ||||
// For Storage entitlement we expect additional Quota record | |||||
$quota = Quota::where('user_id', $user->id)->first(); | |||||
$this->assertTrue(!empty($quota)); | |||||
// TODO: This should be a constant and/or config option, and probably | |||||
// quota should not be in bytes | |||||
$this->assertSame(2147483648, $quota->value); | |||||
$this->assertCount(1, $entitlements); | $this->assertCount(1, $entitlements); | ||||
$this->assertEquals($quota->id, $entitlements[0]->entitleable_id); | |||||
$this->assertSame(Handlers\Storage::entitleableClass(), $entitlements[0]->entitleable_type); | |||||
} else { | } else { | ||||
$this->assertCount(0, $entitlements); | $this->assertCount(0, $entitlements); | ||||
} | } | ||||
$this->assertEquals($balance, $wallet->balance); | $this->assertEquals($balance, $wallet->balance); | ||||
} | } | ||||
public function testSkuPackages(): void | |||||
{ | |||||
$sku = Sku::where('title', 'mailbox')->first(); | |||||
$packages = $sku->packages; | |||||
$this->assertCount(2, $packages); | |||||
} | |||||
} | } |
As registerEntitlement() method does not exist now, I think we need tests for Package::assign() method in a similar manner.