20250818
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2233,5 +2233,3 @@ FodyWeavers.xsd
|
|||||||
/vendor/phpunit/phpunit/src/Framework/Exception/ErrorLogNotWritableException.php
|
/vendor/phpunit/phpunit/src/Framework/Exception/ErrorLogNotWritableException.php
|
||||||
/vendor/phpunit/phpunit/src/Runner/ShutdownHandler.php
|
/vendor/phpunit/phpunit/src/Runner/ShutdownHandler.php
|
||||||
/.idea/codeStyles/
|
/.idea/codeStyles/
|
||||||
|
|
||||||
/tests/secret_not_in_git/
|
|
@@ -1 +0,0 @@
|
|||||||
<?php
|
|
168
tests/secret_not_in_git/Converters.php
Normal file
168
tests/secret_not_in_git/Converters.php
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\tests\secret_not_in_git;
|
||||||
|
|
||||||
|
use BackedEnum;
|
||||||
|
use goodboyalex\php_components_pack\types\GUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Класс конвертации для моделей.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package freecms
|
||||||
|
* @version 0.1
|
||||||
|
* @since 0.1
|
||||||
|
*/
|
||||||
|
final class Converters
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Преобразует GUID в строковое представление.
|
||||||
|
*
|
||||||
|
* @param GUID $guid GUID.
|
||||||
|
*
|
||||||
|
* @return string GUID в строковом представлении.
|
||||||
|
*/
|
||||||
|
public static function GUIDToString (GUID $guid): string
|
||||||
|
{
|
||||||
|
return $guid->ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Преобразует строковое представление GUID в объект GUID.
|
||||||
|
*
|
||||||
|
* @param string $guid Строковое представление GUID.
|
||||||
|
*
|
||||||
|
* @return GUID Преобразует строковое представление GUID в объект GUID или GUID_EMPTY.
|
||||||
|
*/
|
||||||
|
public static function GUIDFromString (string $guid): GUID
|
||||||
|
{
|
||||||
|
return GUID::Parse($guid, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверяет равенство двух GUID.
|
||||||
|
*
|
||||||
|
* @param GUID $guid1 GUID 1.
|
||||||
|
* @param GUID $guid2 GUID 2.
|
||||||
|
*
|
||||||
|
* @return bool true, если GUID равны, false - иначе.
|
||||||
|
*/
|
||||||
|
public static function IsGUIDEqual (GUID $guid1, GUID $guid2): bool
|
||||||
|
{
|
||||||
|
return $guid1->IsEqualsTo($guid2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Преобразует объект перечисления в значение.
|
||||||
|
*
|
||||||
|
* @param BackedEnum $enum Перечисление.
|
||||||
|
*
|
||||||
|
* @return int Значение перечисления.
|
||||||
|
*/
|
||||||
|
public static function BackedEnumToInt (BackedEnum $enum): int
|
||||||
|
{
|
||||||
|
return $enum->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param int $value Значение перечисления.
|
||||||
|
*
|
||||||
|
* @return BackedEnum Перечисление.
|
||||||
|
*/
|
||||||
|
public static function BackedEnumFromInt (int $value): BackedEnum
|
||||||
|
{
|
||||||
|
return BackedEnum::tryFrom($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Сравнивает два значения перечисления.
|
||||||
|
*
|
||||||
|
* @param BackedEnum $enum1 Перечисление 1.
|
||||||
|
* @param BackedEnum $enum2 Перечисление 2.
|
||||||
|
*
|
||||||
|
* @return bool true, если значения равны, false - иначе.
|
||||||
|
*/
|
||||||
|
public static function IsBackedEnumEqual (BackedEnum $enum1, BackedEnum $enum2): bool
|
||||||
|
{
|
||||||
|
return $enum1->value === $enum2->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Преобразует логическое значение в целочисленное.
|
||||||
|
*
|
||||||
|
* @param bool $boolValue Значение.
|
||||||
|
*
|
||||||
|
* @return int Значение 0 или 1.
|
||||||
|
*/
|
||||||
|
public static function BoolToInt (bool $boolValue): int
|
||||||
|
{
|
||||||
|
return $boolValue ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Преобразует целочисленное значение в логическое.
|
||||||
|
*
|
||||||
|
* @param int $value Значение 0 или 1.
|
||||||
|
*
|
||||||
|
* @return bool Логическое значение.
|
||||||
|
*/
|
||||||
|
public static function BoolFromInt (int $value): bool
|
||||||
|
{
|
||||||
|
return $value > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Сравнивает два логических значения.
|
||||||
|
*
|
||||||
|
* @param bool $bool1 Значение 1.
|
||||||
|
* @param bool $bool2 Значение 2.
|
||||||
|
*
|
||||||
|
* @return bool true, если значения равны, false - иначе.
|
||||||
|
*/
|
||||||
|
public static function IsBoolEqual (bool $bool1, bool $bool2): bool
|
||||||
|
{
|
||||||
|
return ($bool1 == true && $bool2 == true) || ($bool1 == false && $bool2 == false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Преобразует массив в строку.
|
||||||
|
*
|
||||||
|
* @param array $array Массив.
|
||||||
|
*
|
||||||
|
* @return string Сериализованный массив.
|
||||||
|
*/
|
||||||
|
public static function ArrayToString (array $array): string
|
||||||
|
{
|
||||||
|
return serialize($array);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Преобразует строковое представление массива в массив.
|
||||||
|
*
|
||||||
|
* @param string $value Строковое представление массива.
|
||||||
|
*
|
||||||
|
* @return array Массив.
|
||||||
|
*/
|
||||||
|
public static function ArrayFromString (string $value): array
|
||||||
|
{
|
||||||
|
return unserialize($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Сравнивает два массива.
|
||||||
|
*
|
||||||
|
* @param array $array1 Массив 1.
|
||||||
|
* @param array $array2 Массив 2.
|
||||||
|
*
|
||||||
|
* @return bool true, если значения равны, false - иначе.
|
||||||
|
*/
|
||||||
|
public static function IsArrayEqual (array $array1, array $array2): bool
|
||||||
|
{
|
||||||
|
// Получаем разницу между массивами
|
||||||
|
$difference = array_diff($array1, $array2);
|
||||||
|
|
||||||
|
// Если разница пуста, значит массивы равны
|
||||||
|
return empty($difference);
|
||||||
|
}
|
||||||
|
}
|
121
tests/secret_not_in_git/DatabaseTest.php
Normal file
121
tests/secret_not_in_git/DatabaseTest.php
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\tests\secret_not_in_git;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use goodboyalex\php_components_pack\types\GUID;
|
||||||
|
use goodboyalex\php_db_components_pack\classes\ConditionBuilder;
|
||||||
|
use goodboyalex\php_db_components_pack\classes\Database;
|
||||||
|
use goodboyalex\php_db_components_pack\enums\DBDriver;
|
||||||
|
use goodboyalex\php_db_components_pack\models\DBConfig;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class DatabaseTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testGetRow () {}
|
||||||
|
|
||||||
|
public function testInsertMany () {}
|
||||||
|
|
||||||
|
public function testUpdateMany () {}
|
||||||
|
|
||||||
|
public function testExecute () {}
|
||||||
|
|
||||||
|
public function testInsert ()
|
||||||
|
{
|
||||||
|
$this->IncludeReq();
|
||||||
|
|
||||||
|
$db = $this->GetDatabase();
|
||||||
|
|
||||||
|
if (!$db->IsTableExist('users'))
|
||||||
|
die('Таблица не существует. Сперва запустите тест testCreateTable / Table does not exist. Run testCreateTable first');
|
||||||
|
|
||||||
|
if ($db->IsExist(
|
||||||
|
table: 'users',
|
||||||
|
where: new ConditionBuilder()->WhereEquals('login', 'account1')
|
||||||
|
))
|
||||||
|
die('Запись с логином account1 уже существует в таблице users. Сперва удалите запись с логином account1 (можно использовать метод testDelete) / Record with login account1 already exists in table users. Delete record with login account1 first');
|
||||||
|
|
||||||
|
$model = new UserModel(
|
||||||
|
id: GUID::Generate(),
|
||||||
|
login: "account1",
|
||||||
|
password: "password1",
|
||||||
|
salt: GUID_EMPTY,
|
||||||
|
firstName: "firstName1",
|
||||||
|
middleName: "middleName1",
|
||||||
|
lastName: "lastName1",
|
||||||
|
email: "email1@ya.ru",
|
||||||
|
isEmailVerified: false,
|
||||||
|
groupName: "default",
|
||||||
|
createdAt: time(),
|
||||||
|
updatedAt: 0,
|
||||||
|
userData: ['key1' => 'value1', 'key2' => 'value2']
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $db->Insert('users', $model);
|
||||||
|
|
||||||
|
$this->assertTrue($result !== false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQuery () {}
|
||||||
|
|
||||||
|
public function testQueryLast () {}
|
||||||
|
|
||||||
|
public function testCreateTable ()
|
||||||
|
{
|
||||||
|
$this->IncludeReq();
|
||||||
|
|
||||||
|
$db = $this->GetDatabase();
|
||||||
|
|
||||||
|
$db->CreateTable(
|
||||||
|
tableName: 'users',
|
||||||
|
dbItemClass: '\goodboyalex\php_db_components_pack\tests\secret_not_in_git\UserModel'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertTrue($db->IsTableExist('users'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQueryFirst () {}
|
||||||
|
|
||||||
|
public function testCount () {}
|
||||||
|
|
||||||
|
public function testGetCol () {}
|
||||||
|
|
||||||
|
public function testGetRows () {}
|
||||||
|
|
||||||
|
public function testIsTableExist () {}
|
||||||
|
|
||||||
|
public function testDropTable () {}
|
||||||
|
|
||||||
|
public function testGetValue () {}
|
||||||
|
|
||||||
|
public function testUpdate () {}
|
||||||
|
|
||||||
|
public function testIsExist () {}
|
||||||
|
|
||||||
|
public function testDelete () {}
|
||||||
|
|
||||||
|
private function IncludeReq (): void
|
||||||
|
{
|
||||||
|
require_once 'Converters.php';
|
||||||
|
require_once 'UserModel.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
private function GetDatabase (): Database
|
||||||
|
{
|
||||||
|
$config = new DBConfig(
|
||||||
|
driver: DBDriver::MSSQL,
|
||||||
|
host: '46.172.4.201',
|
||||||
|
port: 17879,
|
||||||
|
name: 'php_db_components_test',
|
||||||
|
userName: "db_user",
|
||||||
|
password: 'hxcssuy:oI.CQ%.zbw=As$Lj7=]+nf'
|
||||||
|
);
|
||||||
|
|
||||||
|
$onException = fn (Exception $exception, bool $terminate)
|
||||||
|
=> $terminate
|
||||||
|
? die($exception->getMessage())
|
||||||
|
: print $exception->getMessage();
|
||||||
|
|
||||||
|
return new Database($config, $onException);
|
||||||
|
}
|
||||||
|
}
|
157
tests/secret_not_in_git/UserModel.php
Normal file
157
tests/secret_not_in_git/UserModel.php
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\tests\secret_not_in_git;
|
||||||
|
|
||||||
|
use goodboyalex\php_components_pack\types\GUID;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\Compare;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\ConvertToDB;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\DataType;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\DefaultValue;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\FieldName;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\NotNull;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\PrimaryKey;
|
||||||
|
use goodboyalex\php_db_components_pack\enums\DBType;
|
||||||
|
use goodboyalex\php_db_components_pack\interfaces\IDBItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Модель информации о пользователе.
|
||||||
|
*
|
||||||
|
* Структура таблицы:
|
||||||
|
*
|
||||||
|
* -- id - string(36) - Уникальный идентификатор пользователя (индекс).
|
||||||
|
* -- login - varchar(50) - Имя пользователя.
|
||||||
|
* -- password - varchar(255) - Пароль пользователя.
|
||||||
|
* -- salt - varchar(36) - Ключ шифровки пароля.
|
||||||
|
* -- first_name - varchar(50) - Имя пользователя.
|
||||||
|
* -- middle_name - varchar(50) - Отчество пользователя.
|
||||||
|
* -- last_name - varchar(50) - Фамилия пользователя.
|
||||||
|
* -- email - varchar(100) - Электронная почта пользователя.
|
||||||
|
* -- email_verified - TinyInt - Статус подтверждения электронной почты.
|
||||||
|
* -- group - varchar(50) - Имя группы пользователя.
|
||||||
|
* -- date_created - bigint - Временной штамп даты создания пользователя.
|
||||||
|
* -- date_updated - bigint - Временной штамп даты обновления пользователя.
|
||||||
|
* -- data - LONGTEXT - NULL - Массив разных данных о пользователе.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0.2
|
||||||
|
*/
|
||||||
|
final class UserModel implements IDBItem
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var GUID $Id Идентификатор пользователя
|
||||||
|
*/
|
||||||
|
#[PrimaryKey, NotNull, DataType(DBType::STRING, 36), ConvertToDB(
|
||||||
|
fromType: ['\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'GUIDToString'],
|
||||||
|
toType: [
|
||||||
|
'\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'GUIDFromString'
|
||||||
|
]), Compare(['\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'IsGUIDEqual']),
|
||||||
|
FieldName('id'), DefaultValue(GUID_EMPTY)]
|
||||||
|
public GUID $Id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $Login Логин пользователя (на английском языке)
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('login'), DataType(DBType::STRING, 50), DefaultValue("")]
|
||||||
|
public string $Login = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $Password Пароль пользователя
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('password'), DataType(DBType::STRING, 255), DefaultValue("")]
|
||||||
|
public string $Password = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $Salt Кодовое слово для пароля (обычно Guid)
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('salt'), DataType(DBType::STRING, 36), DefaultValue(GUID_EMPTY)]
|
||||||
|
public string $Salt = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $FirstName Имя пользователя
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('first_name'), DataType(DBType::STRING, 50), DefaultValue("")]
|
||||||
|
public string $FirstName = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $MiddleName Отчество пользователя
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('middle_name'), DataType(DBType::STRING, 50), DefaultValue("")]
|
||||||
|
public string $MiddleName = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $LastName Фамилия пользователя
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('last_name'), DataType(DBType::STRING, 50), DefaultValue("")]
|
||||||
|
public string $LastName = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $Email Электронная почта пользователя
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('email'), DataType(DBType::STRING, 100), DefaultValue("")]
|
||||||
|
public string $Email = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool $IsEmailVerified Статус подтверждения электронной почты
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('email_verified'), DataType(DBType::INT), ConvertToDB(
|
||||||
|
fromType: ['\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'BoolToInt'],
|
||||||
|
toType: ['\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'BoolFromInt']),
|
||||||
|
Compare([
|
||||||
|
'\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'IsBoolEqual'
|
||||||
|
]), DefaultValue(0)]
|
||||||
|
public bool $IsEmailVerified = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $GroupName Имя группы пользователя
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('group'), DataType(DBType::STRING, 50), DefaultValue('')]
|
||||||
|
public string $GroupName = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int $CreatedAt Штамп даты создания пользователя
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('date_created'), DataType(DBType::INT), DefaultValue(0)]
|
||||||
|
public int $CreatedAt = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int $ModifiedAt Штамп даты изменения пользователя
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('date_updated'), DataType(DBType::INT), DefaultValue(0)]
|
||||||
|
public int $ModifiedAt = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array $UserData Массив разных данных о пользователе
|
||||||
|
*/
|
||||||
|
#[NotNull, FieldName('data'), DataType(DBType::STRING, 0), ConvertToDB(
|
||||||
|
fromType: ['\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'ArrayToString'],
|
||||||
|
toType: ['\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'ArrayFromString']),
|
||||||
|
Compare([
|
||||||
|
'\goodboyalex\php_db_components_pack\tests\secret_not_in_git\Converters', 'IsArrayEqual'
|
||||||
|
]), DefaultValue("[]")]
|
||||||
|
public array $UserData = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор.
|
||||||
|
*/
|
||||||
|
public function __construct (GUID $id = new GUID(), string $login = "", string $password = "",
|
||||||
|
string $salt = "", string $firstName = "", string $middleName = "", string $lastName = "",
|
||||||
|
string $email = "", bool $isEmailVerified = false, string $groupName = "", int $createdAt = 0,
|
||||||
|
int $updatedAt = 0, array $userData = [])
|
||||||
|
{
|
||||||
|
$this->Id = $id;
|
||||||
|
$this->Login = $login;
|
||||||
|
$this->Password = $password;
|
||||||
|
$this->Salt = $salt;
|
||||||
|
$this->FirstName = $firstName;
|
||||||
|
$this->MiddleName = $middleName;
|
||||||
|
$this->LastName = $lastName;
|
||||||
|
$this->Email = $email;
|
||||||
|
$this->IsEmailVerified = $isEmailVerified;
|
||||||
|
$this->GroupName = $groupName;
|
||||||
|
$this->CreatedAt = $createdAt;
|
||||||
|
$this->ModifiedAt = $updatedAt;
|
||||||
|
$this->UserData = $userData;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user