20250820 1.0.2
This commit is contained in:
@@ -12,10 +12,10 @@
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class DatabaseTest extends TestCase
|
||||
{
|
||||
public function testDatabase ()
|
||||
{
|
||||
/**
|
||||
* Тестирование базы данных.
|
||||
*
|
||||
* ВНИМАТЕЛЬНО ПРОЧТИТЕ, ПЕРЕД ВЫПОЛНЕНИЕМ ТЕСТА.
|
||||
*
|
||||
* Подготовка к тесту:
|
||||
@@ -28,8 +28,11 @@
|
||||
* скомпрометирует вшу БД!);
|
||||
* - в этом файле задайте переменной $testConfig класс настроек с необходимыми настройками или можете
|
||||
* воспользоваться файлом "database_config_sample.php", переименовав его в "database_config.php".
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function testDatabase ()
|
||||
{
|
||||
/**
|
||||
* Подключаем настройки базы данных.
|
||||
*
|
||||
@@ -155,254 +158,153 @@
|
||||
];
|
||||
|
||||
// Вставляю несколько
|
||||
$result = $db->InsertMany('users', $model2, $model3, $model4);
|
||||
$result = $db->InsertMany($tableName, $model2, $model3, $model4);
|
||||
|
||||
// Убеждаюсь, что вставка успешна
|
||||
$this->assertTrue($result !== false);
|
||||
|
||||
// - и все идентификаторы совпадают
|
||||
$this->assertEqualsCanonicalizing($expectedResult, $result);
|
||||
}
|
||||
|
||||
public function testGetRow ()
|
||||
{
|
||||
$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 / Record with login account1 is not exists in table users');
|
||||
/* 3. Получение данных. */
|
||||
|
||||
/* 3.1. Получение одной записи. */
|
||||
/**
|
||||
* @var false|UserModel $model
|
||||
* Получаю запись.
|
||||
*
|
||||
* @var false|UserModel $model Модель записи.
|
||||
*/
|
||||
$model = $db->GetRow(
|
||||
table: 'users',
|
||||
table: $tableName,
|
||||
where: new ConditionBuilder()->WhereEquals('login', 'account1'),
|
||||
className: '\goodboyalex\php_db_components_pack\tests\data\UserModel'
|
||||
);
|
||||
|
||||
// Убеждаюсь, что запись получена
|
||||
$this->assertTrue($model !== false);
|
||||
|
||||
// - совпадает ли логин
|
||||
$this->assertEquals('account1', $model->Login);
|
||||
|
||||
// - и совпадает ли идентификатор
|
||||
$this->assertEquals(
|
||||
'account1', $model->Id->IsEqualsTo(GUID::Parse('8b5dab25-4445-436c-8f25-0f5352cb8500'))
|
||||
);
|
||||
}
|
||||
|
||||
public function testGetCol ()
|
||||
{
|
||||
$this->IncludeReq();
|
||||
/* 3.2. Получение нескольких записей. */
|
||||
/**
|
||||
* Получаю записи.
|
||||
*
|
||||
* @var false|ObjectArray $model Набор моделей записей.
|
||||
*/
|
||||
$models = $db->GetRows(
|
||||
table: $tableName,
|
||||
where: new ConditionBuilder()->WhereNotEquals('login', 'account1'),
|
||||
className: '\goodboyalex\php_db_components_pack\tests\data\UserModel'
|
||||
);
|
||||
|
||||
$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', 'account2')
|
||||
->Or()
|
||||
->WhereEquals('login', 'account3')
|
||||
->Or()
|
||||
->WhereEquals('login', 'account4')
|
||||
))
|
||||
die('Записи с логином account1 не существует в таблице users / Record with login account1 is not exists in table users');
|
||||
// Убеждаюсь, что записи получены
|
||||
$this->assertTrue($models !== false);
|
||||
// - и запись с логином account2 находится в списке
|
||||
$this->assertTrue($models->IsExist(fn (UserModel $model) => $model->Login == 'account2'));
|
||||
|
||||
/* 3.3. Получение колонки. */
|
||||
// Получаю колонку id
|
||||
$models = $db->GetCol(
|
||||
table: 'users',
|
||||
table: $tableName,
|
||||
column: 'id',
|
||||
where: new ConditionBuilder()->WhereNotEquals('login', 'account1')
|
||||
);
|
||||
|
||||
// Убеждаюсь, что колонка получена
|
||||
$this->assertTrue($models !== false);
|
||||
|
||||
// - собираю ожидаемый результат
|
||||
$expected = [
|
||||
"3552914c-9ffc-4c73-8946-97c40b0d81b5",
|
||||
"73828df6-89a3-4feb-ae9a-ef79d0e67cb0",
|
||||
"df39f53f-faff-42cf-bf00-f5855c3e11ec"
|
||||
];
|
||||
|
||||
// - и совпадает ли результат с ожидаемым
|
||||
$this->assertEqualsCanonicalizing($expected, $models);
|
||||
}
|
||||
|
||||
public function testGetRows ()
|
||||
{
|
||||
$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', 'account2')
|
||||
->Or()
|
||||
->WhereEquals('login', 'account3')
|
||||
->Or()
|
||||
->WhereEquals('login', 'account4')
|
||||
))
|
||||
die('Записи с логином account1 не существует в таблице users / Record with login account1 is not exists in table users');
|
||||
|
||||
/**
|
||||
* @var false|ObjectArray $model
|
||||
*/
|
||||
$models = $db->GetRows(
|
||||
table: 'users',
|
||||
where: new ConditionBuilder()->WhereNotEquals('login', 'account1'),
|
||||
className: '\goodboyalex\php_db_components_pack\tests\data\UserModel'
|
||||
);
|
||||
|
||||
$this->assertTrue($models !== false);
|
||||
$this->assertTrue($models->IsExist(fn (UserModel $model) => $model->Login == 'account2'));
|
||||
}
|
||||
|
||||
public function testDropTable ()
|
||||
{
|
||||
$this->IncludeReq();
|
||||
|
||||
$db = $this->GetDatabase();
|
||||
|
||||
$result = $db->DropTable('users');
|
||||
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
public function testGetValue ()
|
||||
{
|
||||
$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', 'account2')
|
||||
->Or()
|
||||
->WhereEquals('login', 'account3')
|
||||
->Or()
|
||||
->WhereEquals('login', 'account4')
|
||||
))
|
||||
die('Записи с логином account1 не существует в таблице users / Record with login account1 is not exists in table users');
|
||||
|
||||
/* 3.4. Получение значения. */
|
||||
// Получаю значение id
|
||||
$id = $db->GetValue(
|
||||
table: 'users',
|
||||
table: $tableName,
|
||||
column: 'id',
|
||||
where: new ConditionBuilder()->WhereEquals('login', 'account2')
|
||||
);
|
||||
|
||||
// Убеждаюсь, что значение получено и оно совпадает с ожидаемым
|
||||
$this->assertEquals("3552914c-9ffc-4c73-8946-97c40b0d81b5", $id);
|
||||
}
|
||||
|
||||
public function testUpdate ()
|
||||
{
|
||||
$this->IncludeReq();
|
||||
/* 4. Обновление данных. */
|
||||
/* 4.1. Обновление одной записи. */
|
||||
// Обновляю запись model1
|
||||
$model1->Email = 'account1@yandex.ru';
|
||||
|
||||
$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 = $db->GetRow(
|
||||
'users',
|
||||
where: new ConditionBuilder()->WhereEquals('login', 'account1'),
|
||||
className: '\goodboyalex\php_db_components_pack\tests\data\UserModel'
|
||||
);
|
||||
|
||||
$this->assertTrue($model !== false);
|
||||
|
||||
$model->Email = 'account1@yandex.ru';
|
||||
|
||||
$result = $db->Update('users', $model);
|
||||
// Обновляю запись
|
||||
$result = $db->Update($tableName, $model);
|
||||
|
||||
// Убеждаюсь, что запись обновлена
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
public function testUpdateMany ()
|
||||
{
|
||||
$this->IncludeReq();
|
||||
|
||||
$db = $this->GetDatabase();
|
||||
|
||||
$model1 = $db->GetRow(
|
||||
'users',
|
||||
where: new ConditionBuilder()->WhereEquals('login', 'account2'),
|
||||
className: '\goodboyalex\php_db_components_pack\tests\data\UserModel'
|
||||
);
|
||||
|
||||
$this->assertTrue($model1 !== false);
|
||||
|
||||
$model1->Email = 'account2@yandex.ru';
|
||||
$model1->IsEmailVerified = true;
|
||||
|
||||
$model2 = $db->GetRow(
|
||||
'users',
|
||||
where: new ConditionBuilder()->WhereEquals('login', 'account3'),
|
||||
className: '\goodboyalex\php_db_components_pack\tests\data\UserModel'
|
||||
);
|
||||
|
||||
$this->assertTrue($model2 !== false);
|
||||
|
||||
|
||||
$model2->Email = 'account3@yandex.ru';
|
||||
/* 4.2. Обновление нескольких записей. */
|
||||
// Обновляю записи
|
||||
$model2->Email = 'account2@yandex.ru';
|
||||
$model2->IsEmailVerified = true;
|
||||
|
||||
$model3 = $db->GetRow(
|
||||
'users',
|
||||
where: new ConditionBuilder()->WhereEquals('login', 'account4'),
|
||||
className: '\goodboyalex\php_db_components_pack\tests\data\UserModel'
|
||||
);
|
||||
|
||||
$this->assertTrue($model3 !== false);
|
||||
|
||||
$model3->Email = 'account4@yandex.ru';
|
||||
$model3->Email = 'account3@yandex.ru';
|
||||
$model3->IsEmailVerified = true;
|
||||
|
||||
$model4->Email = 'account4@yandex.ru';
|
||||
$model4->IsEmailVerified = true;
|
||||
|
||||
$result = $db->UpdateMany('users', $model1, $model2, $model3);
|
||||
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
public function testDelete ()
|
||||
{
|
||||
$this->IncludeReq();
|
||||
|
||||
$db = $this->GetDatabase();
|
||||
|
||||
$result = $db->Delete('users', new ConditionBuilder()->WhereEquals('email_verified', 0));
|
||||
// Обновляю записи
|
||||
$result = $db->UpdateMany($tableName, $model1, $model2, $model3);
|
||||
|
||||
// Убеждаюсь, что записи обновлены
|
||||
$this->assertTrue($result);
|
||||
|
||||
$count = $db->Count('users');
|
||||
/* 5. Удаление данных. */
|
||||
/* 5.1. Удаление одной записи. */
|
||||
|
||||
// Удаляю запись
|
||||
$result = $db->Delete($tableName, new ConditionBuilder()->WhereEquals('email_verified', 0));
|
||||
|
||||
// Убеждаюсь, что запись удалена
|
||||
$this->assertTrue($result);
|
||||
|
||||
// - и количество записей в таблице
|
||||
$count = $db->Count($tableName);
|
||||
|
||||
// - равно 3
|
||||
$this->assertEquals(3, $count);
|
||||
|
||||
$result = $db->Delete('users');
|
||||
/* 5.2. Удаление нескольких записей. */
|
||||
// Удаляю записи
|
||||
$result = $db->Delete($tableName);
|
||||
|
||||
// Убеждаюсь, что записи удалены
|
||||
$this->assertTrue($result);
|
||||
// - и количество записей в таблице
|
||||
$count = $db->Count($tableName);
|
||||
// - равно 0
|
||||
$this->assertEquals(0, $count);
|
||||
|
||||
/* 6. Удаление таблицы. */
|
||||
// Удаляю таблицу
|
||||
$result = $db->DropTable($tableName);
|
||||
|
||||
// Убеждаюсь, что таблица удалена
|
||||
$this->assertTrue($result);
|
||||
|
||||
$count = $db->Count('users');
|
||||
$this->assertEquals(0, $count);
|
||||
}
|
||||
// - и таблица не существует
|
||||
$this->assertFalse($db->IsTableExist($tableName));
|
||||
|
||||
private function IncludeReq (): void {}
|
||||
|
||||
private function GetDatabase (): Database {}
|
||||
/* КОНЕЦ ТЕСТА */
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user