luyadev/luya-testsuite

View on GitHub
src/traits/AdminDatabaseTableTrait.php

Summary

Maintainability
B
5 hrs
Test Coverage
D
63%
<?php

namespace luya\testsuite\traits;

use luya\admin\models\Group;
use luya\admin\models\Lang;
use luya\admin\models\NgrestLog;
use luya\admin\models\QueueLog;
use luya\admin\models\QueueLogError;
use luya\admin\models\StorageFile;
use luya\admin\models\StorageFilter;
use luya\admin\models\StorageFilterChain;
use luya\admin\models\StorageImage;
use luya\admin\models\Tag;
use luya\admin\models\TagRelation;
use luya\admin\models\User;
use luya\admin\models\UserDevice;
use luya\admin\models\UserLogin;
use luya\admin\models\UserLoginLockout;
use luya\admin\models\UserOnline;
use luya\testsuite\fixtures\ActiveRecordFixture;
use luya\testsuite\fixtures\NgRestModelFixture;

/**
 * A trait to make it easier to work with database tables and LUYA admin permission.
 * 
 * @author Basil Suter <basil@nadar.io>
 * @since 1.0.20
 */
trait AdminDatabaseTableTrait
{
    use DatabaseTableTrait;

    /**
     * Add permission route.
     *
     * @param string $route
     * @return integer Returns the fake id for the auth entry.
     */
    public function addPermissionRoute($id, $route, $moduleName = '@app')
    {
        $this->insertRow('admin_auth', [
            'id' => $id,
            'module_name' => $moduleName,
            'alias_name' => $route,
            'route' => $route,
        ]);
        return $id;
    }

    /**
     * Remove permission route
     *
     * @param string $route
     * @return integer The number of affected rows.
     */
    public function removePermissionRoute($route)
    {
        return $this->deleteRow('admin_auth', [
            'route' => $route,
        ]);
    }

    /**
     * Assigne a group to an auth entry.
     *
     * @param integer $groupId
     * @param integer $authId
     * @param boolean $canCreate
     * @param boolean $canUpdate
     * @param boolean $canDelete
     * @return integer The number of affected rows.
     */
    public function assignGroupAuth($groupId, $authId, $canCreate = true, $canUpdate = true, $canDelete = true)
    {
        return $this->insertRow('admin_group_auth', [
            'group_id' => $groupId,
            'auth_id' => $authId,
            'crud_create' => (int) $canCreate,
            'crud_update' => (int) $canUpdate,
            'crud_delete' => (int) $canDelete,
        ]);
    }

    /**
     * Unassigne a group from auth
     *
     * @param integer $groupId
     * @param integer $authId
     * @return integer The number of affected rows.
     */
    public function unAssignGroupAuth($groupId, $authId)
    {
        return $this->deleteRow('admin_group_auth', [
            'group_id' => $groupId,
            'auth_id' => $authId,
        ]);
    }

    /**
     * Add permission api entry
     *
     * @param string $api
     * @param boolean $isCrud
     * @return integer Returns the "fake" id fro the given api
     */
    public function addPermissionApi($id, $api, $isCrud = true)
    {
        $this->insertRow('admin_auth', [
            'id' => $id,
            'module_name' => '@app',
            'alias_name' => $api,
            'is_crud' => (int) $isCrud,
            'api' => $api,
        ]);
        return $id;
    }

    /**
     * Remove permission api entry.
     *
     * @param string $api
     * @return integer The number of affected rows.
     */
    public function removePermissionApi($api)
    {
        return $this->deleteRow('admin_auth', [
            'api' => $api,
        ]);
    }

    /**
     * Create the admin auth table.
     */
    public function createAdminAuthTable()
    {
        $this->createTableIfNotExists('admin_auth', [
            'id' => 'INT(11) PRIMARY KEY',
            'alias_name' => 'text',
            'module_name' => 'text',
            'is_crud' => 'int(11)',
            'route' => 'text',
            'api' => 'text',
            'pool' => 'text',
        ]);
    }

    /**
     * Drop the admin auth table.
     */
    public function dropAdminAuthTable()
    {
        $this->dropTableIfExists('admin_auth');
    }

