diff --git a/lib/SP/Repositories/Account/AccountToUserGroupRepository.php b/lib/SP/Repositories/Account/AccountToUserGroupRepository.php index 636bdda9..fb64ffdb 100644 --- a/lib/SP/Repositories/Account/AccountToUserGroupRepository.php +++ b/lib/SP/Repositories/Account/AccountToUserGroupRepository.php @@ -44,6 +44,7 @@ class AccountToUserGroupRepository extends Repository * Obtiene el listado con el nombre de los grupos de una cuenta. * * @param int $id con el Id de la cuenta + * * @return ItemData[] */ public function getUserGroupsByAccountId($id) @@ -67,6 +68,7 @@ class AccountToUserGroupRepository extends Repository * Obtiene el listado con el nombre de los grupos de una cuenta. * * @param $id + * * @return ItemData[] */ public function getUserGroupsByUserGroupId($id) @@ -88,6 +90,7 @@ class AccountToUserGroupRepository extends Repository /** * @param $id int + * * @return bool * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException @@ -99,25 +102,28 @@ class AccountToUserGroupRepository extends Repository $queryData->addParam($id); $queryData->setOnErrorMessage(__u('Error al eliminar grupos asociados a la cuenta')); - return DbWrapper::getQuery($queryData, $this->db); + DbWrapper::getQuery($queryData, $this->db); + + return $this->db->getNumRows(); } /** * @param AccountRequest $accountRequest - * @return $this + * + * @return bool * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException */ public function update(AccountRequest $accountRequest) { $this->deleteByAccountId($accountRequest->id); - $this->add($accountRequest); - return $this; + return $this->add($accountRequest); } /** * @param $id int + * * @return bool * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException @@ -129,12 +135,15 @@ class AccountToUserGroupRepository extends Repository $queryData->addParam($id); $queryData->setOnErrorMessage(__u('Error al eliminar grupos asociados a la cuenta')); - return DbWrapper::getQuery($queryData, $this->db); + DbWrapper::getQuery($queryData, $this->db); + + return $this->db->getNumRows(); } /** * @param AccountRequest $accountRequest - * @return bool + * + * @return int Last ID inserted * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException */ @@ -155,25 +164,28 @@ class AccountToUserGroupRepository extends Repository $queryData->setOnErrorMessage(__u('Error al actualizar los grupos secundarios')); - return DbWrapper::getQuery($queryData, $this->db); + DbWrapper::getQuery($queryData, $this->db); + + return $this->db->getNumRows(); } /** * @param AccountRequest $accountRequest - * @return $this + * + * @return bool * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException */ public function updateEdit(AccountRequest $accountRequest) { $this->deleteEditByAccountId($accountRequest->id); - $this->addEdit($accountRequest); - return $this; + return $this->addEdit($accountRequest); } /** * @param $id int + * * @return bool * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException @@ -185,12 +197,15 @@ class AccountToUserGroupRepository extends Repository $queryData->addParam($id); $queryData->setOnErrorMessage(__u('Error al eliminar grupos asociados a la cuenta')); - return DbWrapper::getQuery($queryData, $this->db); + DbWrapper::getQuery($queryData, $this->db); + + return $this->db->getNumRows(); } /** * @param AccountRequest $accountRequest - * @return bool + * + * @return int Last ID inserted * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException */ @@ -211,6 +226,8 @@ class AccountToUserGroupRepository extends Repository $queryData->setOnErrorMessage(__u('Error al actualizar los grupos secundarios')); - return DbWrapper::getQuery($queryData, $this->db); + DbWrapper::getQuery($queryData, $this->db); + + return $this->db->getNumRows(); } } \ No newline at end of file diff --git a/lib/SP/Storage/MySQLHandler.php b/lib/SP/Storage/MySQLHandler.php index 313ae35b..c9c228e7 100644 --- a/lib/SP/Storage/MySQLHandler.php +++ b/lib/SP/Storage/MySQLHandler.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link https://syspass.org + * @author nuxsmin + * @link https://syspass.org * @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. @@ -38,6 +38,11 @@ class MySQLHandler implements DBStorageInterface { const STATUS_OK = 0; const STATUS_KO = 1; + const PDO_OPTS = [ + PDO::ATTR_EMULATE_PREPARES => false, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_FOUND_ROWS => true + ]; /** * @var PDO */ @@ -95,18 +100,15 @@ class MySQLHandler implements DBStorageInterface } try { - $opts = [PDO::ATTR_EMULATE_PREPARES => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]; + $this->db = new PDO( + $this->getConnectionUri(), + $this->connectionData->getDbUser(), + $this->connectionData->getDbPass(), + self::PDO_OPTS + ); - $this->db = new PDO($this->getConnectionUri(), $this->connectionData->getDbUser(), $this->connectionData->getDbPass(), $opts); $this->dbStatus = self::STATUS_OK; } catch (\Exception $e) { -// if ($isInstalled) { -// if ($e->getCode() === 1049) { -// $this->ConfigData->setInstalled(false); -// $this->Config->saveConfig($this->ConfigData); -// } -// } - throw new SPException( __u('No es posible conectar con la BD'), SPException::CRITICAL, @@ -135,7 +137,7 @@ class MySQLHandler implements DBStorageInterface if (null !== $this->connectionData->getDbName()) { $dsn .= ';dbname=' . $this->connectionData->getDbName(); } - + return $dsn . ';charset=utf8'; } diff --git a/tests/AccountToTagRepositoryTest.php b/tests/AccountToTagRepositoryTest.php new file mode 100644 index 00000000..c7c5c949 --- /dev/null +++ b/tests/AccountToTagRepositoryTest.php @@ -0,0 +1,135 @@ +. + */ + +namespace SP\Tests; + +use DI\DependencyException; +use SP\Account\AccountRequest; +use SP\Core\Exceptions\ConstraintException; +use SP\DataModel\ItemData; +use SP\Repositories\Account\AccountToTagRepository; +use SP\Storage\DatabaseConnectionData; + +/** + * Class AccountToTagRepositoryTest + * + * Tests unitarios para la comprobación de operaciones de etiquetas asociadas a cuentas + * + * @package SP\Tests + */ +class AccountToTagRepositoryTest extends DatabaseTestCase +{ + /** + * @var AccountToTagRepository + */ + private static $accountToTagRepository; + + /** + * @throws DependencyException + * @throws \DI\NotFoundException + * @throws \SP\Core\Context\ContextException + */ + public static function setUpBeforeClass() + { + $dic = setupContext(); + + // Datos de conexión a la BBDD + self::$databaseConnectionData = $dic->get(DatabaseConnectionData::class); + + // Inicializar el repositorio + self::$accountToTagRepository = $dic->get(AccountToTagRepository::class); + } + + /** + * Comprobar la creación de etiquetas asociadas a las cuentas + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testAdd() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 1; + $accountRequest->tags = [2, 3]; + + $this->assertTrue(self::$accountToTagRepository->add($accountRequest)); + + $tags = self::$accountToTagRepository->getTagsByAccountId($accountRequest->id); + + $this->assertCount(3, $tags); + $this->assertInstanceOf(ItemData::class, $tags[0]); + $this->assertInstanceOf(ItemData::class, $tags[1]); + $this->assertInstanceOf(ItemData::class, $tags[2]); + + $this->expectException(ConstraintException::class); + + $accountRequest->tags = [1]; + + self::$accountToTagRepository->add($accountRequest); + } + + + /** + * Comprobar la eliminación de etiquetas por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testDeleteByAccountId() + { + $this->assertTrue(self::$accountToTagRepository->deleteByAccountId(1)); + $this->assertCount(0, self::$accountToTagRepository->getTagsByAccountId(1)); + $this->assertTrue(self::$accountToTagRepository->deleteByAccountId(10)); + } + + /** + * Comprobar la obtención de etiquetas por Id de cuenta + */ + public function testGetTagsByAccountId() + { + $this->assertCount(1, self::$accountToTagRepository->getTagsByAccountId(1)); + $this->assertCount(0, self::$accountToTagRepository->getTagsByAccountId(10)); + } + + /** + * Comprobar la actualización de etiquetas por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testUpdate() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 1; + $accountRequest->tags = [1, 2]; + + self::$accountToTagRepository->update($accountRequest); + + $tags = self::$accountToTagRepository->getTagsByAccountId($accountRequest->id); + + $this->assertCount(2, $tags); + $this->assertInstanceOf(ItemData::class, $tags[0]); + $this->assertInstanceOf(ItemData::class, $tags[1]); + } +} diff --git a/tests/AccountToUserGroupRepositoryTest.php b/tests/AccountToUserGroupRepositoryTest.php new file mode 100644 index 00000000..accd8c33 --- /dev/null +++ b/tests/AccountToUserGroupRepositoryTest.php @@ -0,0 +1,314 @@ +. + */ + +namespace SP\Tests; + +use DI\DependencyException; +use SP\Account\AccountRequest; +use SP\Core\Exceptions\ConstraintException; +use SP\DataModel\ItemData; +use SP\Repositories\Account\AccountToUserGroupRepository; +use SP\Storage\DatabaseConnectionData; + +/** + * Class AccountToUserRepositoryTest + * + * Tests unitarios para la comprobación de operaciones de grupos de usuarios asociados a cuentas + * + * @package SP\Tests + */ +class AccountToUserGroupRepositoryTest extends DatabaseTestCase +{ + /** + * @var AccountToUserGroupRepository + */ + private static $accountToUserGroupRepository; + + /** + * @throws DependencyException + * @throws \DI\NotFoundException + * @throws \SP\Core\Context\ContextException + */ + public static function setUpBeforeClass() + { + $dic = setupContext(); + + // Datos de conexión a la BBDD + self::$databaseConnectionData = $dic->get(DatabaseConnectionData::class); + + // Inicializar el repositorio + self::$accountToUserGroupRepository = $dic->get(AccountToUserGroupRepository::class); + } + + /** + * Comprobar la actualización de grupos de usuarios por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testUpdate() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 1; + $accountRequest->userGroupsView = [1, 2, 3]; + + $this->assertEquals(3, self::$accountToUserGroupRepository->update($accountRequest)); + + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByAccountId($accountRequest->id); + + $this->assertCount(3, $userGroups); + $this->assertInstanceOf(ItemData::class, $userGroups[0]); + $this->assertEquals(0, (int)$userGroups[0]->isEdit); + $this->assertInstanceOf(ItemData::class, $userGroups[1]); + $this->assertEquals(0, (int)$userGroups[1]->isEdit); + $this->assertInstanceOf(ItemData::class, $userGroups[2]); + $this->assertEquals(0, (int)$userGroups[2]->isEdit); + + $this->expectException(ConstraintException::class); + + $accountRequest->userGroupsView = [10]; + + self::$accountToUserGroupRepository->update($accountRequest); + + $accountRequest->id = 3; + $accountRequest->userGroupsView = [1, 2, 3]; + + self::$accountToUserGroupRepository->update($accountRequest); + } + + /** + * Comprobar la obtención de grupos de usuarios por Id de cuenta + */ + public function testGetUsersByAccountId() + { + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByAccountId(1); + + $this->assertCount(1, $userGroups); + $this->assertInstanceOf(ItemData::class, $userGroups[0]); + + $userGroupsView = array_filter($userGroups, function ($user) { + return (int)$user->isEdit === 0; + }); + + $this->assertCount(0, $userGroupsView); + + $userGroupsEdit = array_filter($userGroups, function ($user) { + return (int)$user->isEdit === 1; + }); + + $this->assertCount(1, $userGroupsEdit); + + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByAccountId(2); + + $this->assertCount(1, $userGroups); + $this->assertInstanceOf(ItemData::class, $userGroups[0]); + + $userGroupsView = array_filter($userGroups, function ($user) { + return (int)$user->isEdit === 0; + }); + + $this->assertCount(1, $userGroupsView); + + $userGroupsEdit = array_filter($userGroups, function ($user) { + return (int)$user->isEdit === 1; + }); + + $this->assertCount(0, $userGroupsEdit); + + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByAccountId(3); + + $this->assertCount(0, $userGroups); + } + + /** + * Comprobar la actualización de grupos de usuarios con permisos de modificación por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testUpdateEdit() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 2; + $accountRequest->userGroupsEdit = [2, 3]; + + $this->assertEquals(3, self::$accountToUserGroupRepository->updateEdit($accountRequest)); + + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByAccountId($accountRequest->id); + + $this->assertCount(2, $userGroups); + $this->assertInstanceOf(ItemData::class, $userGroups[0]); + $this->assertEquals(1, (int)$userGroups[0]->isEdit); + $this->assertInstanceOf(ItemData::class, $userGroups[1]); + $this->assertEquals(1, (int)$userGroups[1]->isEdit); + + $this->expectException(ConstraintException::class); + + // Comprobar que se lanza excepción al añadir usuarios no existentes + $accountRequest->userGroupsEdit = [10]; + + self::$accountToUserGroupRepository->updateEdit($accountRequest); + + // Comprobar que se lanza excepción al añadir usuarios a cuenta no existente + $accountRequest->id = 3; + $accountRequest->userGroupsEdit = [2, 3]; + + self::$accountToUserGroupRepository->updateEdit($accountRequest); + } + + /** + * Comprobar la eliminación de grupos de usuarios por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testDeleteByAccountId() + { + $this->assertEquals(1, self::$accountToUserGroupRepository->deleteByAccountId(1)); + $this->assertCount(0, self::$accountToUserGroupRepository->getUserGroupsByAccountId(1)); + + $this->assertEquals(0, self::$accountToUserGroupRepository->deleteByAccountId(10)); + + $this->assertEquals(1, $this->conn->getRowCount('AccountToUserGroup')); + } + + /** + * Comprobar la insercción de grupos de usuarios con permisos de modificación por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testAddEdit() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 2; + $accountRequest->userGroupsEdit = [1, 2, 3]; + + self::$accountToUserGroupRepository->addEdit($accountRequest); + + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByAccountId($accountRequest->id); + + $this->assertCount(3, $userGroups); + $this->assertInstanceOf(ItemData::class, $userGroups[0]); + $this->assertInstanceOf(ItemData::class, $userGroups[1]); + $this->assertInstanceOf(ItemData::class, $userGroups[2]); + + $this->expectException(ConstraintException::class); + + // Comprobar que se lanza excepción al añadir usuarios no existentes + $accountRequest->userGroupsEdit = [10]; + + self::$accountToUserGroupRepository->addEdit($accountRequest); + + // Comprobar que se lanza excepción al añadir grupos de usuarios a cuenta no existente + $accountRequest->id = 3; + $accountRequest->userGroupsEdit = [1, 2, 3]; + + self::$accountToUserGroupRepository->addEdit($accountRequest); + } + + /** + * Comprobar la insercción de grupos de usuarios por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testAdd() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 2; + $accountRequest->userGroupsView = [1, 2, 3]; + + $this->assertEquals(3, self::$accountToUserGroupRepository->add($accountRequest)); + + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByAccountId($accountRequest->id); + + $this->assertCount(3, $userGroups); + $this->assertInstanceOf(ItemData::class, $userGroups[0]); + $this->assertInstanceOf(ItemData::class, $userGroups[1]); + $this->assertInstanceOf(ItemData::class, $userGroups[2]); + + $this->expectException(ConstraintException::class); + + // Comprobar que se lanza excepción al añadir usuarios no existentes + $accountRequest->userGroupsView = [10]; + + self::$accountToUserGroupRepository->add($accountRequest); + + // Comprobar que se lanza excepción al añadir grupos de usuarios a cuenta no existente + $accountRequest->id = 3; + $accountRequest->userGroupsView = [1, 2, 3]; + + self::$accountToUserGroupRepository->add($accountRequest); + } + + /** + * Comprobar la eliminación de grupos de usuarios con permisos de modificación por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testDeleteEditByAccountId() + { + $this->assertEquals(1, self::$accountToUserGroupRepository->deleteEditByAccountId(1)); + $this->assertCount(0, self::$accountToUserGroupRepository->getUserGroupsByAccountId(1)); + + $this->assertEquals(0, self::$accountToUserGroupRepository->deleteEditByAccountId(10)); + + $this->assertEquals(1, $this->conn->getRowCount('AccountToUserGroup')); + } + + /** + * Comprobar la obtención de grupos de usuarios por Id de grupo + */ + public function testGetUserGroupsByUserGroupId() + { + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByUserGroupId(2); + + $this->assertCount(2, $userGroups); + + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByUserGroupId(3); + + $this->assertCount(0, $userGroups); + + $userGroups = self::$accountToUserGroupRepository->getUserGroupsByUserGroupId(10); + + $this->assertCount(0, $userGroups); + } + + /** + * Comprobar la eliminación de grupos de usuarios por Id de grupo + * + * @throws ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testDeleteByUserGroupId() + { + $this->assertEquals(2, self::$accountToUserGroupRepository->deleteByUserGroupId(2)); + + $this->assertEquals(0, self::$accountToUserGroupRepository->deleteByUserGroupId(1)); + + $this->assertEquals(0, self::$accountToUserGroupRepository->deleteByUserGroupId(10)); + } +} diff --git a/tests/AccountToUserRepositoryTest.php b/tests/AccountToUserRepositoryTest.php new file mode 100644 index 00000000..23df9b97 --- /dev/null +++ b/tests/AccountToUserRepositoryTest.php @@ -0,0 +1,281 @@ +. + */ + +namespace SP\Tests; + +use DI\DependencyException; +use SP\Account\AccountRequest; +use SP\Core\Exceptions\ConstraintException; +use SP\DataModel\ItemData; +use SP\Repositories\Account\AccountToUserRepository; +use SP\Storage\DatabaseConnectionData; + +/** + * Class AccountToUserRepositoryTest + * + * Tests unitarios para la comprobación de operaciones de usuarios asociados a cuentas + * + * @package SP\Tests + */ +class AccountToUserRepositoryTest extends DatabaseTestCase +{ + /** + * @var AccountToUserRepository + */ + private static $accountToUserRepository; + + /** + * @throws DependencyException + * @throws \DI\NotFoundException + * @throws \SP\Core\Context\ContextException + */ + public static function setUpBeforeClass() + { + $dic = setupContext(); + + // Datos de conexión a la BBDD + self::$databaseConnectionData = $dic->get(DatabaseConnectionData::class); + + // Inicializar el repositorio + self::$accountToUserRepository = $dic->get(AccountToUserRepository::class); + } + + /** + * Comprobar la actualización de usuarios por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testUpdate() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 1; + $accountRequest->usersView = [1, 2, 3]; + + self::$accountToUserRepository->update($accountRequest); + + $users = self::$accountToUserRepository->getUsersByAccountId($accountRequest->id); + + $this->assertCount(3, $users); + $this->assertInstanceOf(ItemData::class, $users[0]); + $this->assertEquals(0, (int)$users[0]->isEdit); + $this->assertInstanceOf(ItemData::class, $users[1]); + $this->assertEquals(0, (int)$users[1]->isEdit); + $this->assertInstanceOf(ItemData::class, $users[2]); + $this->assertEquals(0, (int)$users[2]->isEdit); + + $this->expectException(ConstraintException::class); + + $accountRequest->usersView = [10]; + + self::$accountToUserRepository->update($accountRequest); + + $accountRequest->id = 3; + $accountRequest->usersView = [1, 2, 3]; + + self::$accountToUserRepository->update($accountRequest); + } + + /** + * Comprobar la obtención de usuarios por Id de cuenta + */ + public function testGetUsersByAccountId() + { + $users = self::$accountToUserRepository->getUsersByAccountId(1); + + $this->assertCount(1, $users); + $this->assertInstanceOf(ItemData::class, $users[0]); + + $usersView = array_filter($users, function ($user) { + return (int)$user->isEdit === 0; + }); + + $this->assertCount(0, $usersView); + + $usersEdit = array_filter($users, function ($user) { + return (int)$user->isEdit === 1; + }); + + $this->assertCount(1, $usersEdit); + + $users = self::$accountToUserRepository->getUsersByAccountId(2); + + $this->assertCount(1, $users); + $this->assertInstanceOf(ItemData::class, $users[0]); + + $usersView = array_filter($users, function ($user) { + return (int)$user->isEdit === 0; + }); + + $this->assertCount(1, $usersView); + + $usersEdit = array_filter($users, function ($user) { + return (int)$user->isEdit === 1; + }); + + $this->assertCount(0, $usersEdit); + + $users = self::$accountToUserRepository->getUsersByAccountId(3); + + $this->assertCount(0, $users); + } + + /** + * Comprobar la actualización de usuarios con permisos de modificación por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testUpdateEdit() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 2; + $accountRequest->usersEdit = [2, 3]; + + self::$accountToUserRepository->updateEdit($accountRequest); + + $users = self::$accountToUserRepository->getUsersByAccountId($accountRequest->id); + + $this->assertCount(2, $users); + $this->assertInstanceOf(ItemData::class, $users[0]); + $this->assertEquals(1, (int)$users[0]->isEdit); + $this->assertInstanceOf(ItemData::class, $users[1]); + $this->assertEquals(1, (int)$users[1]->isEdit); + + $this->expectException(ConstraintException::class); + + // Comprobar que se lanza excepción al añadir usuarios no existentes + $accountRequest->usersEdit = [10]; + + self::$accountToUserRepository->updateEdit($accountRequest); + + // Comprobar que se lanza excepción al añadir usuarios a cuenta no existente + $accountRequest->id = 3; + $accountRequest->usersEdit = [2, 3]; + + self::$accountToUserRepository->updateEdit($accountRequest); + } + + /** + * Comprobar la eliminación de usuarios por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testDeleteByAccountId() + { + $this->assertEquals(1, self::$accountToUserRepository->deleteByAccountId(1)); + $this->assertCount(0, self::$accountToUserRepository->getUsersByAccountId(1)); + + $this->assertEquals(0, self::$accountToUserRepository->deleteByAccountId(10)); + + $this->assertEquals(1, $this->conn->getRowCount('AccountToUser')); + } + + /** + * Comprobar la insercción de usuarios con permisos de modificación por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testAddEdit() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 2; + $accountRequest->usersEdit = [1, 2, 3]; + + self::$accountToUserRepository->addEdit($accountRequest); + + $users = self::$accountToUserRepository->getUsersByAccountId($accountRequest->id); + + $this->assertCount(3, $users); + $this->assertInstanceOf(ItemData::class, $users[0]); + $this->assertInstanceOf(ItemData::class, $users[1]); + $this->assertInstanceOf(ItemData::class, $users[2]); + + $this->expectException(ConstraintException::class); + + // Comprobar que se lanza excepción al añadir usuarios no existentes + $accountRequest->usersEdit = [10]; + + self::$accountToUserRepository->addEdit($accountRequest); + + // Comprobar que se lanza excepción al añadir usuarios a cuenta no existente + $accountRequest->id = 3; + $accountRequest->usersEdit = [1, 2, 3]; + + self::$accountToUserRepository->addEdit($accountRequest); + } + + /** + * Comprobar la insercción de usuarios por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testAdd() + { + $accountRequest = new AccountRequest(); + $accountRequest->id = 2; + $accountRequest->usersView = [1, 2, 3]; + + self::$accountToUserRepository->add($accountRequest); + + $users = self::$accountToUserRepository->getUsersByAccountId($accountRequest->id); + + $this->assertCount(3, $users); + $this->assertInstanceOf(ItemData::class, $users[0]); + $this->assertInstanceOf(ItemData::class, $users[1]); + $this->assertInstanceOf(ItemData::class, $users[2]); + + $this->expectException(ConstraintException::class); + + // Comprobar que se lanza excepción al añadir usuarios no existentes + $accountRequest->usersView = [10]; + + self::$accountToUserRepository->add($accountRequest); + + // Comprobar que se lanza excepción al añadir usuarios a cuenta no existente + $accountRequest->id = 3; + $accountRequest->usersView = [1, 2, 3]; + + self::$accountToUserRepository->add($accountRequest); + } + + /** + * Comprobar la eliminación de usuarios con permisos de modificación por Id de cuenta + * + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testDeleteEditByAccountId() + { + $this->assertEquals(1, self::$accountToUserRepository->deleteEditByAccountId(1)); + $this->assertCount(0, self::$accountToUserRepository->getUsersByAccountId(1)); + + $this->assertEquals(0, self::$accountToUserRepository->deleteEditByAccountId(10)); + + $this->assertEquals(1, $this->conn->getRowCount('AccountToUser')); + } +} diff --git a/tests/UserGroupRepositoryTest.php b/tests/UserGroupRepositoryTest.php index 70f5f7bd..7dac43c3 100644 --- a/tests/UserGroupRepositoryTest.php +++ b/tests/UserGroupRepositoryTest.php @@ -217,7 +217,7 @@ class UserGroupRepositoryTestCase extends DatabaseTestCase */ public function testGetUsage() { - $this->assertCount(5, self::$userGroupRepository->getUsage(2)); + $this->assertCount(7, self::$userGroupRepository->getUsage(2)); $this->assertCount(0, self::$userGroupRepository->getUsage(3)); } diff --git a/tests/UserRepositoryTest.php b/tests/UserRepositoryTest.php index 4aeaf5d9..82f74367 100644 --- a/tests/UserRepositoryTest.php +++ b/tests/UserRepositoryTest.php @@ -159,7 +159,7 @@ class UserRepositoryTest extends DatabaseTestCase */ public function testGetUsageForUser() { - $this->assertCount(1, self::$userRepository->getUsageForUser(2)); + $this->assertCount(2, self::$userRepository->getUsageForUser(2)); } /** diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 315c43bb..c59ef972 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -90,7 +90,7 @@ function setupContext() // Establecer configuración de conexión con la BBDD $databaseConnectionData = (new DatabaseConnectionData()) - ->setDbHost('172.17.0.3') + ->setDbHost('syspass-db') ->setDbName('syspass') ->setDbUser('root') ->setDbPass('syspass'); diff --git a/tests/res/datasets/syspass.xml b/tests/res/datasets/syspass.xml index ebc4a1e6..4be4d507 100644 --- a/tests/res/datasets/syspass.xml +++ b/tests/res/datasets/syspass.xml @@ -271,8 +271,23 @@ 3 1 + + 2 + 2 + 0 + + + 1 + 2 + 1 + + + 2 + 2 + 0 +