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\User; | use App\User; | ||||
use Illuminate\Support\Facades\Queue; | use Illuminate\Support\Facades\Queue; | ||||
use Tests\TestCase; | use Tests\TestCase; | ||||
class UserTest extends TestCase | class UserTest extends TestCase | ||||
{ | { | ||||
public function setUp(): void | public function setUp(): void | ||||
{ | { | ||||
parent::setUp(); | parent::setUp(); | ||||
$this->deleteTestUser('user-create-test@' . \config('app.domain')); | $this->deleteTestUser('user-test@' . \config('app.domain')); | ||||
$this->deleteTestUser('userdeletejob@kolabnow.com'); | |||||
$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->deleteTestDomain('UserAccount.com'); | $this->deleteTestDomain('UserAccount.com'); | ||||
} | } | ||||
public function tearDown(): void | public function tearDown(): void | ||||
{ | { | ||||
$this->deleteTestUser('user-create-test@' . \config('app.domain')); | $this->deleteTestUser('user-test@' . \config('app.domain')); | ||||
$this->deleteTestUser('userdeletejob@kolabnow.com'); | |||||
$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->deleteTestDomain('UserAccount.com'); | $this->deleteTestDomain('UserAccount.com'); | ||||
parent::tearDown(); | parent::tearDown(); | ||||
} | } | ||||
Show All 26 Lines | class UserTest extends TestCase | ||||
*/ | */ | ||||
public function testUserCreateJob(): void | public function testUserCreateJob(): void | ||||
{ | { | ||||
// Fake the queue, assert that no jobs were pushed... | // Fake the queue, assert that no jobs were pushed... | ||||
Queue::fake(); | Queue::fake(); | ||||
Queue::assertNothingPushed(); | Queue::assertNothingPushed(); | ||||
$user = User::create([ | $user = User::create([ | ||||
'email' => 'user-create-test@' . \config('app.domain') | 'email' => 'user-test@' . \config('app.domain') | ||||
]); | ]); | ||||
Queue::assertPushed(\App\Jobs\UserCreate::class, 1); | Queue::assertPushed(\App\Jobs\UserCreate::class, 1); | ||||
Queue::assertPushed(\App\Jobs\UserCreate::class, function ($job) use ($user) { | Queue::assertPushed(\App\Jobs\UserCreate::class, function ($job) use ($user) { | ||||
$job_user = TestCase::getObjectProperty($job, 'user'); | $job_user = TestCase::getObjectProperty($job, 'user'); | ||||
return $job_user->id === $user->id | return $job_user->id === $user->id | ||||
&& $job_user->email === $user->email; | && $job_user->email === $user->email; | ||||
▲ Show 20 Lines • Show All 107 Lines • ▼ Show 20 Lines | */ | ||||
/** | /** | ||||
* Test user deletion | * Test user deletion | ||||
*/ | */ | ||||
public function testDelete(): void | public function testDelete(): void | ||||
{ | { | ||||
Queue::fake(); | Queue::fake(); | ||||
$user = $this->getTestUser('userdeletejob@kolabnow.com'); | $user = $this->getTestUser('user-test@' . \config('app.domain')); | ||||
$package = \App\Package::where('title', 'kolab')->first(); | $package = \App\Package::where('title', 'kolab')->first(); | ||||
$user->assignPackage($package); | $user->assignPackage($package); | ||||
$id = $user->id; | $id = $user->id; | ||||
$this->assertCount(4, $user->entitlements()->get()); | $this->assertCount(4, $user->entitlements()->get()); | ||||
$user->delete(); | $user->delete(); | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | public function testFindByEmail(): void | ||||
$this->assertInstanceOf(User::class, $result); | $this->assertInstanceOf(User::class, $result); | ||||
$this->assertSame($user->id, $result->id); | $this->assertSame($user->id, $result->id); | ||||
// TODO: searching by external email (setting) | // TODO: searching by external email (setting) | ||||
$this->markTestIncomplete(); | $this->markTestIncomplete(); | ||||
} | } | ||||
/** | /** | ||||
* Test User::name() | |||||
*/ | |||||
public function testName(): void | |||||
{ | |||||
Queue::fake(); | |||||
$user = $this->getTestUser('user-test@' . \config('app.domain')); | |||||
$this->assertSame('', $user->name()); | |||||
$this->assertSame(\config('app.name') . ' User', $user->name(true)); | |||||
$user->setSetting('first_name', 'First'); | |||||
$this->assertSame('First', $user->name()); | |||||
$this->assertSame('First', $user->name(true)); | |||||
$user->setSetting('last_name', 'Last'); | |||||
$this->assertSame('First Last', $user->name()); | |||||
$this->assertSame('First Last', $user->name(true)); | |||||
} | |||||
/** | |||||
* Tests for UserAliasesTrait::setAliases() | * Tests for UserAliasesTrait::setAliases() | ||||
*/ | */ | ||||
public function testSetAliases(): void | public function testSetAliases(): void | ||||
{ | { | ||||
Queue::fake(); | Queue::fake(); | ||||
Queue::assertNothingPushed(); | Queue::assertNothingPushed(); | ||||
$user = $this->getTestUser('UserAccountA@UserAccount.com'); | $user = $this->getTestUser('UserAccountA@UserAccount.com'); | ||||
Show All 32 Lines | public function testSetAliases(): void | ||||
$user->setAliases([]); | $user->setAliases([]); | ||||
Queue::assertPushed(\App\Jobs\UserUpdate::class, 4); | Queue::assertPushed(\App\Jobs\UserUpdate::class, 4); | ||||
$this->assertCount(0, $user->aliases()->get()); | $this->assertCount(0, $user->aliases()->get()); | ||||
} | } | ||||
/** | /** | ||||
* Tests for UserSettingsTrait::setSettings() | * Tests for UserSettingsTrait::setSettings() and getSetting() | ||||
*/ | */ | ||||
public function testSetSettings(): void | public function testUserSettings(): void | ||||
{ | { | ||||
$this->markTestIncomplete(); | Queue::fake(); | ||||
Queue::assertNothingPushed(); | |||||
$user = $this->getTestUser('UserAccountA@UserAccount.com'); | |||||
Queue::assertPushed(\App\Jobs\UserUpdate::class, 0); | |||||
// Test default settings | |||||
// Note: Technicly this tests UserObserver::created() behavior | |||||
$all_settings = $user->settings()->orderBy('key')->get(); | |||||
$this->assertCount(2, $all_settings); | |||||
$this->assertSame('country', $all_settings[0]->key); | |||||
$this->assertSame('CH', $all_settings[0]->value); | |||||
$this->assertSame('currency', $all_settings[1]->key); | |||||
$this->assertSame('CHF', $all_settings[1]->value); | |||||
// Add a setting | |||||
$user->setSetting('first_name', 'Firstname'); | |||||
Queue::assertPushed(\App\Jobs\UserUpdate::class, 1); | |||||
// Note: We test both current user as well as fresh user object | |||||
// to make sure cache works as expected | |||||
$this->assertSame('Firstname', $user->getSetting('first_name')); | |||||
$this->assertSame('Firstname', $user->fresh()->getSetting('first_name')); | |||||
// Update a setting | |||||
$user->setSetting('first_name', 'Firstname1'); | |||||
Queue::assertPushed(\App\Jobs\UserUpdate::class, 2); | |||||
// Note: We test both current user as well as fresh user object | |||||
// to make sure cache works as expected | |||||
$this->assertSame('Firstname1', $user->getSetting('first_name')); | |||||
$this->assertSame('Firstname1', $user->fresh()->getSetting('first_name')); | |||||
// Delete a setting (null) | |||||
$user->setSetting('first_name', null); | |||||
Queue::assertPushed(\App\Jobs\UserUpdate::class, 3); | |||||
// Note: We test both current user as well as fresh user object | |||||
// to make sure cache works as expected | |||||
$this->assertSame(null, $user->getSetting('first_name')); | |||||
$this->assertSame(null, $user->fresh()->getSetting('first_name')); | |||||
// Delete a setting (empty string) | |||||
$user->setSetting('first_name', 'Firstname1'); | |||||
$user->setSetting('first_name', ''); | |||||
Queue::assertPushed(\App\Jobs\UserUpdate::class, 5); | |||||
// Note: We test both current user as well as fresh user object | |||||
// to make sure cache works as expected | |||||
$this->assertSame(null, $user->getSetting('first_name')); | |||||
$this->assertSame(null, $user->fresh()->getSetting('first_name')); | |||||
// Set multiple settings at once | |||||
$user->setSettings([ | |||||
'first_name' => 'Firstname2', | |||||
'last_name' => 'Lastname2', | |||||
'country' => null, | |||||
]); | |||||
// TODO: This really should create a single UserUpdate job, not 3 | |||||
Queue::assertPushed(\App\Jobs\UserUpdate::class, 7); | |||||
// Note: We test both current user as well as fresh user object | |||||
// to make sure cache works as expected | |||||
$this->assertSame('Firstname2', $user->getSetting('first_name')); | |||||
$this->assertSame('Firstname2', $user->fresh()->getSetting('first_name')); | |||||
$this->assertSame('Lastname2', $user->getSetting('last_name')); | |||||
$this->assertSame('Lastname2', $user->fresh()->getSetting('last_name')); | |||||
$this->assertSame(null, $user->getSetting('country')); | |||||
$this->assertSame(null, $user->fresh()->getSetting('country')); | |||||
$all_settings = $user->settings()->orderBy('key')->get(); | |||||
$this->assertCount(3, $all_settings); | |||||
} | } | ||||
/** | /** | ||||
* Tests for User::users() | * Tests for User::users() | ||||
*/ | */ | ||||
public function testUsers(): void | public function testUsers(): void | ||||
{ | { | ||||
$jack = $this->getTestUser('jack@kolab.org'); | $jack = $this->getTestUser('jack@kolab.org'); | ||||
Show All 31 Lines |