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/Runner/ShutdownHandler.php
|
||||
/.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