    /**
     * Create the admin group auth table.
     */
    public function createAdminGroupAuthTable()
    {
        $this->createTableIfNotExists('admin_group_auth', [
            'id' => 'INT(11) PRIMARY KEY',
            'group_id' => 'int(11)',
            'auth_id' => 'int(11)',
            'crud_create' => 'int(11)',
            'crud_update' => 'int(11)',
            'crud_delete' => 'int(11)',
        ]);
    }

    /**
     * Drop the admin group auth table.
     */
    public function dropAdminGroupAuthTable()
    {
        $this->dropTableIfExists('admin_group_auth');
    }    

    /**
     * Create the admin user group table.
     */
    public function createAdminUserGroupTable()
    {
        $this->createTableIfNotExists('admin_user_group', [
            'id' => 'INT(11) PRIMARY KEY',
            'user_id' => 'int(11)',
            'group_id' => 'int(11)',
        ]);
    }

    /**
     * Drop the admin user group table.
     */
    public function dropAdminUserGroupTable()
    {
        $this->dropTableIfExists('admin_user_group');   
    }

    /**
     * Create the admin user auth notification table.
     */
    public function createAdminUserAuthNotificationTable()
    {
        $this->createTableIfNotExists('admin_user_auth_notification', [
            'id' => 'INT(11) PRIMARY KEY',
            'user_id' => 'int(11)',
            'auth_id' => 'int(11)',
            'is_muted' => 'int(11)',
            'model_latest_pk_value' => 'text',
            'model_class' => 'text',
            'created_at' => 'int(11)',
            'updated_at' => 'int(11)',
        ]);
    }

    /**
     * Drop the admin user auth notification table.
     */
    public function dropAdminUserAuthNotificationTable()
    {
        $this->dropTableIfExists('admin_user_auth_notification');
    }

    /**
     * Create the NgRest Log Fixture.
     *
     * @return ActiveRecordFixture
     * @deprecated 1.0.27
     */
    public function createNgRestLogFixture(array $fixtureData = [])
    {
        trigger_error('use createAdminNgRestLogFixture() instead', E_USER_DEPRECATED);
        return $this->createAdminNgRestLogFixture($fixtureData);
    }

    /**
     * Create the NgRest Log Fixture.
     *
     * @return ActiveRecordFixture
     */
    public function createAdminNgRestLogFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => NgrestLog::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Create the User Online Fixture.
     *
     * @return ActiveRecordFixture
     * @deprecated 1.0.27
     */
    public function createUserOnlineFixture(array $fixtureData = [])
    {
        trigger_error('use createAdminUserOnlineFixture() instead', E_USER_DEPRECATED);
        return $this->createAdminUserOnlineFixture($fixtureData);
    }

    /**
     * Create the User Online Fixture.
     *
     * @return ActiveRecordFixture
     */
    public function createAdminUserOnlineFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => UserOnline::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Create the User Fixture with given fixture Data.
     *
     * @param array $fixtureData
     * @return NgRestModelFixture
     * @deprecated 1.0.27
     */
    public function createUserFixture(array $fixtureData = [])
    {
        trigger_error('use createAdminUserFixture() instead', E_USER_DEPRECATED);
        return $this->createAdminUserFixture($fixtureData);
    }

