.dev/tests/functional/db/class_db_validate_mysql_test.Test.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

require_once __DIR__ . '/db_real_abstract.php';

/**
 * @requires extension mysqli
 */
class class_db_validate_mysql_test extends db_real_abstract
{
    public static function db_name()
    {
        return self::$DB_NAME;
    }
    public static function table_name($name)
    {
        //        return self::db_name().'.'.$name;
        return $name;
    }
    public static function create_table_sql($table)
    {
        return 'CREATE TABLE ' . self::table_name($table) . '(id INT(10) AUTO_INCREMENT, name TEXT, email TEXT, PRIMARY KEY(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
    }
    public static function setUpBeforeClass() : void
    {
        self::$_bak['DB_DRIVER'] = self::$DB_DRIVER;
        self::$DB_DRIVER = 'mysqli';
        self::_connect();
        self::utils()->truncate_database(self::db_name());
        _class('validate')->_init();
        _class('validate')->db = self::$db;
    }
    public static function tearDownAfterClass() : void
    {
        self::utils()->truncate_database(self::db_name());
        self::$DB_DRIVER = self::$_bak['DB_DRIVER'];
    }
    public function test_is_unique()
    {
        if ($this->_need_skip_test(__FUNCTION__)) {
            return;
        }
        $table = self::db()->DB_PREFIX . __FUNCTION__;

        $this->assertNotEmpty(self::db()->query($this->create_table_sql($table)));
        $this->assertTrue(_class('validate')->unique('test1@test.dev', ['param' => $table . '.email']));
        $this->assertTrue(_class('validate')->is_unique('test1@test.dev', ['param' => $table . '.email']));
        $data = [
            1 => ['id' => 1, 'name' => 'test1', 'email' => 'test1@test.dev'],
            2 => ['id' => 2, 'name' => 'test2', 'email' => 'test2@test.dev'],
        ];
        $this->assertNotEmpty(self::db()->insert_safe($table, $data));
        $this->assertFalse(_class('validate')->unique('test1@test.dev', ['param' => $table . '.email']));
        $this->assertFalse(_class('validate')->is_unique('test1@test.dev', ['param' => $table . '.email']));
        $this->assertTrue(_class('validate')->unique('test888@test.dev', ['param' => $table . '.email']));
        $this->assertTrue(_class('validate')->is_unique('test888@test.dev', ['param' => $table . '.email']));
    }
    public function test_is_unique_without()
    {
        if ($this->_need_skip_test(__FUNCTION__)) {
            return;
        }
        $table = self::db()->DB_PREFIX . __FUNCTION__;

        $this->assertNotEmpty(self::db()->query($this->create_table_sql($table)));
        $this->assertTrue(_class('validate')->is_unique_without('test1@test.dev', ['param' => $table . '.email.1']));
        $data = [
            1 => ['id' => 1, 'name' => 'test1', 'email' => 'test1@test.dev'],
            2 => ['id' => 2, 'name' => 'test2', 'email' => 'test2@test.dev'],
        ];
        $this->assertNotEmpty(self::db()->insert_safe($table, $data));
        $this->assertTrue(_class('validate')->is_unique_without('test1@test.dev', ['param' => $table . '.email.1']));
        $this->assertFalse(_class('validate')->is_unique_without('test1@test.dev', ['param' => $table . '.email.888']));
        $this->assertTrue(_class('validate')->is_unique_without('test888@test.dev', ['param' => $table . '.email.1']));
        $this->assertTrue(_class('validate')->is_unique_without('test888@test.dev', ['param' => $table . '.email.2']));
        $this->assertTrue(_class('validate')->is_unique_without('test888@test.dev', ['param' => $table . '.email.888']));
    }
    public function test_exists()
    {
        if ($this->_need_skip_test(__FUNCTION__)) {
            return;
        }
        $table = self::db()->DB_PREFIX . __FUNCTION__;

        $this->assertNotEmpty(self::db()->query($this->create_table_sql($table)));
        $this->assertFalse(_class('validate')->exists('test1@test.dev', ['param' => $table . '.email']));
        $data = [
            1 => ['id' => 1, 'name' => 'test1', 'email' => 'test1@test.dev'],
            2 => ['id' => 2, 'name' => 'test2', 'email' => 'test2@test.dev'],
        ];
        $this->assertNotEmpty(self::db()->insert_safe($table, $data));
        $this->assertTrue(_class('validate')->exists('test1@test.dev', ['param' => $table . '.email']));
        $this->assertFalse(_class('validate')->exists('test888@test.dev', ['param' => $table . '.email']));
    }
}