From 5186648889e76d92e5066b626e981ea73c15fc9f Mon Sep 17 00:00:00 2001 From: Marcos Zuriaga Date: Wed, 12 Oct 2016 19:08:59 +0200 Subject: [PATCH] Added unit test for SharingACLMapper Renamed some vars Added launch_phpunit.sh to gitignore --- .gitignore | 3 + lib/Db/SharingACLMapper.php | 6 +- tests/db/DatabaseHelperTest.php | 23 ++++ tests/unit/lib/Db/SharingACLMapperTest.php | 139 ++++++++++++++++++++- 4 files changed, 167 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index ed7fbffa..fd649094 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ node_modules .idea .sass-cache npm-debug.log + +# Don't mess with other dev's config +launch_phpunit.sh diff --git a/lib/Db/SharingACLMapper.php b/lib/Db/SharingACLMapper.php index f019930d..93a1a81a 100644 --- a/lib/Db/SharingACLMapper.php +++ b/lib/Db/SharingACLMapper.php @@ -29,12 +29,12 @@ class SharingACLMapper extends Mapper { /** * Gets the currently accepted share requests from the given user for the given vault guid * @param $user_id - * @param $vault_id + * @param $vault_guid * @return SharingACL[] */ - public function getVaultEntries($user_id, $vault_id) { + public function getVaultEntries($user_id, $vault_guid) { $q = "SELECT * FROM ". self::TABLE_NAME ." WHERE user_id = ? AND vault_guid = ?"; - return $this->findEntities($q, [$user_id, $vault_id]); + return $this->findEntities($q, [$user_id, $vault_guid]); } /** diff --git a/tests/db/DatabaseHelperTest.php b/tests/db/DatabaseHelperTest.php index 0d4a4d9a..a10e7724 100644 --- a/tests/db/DatabaseHelperTest.php +++ b/tests/db/DatabaseHelperTest.php @@ -102,6 +102,29 @@ abstract class DatabaseHelperTest extends PHPUnit_Extensions_Database_TestCase { return $this->datasets[$table_name]->getTable($table_name); } + /** + * Finds a subset of rows from the dataset which field name matches + * the specified value + * @param $table_name The name of the table to search into + * @param $field_name The field name + * @param $value_match The value to match data against + * @return array An array of rows + */ + public function findInDataset($table_name, $field_name, $value_match) { + $table = $this->getTableDataset($table_name); + $rows = $table->getRowCount(); + + $result = []; + for ($i = 0; $i < $rows; $i++) { + $row = $table->getRow($i); + if ($row[$field_name] == $value_match){ + $result[] = $row; + } + } + + return $result; + } + /** * @coversNothing */ diff --git a/tests/unit/lib/Db/SharingACLMapperTest.php b/tests/unit/lib/Db/SharingACLMapperTest.php index f03d8558..3d76553f 100644 --- a/tests/unit/lib/Db/SharingACLMapperTest.php +++ b/tests/unit/lib/Db/SharingACLMapperTest.php @@ -8,6 +8,143 @@ * @copyright Copyright (c) 2016, Marcos Zuriaga Miguel (wolfi@wolfi.es) * @license AGPLv3 */ -class SharingACLMapperTest { +use \OCA\Passman\Db\SharingACLMapper; +use \OCA\Passman\Db\SharingACL; +/** + * @coversDefaultClass \OCA\Passman\Db\SharingACLMapper + */ +class SharingACLMapperTest extends DatabaseHelperTest { + CONST TABLES = [ + 'oc_passman_sharing_acl' + ]; + + /** + * @var SharingACLMapper + */ + protected $mapper; + + /** + * @var PHPUnit_Extensions_Database_DataSet_ITable + */ + protected $dataset; + /** + * This function should return the table name, for example + * for a test running on oc_passman_vaults it shall return ["oc_passman_vaults"] + * + * @internal + * @return string[] + */ + public function getTablesNames() { + return self::TABLES; + } + + public function setUp() { + parent::setUp(); + $this->mapper = new SharingACLMapper($this->db); + $this->dataset = $this->getTableDataset(self::TABLES[0]); + } + + /** + * @covers ::getItemACL + * @uses SharingACL + */ + public function testGetItemACL() { + $expected_acl = $this->dataset->getRow(0); + $expected_acl = SharingACL::fromRow($expected_acl); + + $acl = $this->mapper->getItemACL( + $expected_acl->getUserId(), + $expected_acl->getItemGuid() + ); + + $this->assertInstanceOf(SharingACL::class, $acl); + $this->assertEquals($expected_acl, $acl); + } + + /** + * @covers ::getVaultEntries + */ + public function testGetVaultEntries() { + $expected_data = $this->findInDataset(self::TABLES[0], 'user_id', $this->dataset->getRow(0)['user_id']); + + $this->assertNotCount(0, $expected_data, "The dataset has no values D:"); + $result = $this->mapper->getVaultEntries($expected_data[0]['user_id'], $expected_data[0]['vault_guid']); + + $this->assertInternalType('array', $expected_data); + $this->assertCount(count($expected_data), $result); + $this->assertInstanceOf(SharingACL::class, $result[0]); + + foreach ($expected_data as &$row) { + $row = SharingACL::fromRow($row); + } + + $this->assertEquals($expected_data, $result, "Data not matching the tests data", 0.0, 10, true, false); + } + + /** + * @covers ::updateCredentialACL + */ + public function testUpdateCredentialACL() { + $expected_data = SharingACL::fromRow($this->dataset->getRow(0)); + $data = $this->mapper->getItemACL( + $expected_data->getUserId(), + $expected_data->getItemGuid() + ); + + $this->assertEquals($expected_data, $data); + + $data->setExpire(\OCA\Passman\Utility\Utils::getTime()); + $this->mapper->updateCredentialACL($data); + + $updated = $this->mapper->getItemACL( + $expected_data->getUserId(), + $expected_data->getItemGuid() + ); + + $this->assertEquals($data->getId(), $updated->getId()); + $this->assertNotEquals($expected_data->getExpire(), $updated->getExpire()); + $this->assertEquals($data->getExpire(), $updated->getExpire()); + } + + /** + * @covers ::getCredentialAclList + */ + public function testGetCredentialAclList() { + $expected_data = $this->findInDataset( + self::TABLES[0], + 'item_guid', + $this->dataset->getRow(0)['item_guid'] + ); + + $this->assertNotEmpty($expected_data); + + $data = $this->mapper->getCredentialAclList($expected_data[0]['item_guid']); + + $this->assertInternalType('array', $data); + $this->assertCount(count($expected_data), $data); + $this->assertInstanceOf(SharingACL::class, $data[0]); + + foreach ($expected_data as &$row) { + $row = SharingACL::fromRow($row); + } + + $this->assertEquals($expected_data, $data, "Data not matching the tests data", 0.0, 10, true, false); + } + + /** + * @covers ::deleteShareACL + */ + public function testDeleteShareACL() { + $test_data = SharingACL::fromRow($this->dataset->getRow(0)); + + $this->mapper->deleteShareACL($test_data); + + $this->expectException(\OCP\AppFramework\Db\DoesNotExistException::class); + + $this->mapper->getItemACL( + $test_data->getUserId(), + $test_data->getItemGuid() + ); + } } \ No newline at end of file