$terminate ? die($exception->getMessage()) : print $exception->getMessage(); // Подключаем базу данных $db = new Database($testConfig, $onException); /* ТЕСТ 1: Создание таблицы */ // Задаём имя таблицы $tableName = 'users'; // Создаю таблицу $db->CreateTable( tableName: $tableName, dbItemClass: '\goodboyalex\php_db_components_pack\tests\data\UserModel' ); // Проверяю создание $this->assertTrue($db->IsTableExist($tableName)); /* 2. Добавление данных */ /* 2.1. Модели */ // Модель 1 $model1 = new UserModel( id: GUID::Parse('8b5dab25-4445-436c-8f25-0f5352cb8500', true), 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'] ); // Модель 2 $model2 = new UserModel( id: GUID::Parse('3552914c-9ffc-4c73-8946-97c40b0d81b5'), login: "account2", password: "password2", salt: GUID_EMPTY, firstName: "firstName2", middleName: "middleName2", lastName: "lastName2", email: "email2@ya.ru", isEmailVerified: false, groupName: "default", createdAt: time(), updatedAt: 0, userData: ['key1' => 'value3', 'key2' => 4] ); // Модель 3 $model3 = new UserModel( id: GUID::Parse('73828df6-89a3-4feb-ae9a-ef79d0e67cb0'), login: "account3", password: "password3", salt: GUID_EMPTY, firstName: "firstName3", middleName: "middleName3", lastName: "lastName3", email: "email3@ya.ru", isEmailVerified: true, groupName: "default1", createdAt: time(), updatedAt: time(), userData: ['key1' => 1, 'key2' => 2] ); // Модель 4 $model4 = new UserModel( id: GUID::Parse('df39f53f-faff-42cf-bf00-f5855c3e11ec'), login: "account4", password: "password4", salt: GUID_EMPTY, firstName: "firstName4", middleName: "middleName4", lastName: "lastName4", email: "email4@ya.ru", isEmailVerified: true, groupName: "default1", createdAt: time(), updatedAt: time(), userData: ['key1' => 3, 'key2' => '2'] ); /* 2.2. Добавление 1 элемента */ // Вставляю $model1 $result = $db->Insert($tableName, $model1); // Проверяю, успешно ли прошло $this->assertTrue($result !== false); // - и совпадает ли идентификатор $this->assertTrue($model1->Id->IsEqualsTo($result)); /* 2.3. Добавление более 1 элемента */ // Массив ожидаемых результатов $expectedResult = [ GUID::Parse('3552914c-9ffc-4c73-8946-97c40b0d81b5'), GUID::Parse('73828df6-89a3-4feb-ae9a-ef79d0e67cb0'), GUID::Parse('df39f53f-faff-42cf-bf00-f5855c3e11ec') ]; // Вставляю несколько $result = $db->InsertMany($tableName, $model2, $model3, $model4); // Убеждаюсь, что вставка успешна $this->assertTrue($result !== false); // - и все идентификаторы совпадают $this->assertEqualsCanonicalizing($expectedResult, $result); /* 3. Получение данных. */ /* 3.1. Получение одной записи. */ /** * Получаю запись. * * @var false|UserModel $model Модель записи. */ $model = $db->GetRow( 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')) ); /* 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' ); // Убеждаюсь, что записи получены $this->assertTrue($models !== false); // - и запись с логином account2 находится в списке $this->assertTrue($models->IsExist(fn (UserModel $model) => $model->Login == 'account2')); /* 3.3. Получение колонки. */ // Получаю колонку id $models = $db->GetCol( 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); /* 3.4. Получение значения. */ // Получаю значение id $id = $db->GetValue( table: $tableName, column: 'id', where: new ConditionBuilder()->WhereEquals('login', 'account2') ); // Убеждаюсь, что значение получено и оно совпадает с ожидаемым $this->assertEquals("3552914c-9ffc-4c73-8946-97c40b0d81b5", $id); /* 4. Обновление данных. */ /* 4.1. Обновление одной записи. */ // Обновляю запись model1 $model1->Email = 'account1@yandex.ru'; // Обновляю запись $result = $db->Update($tableName, $model); // Убеждаюсь, что запись обновлена $this->assertTrue($result); /* 4.2. Обновление нескольких записей. */ // Обновляю записи $model2->Email = 'account2@yandex.ru'; $model2->IsEmailVerified = true; $model3->Email = 'account3@yandex.ru'; $model3->IsEmailVerified = true; $model4->Email = 'account4@yandex.ru'; $model4->IsEmailVerified = true; // Обновляю записи $result = $db->UpdateMany($tableName, $model1, $model2, $model3); // Убеждаюсь, что записи обновлены $this->assertTrue($result); /* 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); /* 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); // - и таблица не существует $this->assertFalse($db->IsTableExist($tableName)); /* КОНЕЦ ТЕСТА */ } }