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
+