    /**
     * Create the User Fixture with given fixture Data.
     *
     * @param array $fixtureData
     * @return NgRestModelFixture
     */
    public function createAdminUserFixture(array $fixtureData = [], $defaultSchema = true)
    {
        return new NgRestModelFixture([
            'modelClass' => User::class,
            'schema' => $defaultSchema ? [
                'title' => 'int(11)',
                'firstname' => 'text',
                'lastname' => 'text',
                'email' => 'text',
                'is_deleted' => 'int(11)',
                'is_api_user' => 'boolean',
                'api_last_activity' => 'int(11)',
                'auth_token' => 'text',
                'is_request_logger_enabled' => 'boolean',
                'email_verification_token_timestamp' => 'int(11)',
                'login_attempt_lock_expiration' => 'int(11)',
                'login_attempt' => 'int(11)',
                'email_verification_token' => 'text',
                'api_allowed_ips' => 'text',
                'api_rate_limit' => 'int(11)',
                'cookie_token' => 'text',
                'settings' => 'text',
                'force_reload' => 'int(11)',
                'secure_token_timestamp' => 'int(11)',
                'secure_token' => 'text',
                'password' => 'text',
                'password_salt' => 'text',
                'login_2fa_enabled' => 'int(11)',
                'login_2fa_secret' => 'text',
                'login_2fa_backup_key' => 'text',
                'password_verification_token' => 'text',
                'password_verification_token_timestamp' => 'int(11)',
            ] : null,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Admin User Fixture
     *
     * @param array $fixtureData
     * @return NgRestModelFixture
     * @since 1.0.27
     */
    public function createAdminUserLoginFixture(array $fixtureData = [])
    {
        return new NgRestModelFixture([
            'modelClass' => UserLogin::class,
            'fixtureData' => $fixtureData,
        ]);
    }
    
    /**
     * Create the Group Fixture with given ID.
     *
     * @param integer $id
     * @return NgRestModelFixture
     * @deprecated 1.0.27
     */
    public function createGroupFixture($id)
    {
        trigger_error('use createAdminGroupFixture() instead', E_USER_DEPRECATED);
        return $this->createAdminGroupFixture($id);
    }

    /**
     * Create the Group Fixture with given ID.
     *
     * @param integer $id
     * @return NgRestModelFixture
     */
    public function createAdminGroupFixture($id)
    {
        return new NgRestModelFixture([
            'modelClass' => Group::class,
            'fixtureData' => [
                'tester' => [
                    'id' => $id,
                    'name' => 'Test Group',
                ],
            ],
        ]);
    }

    /**
     * Create admin language fixture
     *
     * @param array $fixtureData
     * @return NgRestModelFixture
     * @since 1.0.21
     */
    public function createAdminLangFixture(array $fixtureData = [])
    {
        return new NgRestModelFixture([
            'modelClass' => Lang::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Create admin tag fixture
     *
     * @param array $fixtureData
     * @return NgRestModelFixture
     * @since 1.0.22
     */
    public function createAdminTagFixture(array $fixtureData = [])
    {
        return new NgRestModelFixture([
            'modelClass' => Tag::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Create admin tag relation fixture
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since 1.0.22
     */
    public function createAdminTagRelationFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => TagRelation::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * User Device
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since 1.0.27
     */
    public function createAdminUserDeviceFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => UserDevice::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * User Login Lockout
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since 1.0.27
     */
    public function createAdminUserLoginLockoutFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => UserLoginLockout::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Queue Log
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since @since 1.0.27
     */
    public function createAdminQueueLogFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => QueueLog::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Queue Log Error
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since @since 1.0.27
     */
    public function createAdminQueueLogErrorFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => QueueLogError::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Storage File
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since 1.2.0
     */
    public function createAdminStorageFileFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => StorageFile::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Storage Image
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since 1.2.0
     */
    public function createAdminStorageImageFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => StorageImage::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Storage Filter
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since 1.2.0
     */
    public function createAdminStorageFilterFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => StorageFilter::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    /**
     * Storage Filter Chain
     *
     * @param array $fixtureData
     * @return ActiveRecordFixture
     * @since 1.2.0
     */
    public function createAdminStorageFilterChainFixture(array $fixtureData = [])
    {
        return new ActiveRecordFixture([
            'modelClass' => StorageFilterChain::class,
            'fixtureData' => $fixtureData,
        ]);
    }

    


    /**
     * Create the Admin Queue Table
     *
     * @since 1.1.1
     */
    public function createAdminQueueTable()
    {
        return $this->createTableIfNotExists('admin_queue', [
            'id' => 'INT(11) PRIMARY KEY',
            'channel' => 'text',
            'job' => 'blog',
            'pushed_at' => 'int(11)',
            'ttr' => 'int(11)',
            'delay' => 'int(11)',
            'priority' => 'int(11)',
            'reserved_at' => 'int(11)',
            'attempt' => 'int(11)',
            'done_at' => 'int(11)',
        ]);
    }
}