From 7b100cc57b58a1ef5c2c6cef28904e1ba79f0c49 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Wed, 20 Jul 2016 21:40:27 -0400 Subject: Move logic of PR #2496 to GroupModel --- app/Controller/ProjectPermissionController.php | 8 +-- app/Model/GroupModel.php | 19 +++++++ tests/units/Model/GroupModelTest.php | 69 ++++++++++++++++++++++++++ tests/units/Model/GroupTest.php | 60 ---------------------- 4 files changed, 89 insertions(+), 67 deletions(-) create mode 100644 tests/units/Model/GroupModelTest.php delete mode 100644 tests/units/Model/GroupTest.php diff --git a/app/Controller/ProjectPermissionController.php b/app/Controller/ProjectPermissionController.php index cbcdf77d..99f556e8 100644 --- a/app/Controller/ProjectPermissionController.php +++ b/app/Controller/ProjectPermissionController.php @@ -147,13 +147,7 @@ class ProjectPermissionController extends BaseController $values = $this->request->getValues(); if (empty($values['group_id']) && ! empty($values['external_id'])) { - $group = $this->groupModel->getByExternalId($values['external_id']); - if ($group) { - $values['group_id'] = $group['id']; - } - else { - $values['group_id'] = $this->groupModel->create($values['name'], $values['external_id']); - } + $values['group_id'] = $this->groupModel->getOrCreateExternalGroupId($values['name'], $values['external_id']); } if ($this->projectGroupRoleModel->addGroup($project['id'], $values['group_id'], $values['role'])) { diff --git a/app/Model/GroupModel.php b/app/Model/GroupModel.php index 0a975570..b43423b3 100644 --- a/app/Model/GroupModel.php +++ b/app/Model/GroupModel.php @@ -116,4 +116,23 @@ class GroupModel extends Base { return $this->db->table(self::TABLE)->eq('id', $values['id'])->update($values); } + + /** + * Get groupId from externalGroupId and create the group if not found + * + * @access public + * @param string $name + * @param string $external_id + * @return bool|integer + */ + public function getOrCreateExternalGroupId($name, $external_id) + { + $group_id = $this->db->table(self::TABLE)->eq('external_id', $external_id)->findOneColumn('id'); + + if (empty($group_id)) { + $group_id = $this->create($name, $external_id); + } + + return $group_id; + } } diff --git a/tests/units/Model/GroupModelTest.php b/tests/units/Model/GroupModelTest.php new file mode 100644 index 00000000..4ad0a167 --- /dev/null +++ b/tests/units/Model/GroupModelTest.php @@ -0,0 +1,69 @@ +container); + $this->assertEquals(1, $groupModel->create('Test')); + $this->assertFalse($groupModel->create('Test')); + } + + public function testGetById() + { + $groupModel = new GroupModel($this->container); + $this->assertEquals(1, $groupModel->create('Test')); + + $group = $groupModel->getById(1); + $this->assertEquals('Test', $group['name']); + $this->assertEquals('', $group['external_id']); + + $this->assertEmpty($groupModel->getById(2)); + } + + public function testGetAll() + { + $groupModel = new GroupModel($this->container); + $this->assertEquals(1, $groupModel->create('B')); + $this->assertEquals(2, $groupModel->create('A', 'uuid')); + + $groups = $groupModel->getAll(); + $this->assertCount(2, $groups); + $this->assertEquals('A', $groups[0]['name']); + $this->assertEquals('uuid', $groups[0]['external_id']); + $this->assertEquals('B', $groups[1]['name']); + $this->assertEquals('', $groups[1]['external_id']); + } + + public function testUpdate() + { + $groupModel = new GroupModel($this->container); + $this->assertEquals(1, $groupModel->create('Test')); + $this->assertTrue($groupModel->update(array('id' => 1, 'name' => 'My group', 'external_id' => 'test'))); + + $group = $groupModel->getById(1); + $this->assertEquals('My group', $group['name']); + $this->assertEquals('test', $group['external_id']); + } + + public function testRemove() + { + $groupModel = new GroupModel($this->container); + $this->assertEquals(1, $groupModel->create('Test')); + $this->assertTrue($groupModel->remove(1)); + $this->assertEmpty($groupModel->getById(1)); + } + + public function testGetOrCreateExternalGroupId() + { + $groupModel = new GroupModel($this->container); + $this->assertEquals(1, $groupModel->create('Group 1', 'ExternalId1')); + $this->assertEquals(1, $groupModel->getOrCreateExternalGroupId('Group 1', 'ExternalId1')); + $this->assertEquals(1, $groupModel->getOrCreateExternalGroupId('Group 2', 'ExternalId1')); + $this->assertEquals(2, $groupModel->getOrCreateExternalGroupId('Group 2', 'ExternalId2')); + } +} diff --git a/tests/units/Model/GroupTest.php b/tests/units/Model/GroupTest.php deleted file mode 100644 index 85c2c5d9..00000000 --- a/tests/units/Model/GroupTest.php +++ /dev/null @@ -1,60 +0,0 @@ -container); - $this->assertEquals(1, $groupModel->create('Test')); - $this->assertFalse($groupModel->create('Test')); - } - - public function testGetById() - { - $groupModel = new GroupModel($this->container); - $this->assertEquals(1, $groupModel->create('Test')); - - $group = $groupModel->getById(1); - $this->assertEquals('Test', $group['name']); - $this->assertEquals('', $group['external_id']); - - $this->assertEmpty($groupModel->getById(2)); - } - - public function testGetAll() - { - $groupModel = new GroupModel($this->container); - $this->assertEquals(1, $groupModel->create('B')); - $this->assertEquals(2, $groupModel->create('A', 'uuid')); - - $groups = $groupModel->getAll(); - $this->assertCount(2, $groups); - $this->assertEquals('A', $groups[0]['name']); - $this->assertEquals('uuid', $groups[0]['external_id']); - $this->assertEquals('B', $groups[1]['name']); - $this->assertEquals('', $groups[1]['external_id']); - } - - public function testUpdate() - { - $groupModel = new GroupModel($this->container); - $this->assertEquals(1, $groupModel->create('Test')); - $this->assertTrue($groupModel->update(array('id' => 1, 'name' => 'My group', 'external_id' => 'test'))); - - $group = $groupModel->getById(1); - $this->assertEquals('My group', $group['name']); - $this->assertEquals('test', $group['external_id']); - } - - public function testRemove() - { - $groupModel = new GroupModel($this->container); - $this->assertEquals(1, $groupModel->create('Test')); - $this->assertTrue($groupModel->remove(1)); - $this->assertEmpty($groupModel->getById(1)); - } -} -- cgit v1.2.3