Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Feature/Jobs/User/DeleteTest.php
- This file was added.
<?php | |||||
namespace Tests\Feature\Jobs\User; | |||||
use App\Backends\Roundcube; | |||||
use App\User; | |||||
use Illuminate\Support\Facades\Queue; | |||||
use Tests\TestCase; | |||||
class DeleteTest extends TestCase | |||||
{ | |||||
/** | |||||
* {@inheritDoc} | |||||
*/ | |||||
public function setUp(): void | |||||
{ | |||||
parent::setUp(); | |||||
$this->deleteTestUser('new-job-user@' . \config('app.domain')); | |||||
} | |||||
/** | |||||
* {@inheritDoc} | |||||
*/ | |||||
public function tearDown(): void | |||||
{ | |||||
$this->deleteTestUser('new-job-user@' . \config('app.domain')); | |||||
parent::tearDown(); | |||||
} | |||||
/** | |||||
* Test job handle | |||||
* | |||||
* @group ldap | |||||
* @group imap | |||||
* @group roundcube | |||||
*/ | |||||
public function testHandle(): void | |||||
{ | |||||
Queue::fake(); | |||||
$rcdb = Roundcube::dbh(); | |||||
$user = $this->getTestUser('new-job-user@' . \config('app.domain')); | |||||
$rcuser = Roundcube::userId($user->email); | |||||
// Create the user in LDAP+IMAP | |||||
$job = new \App\Jobs\User\CreateJob($user->id); | |||||
$job->handle(); | |||||
$user->refresh(); | |||||
$this->assertTrue($user->isLdapReady()); | |||||
$this->assertTrue($user->isImapReady()); | |||||
$this->assertFalse($user->isDeleted()); | |||||
$this->assertNotNull($rcdb->table('users')->where('username', $user->email)->first()); | |||||
// Test job failure (user already deleted) | |||||
$user->status |= User::STATUS_DELETED; | |||||
$user->save(); | |||||
$job = new \App\Jobs\User\DeleteJob($user->id); | |||||
$job->handle(); | |||||
$this->assertTrue($job->hasFailed()); | |||||
$this->assertSame("User {$user->id} is already marked as deleted.", $job->failureMessage); | |||||
// Test success delete from LDAP, IMAP and Roundcube | |||||
$user->status ^= User::STATUS_DELETED; | |||||
$user->save(); | |||||
$this->assertFalse($user->isDeleted()); | |||||
$job = new \App\Jobs\User\DeleteJob($user->id); | |||||
$job->handle(); | |||||
$user->refresh(); | |||||
$this->assertFalse($job->hasFailed()); | |||||
$this->assertFalse($user->isLdapReady()); | |||||
$this->assertFalse($user->isImapReady()); | |||||
$this->assertTrue($user->isDeleted()); | |||||
$this->assertNull($rcdb->table('users')->where('username', $user->email)->first()); | |||||
Queue::assertPushed(\App\Jobs\IMAP\AclCleanupJob::class, 1); | |||||
Queue::assertPushed( | |||||
\App\Jobs\IMAP\AclCleanupJob::class, | |||||
function ($job) use ($user) { | |||||
$ident = TestCase::getObjectProperty($job, 'ident'); | |||||
$domain = TestCase::getObjectProperty($job, 'domain'); | |||||
return $ident == $user->email && $domain === ''; | |||||
} | |||||
); | |||||
// TODO: Test partial execution, i.e. only IMAP or only LDAP | |||||
} | |||||
} |