mirror of
https://github.com/elyby/accounts.git
synced 2025-05-31 14:11:46 +05:30
Implemented account deletion. Not all cases covered with tests [skip ci]
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace api\tests\unit\modules\accounts\models;
|
||||
|
||||
use api\modules\accounts\models\DeleteAccountForm;
|
||||
use api\tests\unit\TestCase;
|
||||
use common\models\Account;
|
||||
use common\tasks\CreateWebHooksDeliveries;
|
||||
use common\tasks\DeleteAccount;
|
||||
use common\tests\fixtures\AccountFixture;
|
||||
use ReflectionObject;
|
||||
use Yii;
|
||||
use yii\queue\Queue;
|
||||
|
||||
class DeleteAccountFormTest extends TestCase {
|
||||
|
||||
/**
|
||||
* @var Queue|\PHPUnit\Framework\MockObject\MockObject
|
||||
*/
|
||||
private Queue $queue;
|
||||
|
||||
public function _fixtures(): array {
|
||||
return [
|
||||
'accounts' => AccountFixture::class,
|
||||
];
|
||||
}
|
||||
|
||||
public function _before(): void {
|
||||
parent::_before();
|
||||
|
||||
$this->queue = $this->createMock(Queue::class);
|
||||
Yii::$app->set('queue', $this->queue);
|
||||
}
|
||||
|
||||
public function testPerformAction() {
|
||||
/** @var Account $account */
|
||||
$account = $this->tester->grabFixture('accounts', 'admin');
|
||||
$this->queue
|
||||
->expects($this->once())
|
||||
->method('delay')
|
||||
->with($this->equalToWithDelta(60 * 60 * 24 * 7, 5))
|
||||
->willReturnSelf();
|
||||
$this->queue
|
||||
->expects($this->exactly(2))
|
||||
->method('push')
|
||||
->withConsecutive(
|
||||
[$this->callback(function(CreateWebHooksDeliveries $task) use ($account): bool {
|
||||
$this->assertSame($account->id, $task->payloads['id']);
|
||||
return true;
|
||||
})],
|
||||
[$this->callback(function(DeleteAccount $task) use ($account): bool {
|
||||
$obj = new ReflectionObject($task);
|
||||
$property = $obj->getProperty('accountId');
|
||||
$property->setAccessible(true);
|
||||
$this->assertSame($account->id, $property->getValue($task));
|
||||
|
||||
return true;
|
||||
})],
|
||||
);
|
||||
|
||||
$model = new DeleteAccountForm($account, [
|
||||
'password' => 'password_0',
|
||||
]);
|
||||
$this->assertTrue($model->performAction());
|
||||
$this->assertSame(Account::STATUS_DELETED, $account->status);
|
||||
$this->assertEqualsWithDelta(time(), $account->deleted_at, 5);
|
||||
}
|
||||
|
||||
public function testPerformActionWithInvalidPassword() {
|
||||
/** @var Account $account */
|
||||
$account = $this->tester->grabFixture('accounts', 'admin');
|
||||
$model = new DeleteAccountForm($account, [
|
||||
'password' => 'invalid password',
|
||||
]);
|
||||
$this->assertFalse($model->performAction());
|
||||
$this->assertSame(['password' => ['error.password_incorrect']], $model->getErrors());
|
||||
}
|
||||
|
||||
public function testPerformActionForAlreadyDeletedAccount() {
|
||||
/** @var Account $account */
|
||||
$account = $this->tester->grabFixture('accounts', 'deleted-account');
|
||||
$model = new DeleteAccountForm($account, [
|
||||
'password' => 'password_0',
|
||||
]);
|
||||
$this->assertFalse($model->performAction());
|
||||
$this->assertSame(['account' => ['error.account_already_deleted']], $model->getErrors());
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace api\tests\unit\modules\accounts\models;
|
||||
|
||||
use api\modules\accounts\models\RestoreAccountForm;
|
||||
use api\tests\unit\TestCase;
|
||||
use common\models\Account;
|
||||
use common\tasks\CreateWebHooksDeliveries;
|
||||
use common\tests\fixtures\AccountFixture;
|
||||
use Yii;
|
||||
use yii\queue\Queue;
|
||||
|
||||
class RestoreAccountFormTest extends TestCase {
|
||||
|
||||
/**
|
||||
* @var Queue|\PHPUnit\Framework\MockObject\MockObject
|
||||
*/
|
||||
private Queue $queue;
|
||||
|
||||
public function _fixtures(): array {
|
||||
return [
|
||||
'accounts' => AccountFixture::class,
|
||||
];
|
||||
}
|
||||
|
||||
public function _before(): void {
|
||||
parent::_before();
|
||||
|
||||
$this->queue = $this->createMock(Queue::class);
|
||||
Yii::$app->set('queue', $this->queue);
|
||||
}
|
||||
|
||||
public function testPerformAction() {
|
||||
/** @var Account $account */
|
||||
$account = $this->tester->grabFixture('accounts', 'deleted-account');
|
||||
$this->queue
|
||||
->expects($this->once())
|
||||
->method('push')
|
||||
->withConsecutive(
|
||||
[$this->callback(function(CreateWebHooksDeliveries $task) use ($account): bool {
|
||||
$this->assertSame($account->id, $task->payloads['id']);
|
||||
return true;
|
||||
})],
|
||||
);
|
||||
|
||||
$model = new RestoreAccountForm($account);
|
||||
$this->assertTrue($model->performAction());
|
||||
$this->assertSame(Account::STATUS_ACTIVE, $account->status);
|
||||
$this->assertNull($account->deleted_at);
|
||||
}
|
||||
|
||||
public function testPerformActionForNotDeletedAccount() {
|
||||
/** @var Account $account */
|
||||
$account = $this->tester->grabFixture('accounts', 'admin');
|
||||
$model = new RestoreAccountForm($account);
|
||||
$this->assertFalse($model->performAction());
|
||||
$this->assertSame(['account' => ['error.account_not_deleted']], $model->getErrors());
|
||||
}
|
||||
|
||||
}
|
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace api\tests\unit\modules\internal\models;
|
||||
|
||||
use api\modules\accounts\models\BanAccountForm;
|
||||
@@ -6,8 +8,9 @@ use api\modules\internal\helpers\Error as E;
|
||||
use api\tests\unit\TestCase;
|
||||
use common\models\Account;
|
||||
use common\tasks\ClearAccountSessions;
|
||||
use ReflectionObject;
|
||||
|
||||
class BanFormTest extends TestCase {
|
||||
class BanAccountFormTest extends TestCase {
|
||||
|
||||
public function testValidateAccountActivity() {
|
||||
$account = new Account();
|
||||
@@ -25,13 +28,9 @@ class BanFormTest extends TestCase {
|
||||
|
||||
public function testBan() {
|
||||
/** @var Account|\PHPUnit\Framework\MockObject\MockObject $account */
|
||||
$account = $this->getMockBuilder(Account::class)
|
||||
->setMethods(['save'])
|
||||
->getMock();
|
||||
|
||||
$account->expects($this->once())
|
||||
->method('save')
|
||||
->willReturn(true);
|
||||
$account = $this->createPartialMock(Account::class, ['save']);
|
||||
$account->expects($this->once())->method('save')->willReturn(true);
|
||||
$account->id = 123;
|
||||
|
||||
$model = new BanAccountForm($account);
|
||||
$this->assertTrue($model->performAction());
|
||||
@@ -39,7 +38,10 @@ class BanFormTest extends TestCase {
|
||||
/** @var ClearAccountSessions $job */
|
||||
$job = $this->tester->grabLastQueuedJob();
|
||||
$this->assertInstanceOf(ClearAccountSessions::class, $job);
|
||||
$this->assertSame($job->accountId, $account->id);
|
||||
$obj = new ReflectionObject($job);
|
||||
$property = $obj->getProperty('accountId');
|
||||
$property->setAccessible(true);
|
||||
$this->assertSame(123, $property->getValue($job));
|
||||
}
|
||||
|
||||
}
|
@@ -39,14 +39,25 @@ class AccountOwnerTest extends TestCase {
|
||||
|
||||
Yii::$app->user->setIdentity($identity);
|
||||
|
||||
// Assert that account id matches
|
||||
$this->assertFalse($rule->execute('token', $item, ['accountId' => 2]));
|
||||
$this->assertFalse($rule->execute('token', $item, ['accountId' => '2']));
|
||||
$this->assertTrue($rule->execute('token', $item, ['accountId' => 1]));
|
||||
$this->assertTrue($rule->execute('token', $item, ['accountId' => '1']));
|
||||
|
||||
// Check accepted latest rules
|
||||
$account->rules_agreement_version = null;
|
||||
$this->assertFalse($rule->execute('token', $item, ['accountId' => 1]));
|
||||
$this->assertTrue($rule->execute('token', $item, ['accountId' => 1, 'optionalRules' => true]));
|
||||
$account->rules_agreement_version = LATEST_RULES_VERSION;
|
||||
$this->assertTrue($rule->execute('token', $item, ['accountId' => 1]));
|
||||
|
||||
// Check deleted account behavior
|
||||
$account->status = Account::STATUS_DELETED;
|
||||
$this->assertFalse($rule->execute('token', $item, ['accountId' => 1]));
|
||||
$this->assertTrue($rule->execute('token', $item, ['accountId' => 1, 'allowDeleted' => true]));
|
||||
|
||||
// Banned account should always be not allowed
|
||||
$account->status = Account::STATUS_BANNED;
|
||||
$this->assertFalse($rule->execute('token', $item, ['accountId' => 1]));
|
||||
$this->assertFalse($rule->execute('token', $item, ['accountId' => 1, 'optionalRules' => true]));
|
||||
|
Reference in New Issue
Block a user