diff --git a/tests/classes/DatabaseTest.php b/tests/classes/DatabaseTest.php index 060a7d1..f3572c2 100644 --- a/tests/classes/DatabaseTest.php +++ b/tests/classes/DatabaseTest.php @@ -13,23 +13,26 @@ class DatabaseTest extends TestCase { + /** + * Тестирование базы данных. + * + * ВНИМАТЕЛЬНО ПРОЧТИТЕ, ПЕРЕД ВЫПОЛНЕНИЕМ ТЕСТА. + * + * Подготовка к тесту: + * + * - создайте тестовую базу данных; + * - создайте пользователя и его пароль; + * - сделайте его создателем с правами управления созданной в п. 1 БД; + * - в корне папки "tests" создайте файл "database_config.php"; + * - убедитесь, что он добавлен в .gitignore и НИКАКИМ ОБРАЗОМ НЕ ПОПАДЁТ В РЕПОЗИТАРИЙ (это + * скомпрометирует вшу БД!); + * - в этом файле задайте переменной $testConfig класс настроек с необходимыми настройками или можете + * воспользоваться файлом "database_config_sample.php", переименовав его в "database_config.php". + * + * @return void + */ public function testDatabase () { - /** - * ВНИМАТЕЛЬНО ПРОЧТИТЕ, ПЕРЕД ВЫПОЛНЕНИЕМ ТЕСТА. - * - * Подготовка к тесту: - * - * - создайте тестовую базу данных; - * - создайте пользователя и его пароль; - * - сделайте его создателем с правами управления созданной в п. 1 БД; - * - в корне папки "tests" создайте файл "database_config.php"; - * - убедитесь, что он добавлен в .gitignore и НИКАКИМ ОБРАЗОМ НЕ ПОПАДЁТ В РЕПОЗИТАРИЙ (это - * скомпрометирует вшу БД!); - * - в этом файле задайте переменной $testConfig класс настроек с необходимыми настройками или можете - * воспользоваться файлом "database_config_sample.php", переименовав его в "database_config.php". - */ - /** * Подключаем настройки базы данных. * @@ -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(); - $db = $this->GetDatabase(); + /* 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' + ); - 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(); - $db = $this->GetDatabase(); + /* 4. Обновление данных. */ + /* 4.1. Обновление одной записи. */ + // Обновляю запись model1 + $model1->Email = 'account1@yandex.ru'; - 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 {} } \ No newline at end of file