Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Feature/UserTest.php
<?php | <?php | ||||
namespace Tests\Feature; | namespace Tests\Feature; | ||||
use App\Domain; | use App\Domain; | ||||
use App\Group; | use App\Group; | ||||
use App\Package; | |||||
use App\PackageSku; | |||||
use App\Sku; | |||||
use App\User; | use App\User; | ||||
use Carbon\Carbon; | use Carbon\Carbon; | ||||
use Illuminate\Support\Facades\Queue; | use Illuminate\Support\Facades\Queue; | ||||
use Tests\TestCase; | use Tests\TestCase; | ||||
class UserTest extends TestCase | class UserTest extends TestCase | ||||
{ | { | ||||
/** | /** | ||||
* {@inheritDoc} | * {@inheritDoc} | ||||
*/ | */ | ||||
public function setUp(): void | public function setUp(): void | ||||
{ | { | ||||
parent::setUp(); | parent::setUp(); | ||||
$this->deleteTestUser('user-test@' . \config('app.domain')); | $this->deleteTestUser('user-test@' . \config('app.domain')); | ||||
$this->deleteTestUser('UserAccountA@UserAccount.com'); | $this->deleteTestUser('UserAccountA@UserAccount.com'); | ||||
$this->deleteTestUser('UserAccountB@UserAccount.com'); | $this->deleteTestUser('UserAccountB@UserAccount.com'); | ||||
$this->deleteTestUser('UserAccountC@UserAccount.com'); | $this->deleteTestUser('UserAccountC@UserAccount.com'); | ||||
$this->deleteTestGroup('test-group@UserAccount.com'); | $this->deleteTestGroup('test-group@UserAccount.com'); | ||||
$this->deleteTestResource('test-resource@UserAccount.com'); | $this->deleteTestResource('test-resource@UserAccount.com'); | ||||
$this->deleteTestSharedFolder('test-folder@UserAccount.com'); | $this->deleteTestSharedFolder('test-folder@UserAccount.com'); | ||||
$this->deleteTestDomain('UserAccount.com'); | $this->deleteTestDomain('UserAccount.com'); | ||||
$this->deleteTestDomain('UserAccountAdd.com'); | $this->deleteTestDomain('UserAccountAdd.com'); | ||||
Package::where('title', 'test-package')->delete(); | |||||
} | } | ||||
/** | /** | ||||
* {@inheritDoc} | * {@inheritDoc} | ||||
*/ | */ | ||||
public function tearDown(): void | public function tearDown(): void | ||||
{ | { | ||||
\App\TenantSetting::truncate(); | \App\TenantSetting::truncate(); | ||||
Package::where('title', 'test-package')->delete(); | |||||
$this->deleteTestUser('user-test@' . \config('app.domain')); | $this->deleteTestUser('user-test@' . \config('app.domain')); | ||||
$this->deleteTestUser('UserAccountA@UserAccount.com'); | $this->deleteTestUser('UserAccountA@UserAccount.com'); | ||||
$this->deleteTestUser('UserAccountB@UserAccount.com'); | $this->deleteTestUser('UserAccountB@UserAccount.com'); | ||||
$this->deleteTestUser('UserAccountC@UserAccount.com'); | $this->deleteTestUser('UserAccountC@UserAccount.com'); | ||||
$this->deleteTestGroup('test-group@UserAccount.com'); | $this->deleteTestGroup('test-group@UserAccount.com'); | ||||
$this->deleteTestResource('test-resource@UserAccount.com'); | $this->deleteTestResource('test-resource@UserAccount.com'); | ||||
$this->deleteTestSharedFolder('test-folder@UserAccount.com'); | $this->deleteTestSharedFolder('test-folder@UserAccount.com'); | ||||
$this->deleteTestDomain('UserAccount.com'); | $this->deleteTestDomain('UserAccount.com'); | ||||
$this->deleteTestDomain('UserAccountAdd.com'); | $this->deleteTestDomain('UserAccountAdd.com'); | ||||
parent::tearDown(); | parent::tearDown(); | ||||
} | } | ||||
/** | /** | ||||
* Tests for User::assignPackage() | * Tests for User::assignPackage() | ||||
*/ | */ | ||||
public function testAssignPackage(): void | public function testAssignPackage(): void | ||||
{ | { | ||||
$user = $this->getTestUser('user-test@' . \config('app.domain')); | $user = $this->getTestUser('user-test@' . \config('app.domain')); | ||||
$wallet = $user->wallets()->first(); | $wallet = $user->wallets()->first(); | ||||
$skuGroupware = Sku::withEnvTenantContext()->where('title', 'groupware')->first(); // cost: 490 | |||||
$skuMailbox = Sku::withEnvTenantContext()->where('title', 'mailbox')->first(); // cost: 500 | |||||
$skuStorage = Sku::withEnvTenantContext()->where('title', 'storage')->first(); // cost: 25 | |||||
$package = Package::create([ | |||||
'title' => 'test-package', | |||||
'name' => 'Test Account', | |||||
'description' => 'Test account.', | |||||
'discount_rate' => 0, | |||||
]); | |||||
$package = \App\Package::withEnvTenantContext()->where('title', 'kolab')->first(); | // WARNING: saveMany() sets package_skus.cost = skus.cost | ||||
$package->skus()->saveMany([ | |||||
$skuMailbox, | |||||
$skuGroupware, | |||||
$skuStorage | |||||
]); | |||||
$package->skus()->updateExistingPivot($skuStorage, ['qty' => 2, 'cost' => null], false); | |||||
$package->skus()->updateExistingPivot($skuMailbox, ['cost' => null], false); | |||||
$package->skus()->updateExistingPivot($skuGroupware, ['cost' => 100], false); | |||||
$user->assignPackage($package); | $user->assignPackage($package); | ||||
$sku = \App\Sku::withEnvTenantContext()->where('title', 'mailbox')->first(); | $this->assertCount(4, $user->entitlements()->get()); // mailbox + groupware + 2 x storage | ||||
$entitlement = \App\Entitlement::where('wallet_id', $wallet->id) | $entitlement = $wallet->entitlements()->where('sku_id', $skuMailbox->id)->first(); | ||||
->where('sku_id', $sku->id)->first(); | $this->assertSame($skuMailbox->id, $entitlement->sku->id); | ||||
$this->assertSame($wallet->id, $entitlement->wallet->id); | |||||
$this->assertEquals($user->id, $entitlement->entitleable_id); | |||||
$this->assertTrue($entitlement->entitleable instanceof \App\User); | |||||
$this->assertSame($skuMailbox->cost, $entitlement->cost); | |||||
$this->assertNotNull($entitlement); | $entitlement = $wallet->entitlements()->where('sku_id', $skuGroupware->id)->first(); | ||||
$this->assertSame($sku->id, $entitlement->sku->id); | $this->assertSame($skuGroupware->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); | ||||
$this->assertCount(7, $user->entitlements()->get()); | $this->assertSame(100, $entitlement->cost); | ||||
$entitlement = $wallet->entitlements()->where('sku_id', $skuStorage->id)->first(); | |||||
$this->assertSame($skuStorage->id, $entitlement->sku->id); | |||||
$this->assertSame($wallet->id, $entitlement->wallet->id); | |||||
$this->assertEquals($user->id, $entitlement->entitleable_id); | |||||
$this->assertTrue($entitlement->entitleable instanceof \App\User); | |||||
$this->assertSame(0, $entitlement->cost); | |||||
} | } | ||||
/** | /** | ||||
* Tests for User::assignPlan() | * Tests for User::assignPlan() | ||||
*/ | */ | ||||
public function testAssignPlan(): void | public function testAssignPlan(): void | ||||
{ | { | ||||
$this->markTestIncomplete(); | $this->markTestIncomplete(); | ||||
} | } | ||||
/** | /** | ||||
* Tests for User::assignSku() | * Tests for User::assignSku() | ||||
*/ | */ | ||||
public function testAssignSku(): void | public function testAssignSku(): void | ||||
{ | { | ||||
$this->markTestIncomplete(); | $user = $this->getTestUser('user-test@' . \config('app.domain')); | ||||
$wallet = $user->wallets()->first(); | |||||
$skuStorage = Sku::withEnvTenantContext()->where('title', 'storage')->first(); | |||||
$skuMailbox = Sku::withEnvTenantContext()->where('title', 'mailbox')->first(); | |||||
$user->assignSku($skuMailbox); | |||||
$this->assertCount(1, $user->entitlements()->get()); | |||||
$entitlement = $wallet->entitlements()->where('sku_id', $skuMailbox->id)->first(); | |||||
$this->assertSame($skuMailbox->id, $entitlement->sku->id); | |||||
$this->assertSame($wallet->id, $entitlement->wallet->id); | |||||
$this->assertEquals($user->id, $entitlement->entitleable_id); | |||||
$this->assertTrue($entitlement->entitleable instanceof \App\User); | |||||
$this->assertSame($skuMailbox->cost, $entitlement->cost); | |||||
// Test units_free handling | |||||
for ($x = 0; $x < 5; $x++) { | |||||
$user->assignSku($skuStorage); | |||||
} | |||||
$entitlements = $user->entitlements()->where('sku_id', $skuStorage->id) | |||||
->where('cost', 0) | |||||
->get(); | |||||
$this->assertCount(5, $entitlements); | |||||
$user->assignSku($skuStorage); | |||||
$entitlements = $user->entitlements()->where('sku_id', $skuStorage->id) | |||||
->where('cost', $skuStorage->cost) | |||||
->get(); | |||||
$this->assertCount(1, $entitlements); | |||||
} | } | ||||
/** | /** | ||||
* Verify a wallet assigned a controller is among the accounts of the assignee. | * Verify a wallet assigned a controller is among the accounts of the assignee. | ||||
*/ | */ | ||||
public function testAccounts(): void | public function testAccounts(): void | ||||
{ | { | ||||
$userA = $this->getTestUser('UserAccountA@UserAccount.com'); | $userA = $this->getTestUser('UserAccountA@UserAccount.com'); | ||||
▲ Show 20 Lines • Show All 1,354 Lines • Show Last 20 Lines |