From 38209e70d5fb1fdec69a800c738804427c63413a Mon Sep 17 00:00:00 2001 From: Dean Rasheed <dar17@cam.ac.uk> Date: Fri, 23 Dec 2016 16:18:18 +0000 Subject: [PATCH] Bug fix for the python and PHP XML parsers. The membersOfInst field in the group DTO class needs a special case when it is being parsed, since its XML element tag name differs from the usual name that institution XML elements have. Added a new unit test to test this, and fixed an existing test to reflect a change in the Lookup test data, so that all the tests pass again. -- Imported using git-svn from https://dev.csi.cam.ac.uk/svn/lookup/trunk@82 --- src/php/ibisclient/dto/IbisGroup.php | 2 +- src/php/ibisclient/dto/IbisResult.php | 2 ++ src/php/test/UnitTests.php | 9 ++++++++- src/python/ibisclient/dto.py | 2 ++ src/python/test/unittests.py | 7 ++++++- src/python3/ibisclient/dto.py | 2 ++ src/python3/test/unittests.py | 7 ++++++- 7 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/php/ibisclient/dto/IbisGroup.php b/src/php/ibisclient/dto/IbisGroup.php index 0c01362..a288e64 100644 --- a/src/php/ibisclient/dto/IbisGroup.php +++ b/src/php/ibisclient/dto/IbisGroup.php @@ -199,7 +199,7 @@ class IbisGroup extends IbisDto { $group->unflattened = true; if (isset($group->membersOfInst)) - $group->membersOfInst = $group->membersOfInst->unflatten(em); + $group->membersOfInst = $group->membersOfInst->unflatten($em); IbisPerson::unflattenPeople($em, $group->members); IbisPerson::unflattenPeople($em, $group->directMembers); IbisInstitution::unflattenInsts($em, $group->owningInsts); diff --git a/src/php/ibisclient/dto/IbisResult.php b/src/php/ibisclient/dto/IbisResult.php index b47d80a..73b18b7 100644 --- a/src/php/ibisclient/dto/IbisResult.php +++ b/src/php/ibisclient/dto/IbisResult.php @@ -298,6 +298,8 @@ class IbisResultParser $element = new IbisPerson($attrs); elseif ($tagname === "institution") $element = new IbisInstitution($attrs); + elseif ($tagname === "membersOfInst") + $element = new IbisInstitution($attrs); elseif ($tagname === "group") $element = new IbisGroup($attrs); elseif ($tagname === "identifier") diff --git a/src/php/test/UnitTests.php b/src/php/test/UnitTests.php index 49e78a8..426d520 100644 --- a/src/php/test/UnitTests.php +++ b/src/php/test/UnitTests.php @@ -953,6 +953,13 @@ class UnitTests extends PHPUnit_Framework_TestCase $this->assertTrue($group->owningInsts[0] == $group->managesInsts[0]); } + public function testGetGroupMembersOfInst() + { + $group = UnitTests::$gm->getGroup("uis-members", "members_of_inst"); + $this->assertEquals("UIS", $group->membersOfInst->instid); + $this->assertEquals("University Information Services", $group->membersOfInst->name); + } + public function testGetGroupMgrs() { $group = UnitTests::$gm->getGroup("cs-editors", "managed_by_groups.managed_by_groups"); @@ -980,7 +987,7 @@ class UnitTests extends PHPUnit_Framework_TestCase $this->assertEquals(1, sizeof($groups)); $this->assertEquals("uistest-members", $groups[0]->name); $this->assertTrue(sizeof($groups[0]->members) > 10); - $this->assertEquals("abh99", $groups[0]->members[0]->identifier->value); + $this->assertEquals("abc123", $groups[0]->members[0]->identifier->value); } public function testGroupSearchCount() diff --git a/src/python/ibisclient/dto.py b/src/python/ibisclient/dto.py index e13d77c..9f53419 100644 --- a/src/python/ibisclient/dto.py +++ b/src/python/ibisclient/dto.py @@ -1324,6 +1324,8 @@ class IbisResultParser: element = IbisPerson(attrs) elif tagname == "institution": element = IbisInstitution(attrs) + elif tagname == "membersOfInst": + element = IbisInstitution(attrs) elif tagname == "group": element = IbisGroup(attrs) elif tagname == "identifier": diff --git a/src/python/test/unittests.py b/src/python/test/unittests.py index 1b3eb07..8870e13 100644 --- a/src/python/test/unittests.py +++ b/src/python/test/unittests.py @@ -796,6 +796,11 @@ class IbisUnitTests(unittest.TestCase): self.assertEqual("UIS", group.managesInsts[0].instid) self.assertTrue(group.owningInsts[0] == group.managesInsts[0]) + def test_get_group_members_of_inst(self): + group = gm.getGroup("uis-members", "members_of_inst") + self.assertEqual("UIS", group.membersOfInst.instid) + self.assertEqual("University Information Services", group.membersOfInst.name) + def test_get_group_mgrs(self): group = gm.getGroup("cs-editors", "managed_by_groups.managed_by_groups") self.assertEqual("cs-managers", group.managedByGroups[0].name) @@ -818,7 +823,7 @@ class IbisUnitTests(unittest.TestCase): self.assertEqual(1, len(groups)) self.assertEqual("uistest-members", groups[0].name) self.assertTrue(len(groups[0].members) > 10) - self.assertEqual("abh99", groups[0].members[0].identifier.value) + self.assertEqual("abc123", groups[0].members[0].identifier.value) def test_group_search_count(self): count = gm.searchCount("maths editors") diff --git a/src/python3/ibisclient/dto.py b/src/python3/ibisclient/dto.py index fa7101e..e54fae3 100644 --- a/src/python3/ibisclient/dto.py +++ b/src/python3/ibisclient/dto.py @@ -1324,6 +1324,8 @@ class IbisResultParser: element = IbisPerson(attrs) elif tagname == "institution": element = IbisInstitution(attrs) + elif tagname == "membersOfInst": + element = IbisInstitution(attrs) elif tagname == "group": element = IbisGroup(attrs) elif tagname == "identifier": diff --git a/src/python3/test/unittests.py b/src/python3/test/unittests.py index 650311a..5e7c9f5 100644 --- a/src/python3/test/unittests.py +++ b/src/python3/test/unittests.py @@ -796,6 +796,11 @@ class IbisUnitTests(unittest.TestCase): self.assertEqual("UIS", group.managesInsts[0].instid) self.assertTrue(group.owningInsts[0] == group.managesInsts[0]) + def test_get_group_members_of_inst(self): + group = gm.getGroup("uis-members", "members_of_inst") + self.assertEqual("UIS", group.membersOfInst.instid) + self.assertEqual("University Information Services", group.membersOfInst.name) + def test_get_group_mgrs(self): group = gm.getGroup("cs-editors", "managed_by_groups.managed_by_groups") self.assertEqual("cs-managers", group.managedByGroups[0].name) @@ -818,7 +823,7 @@ class IbisUnitTests(unittest.TestCase): self.assertEqual(1, len(groups)) self.assertEqual("uistest-members", groups[0].name) self.assertTrue(len(groups[0].members) > 10) - self.assertEqual("abh99", groups[0].members[0].identifier.value) + self.assertEqual("abc123", groups[0].members[0].identifier.value) def test_group_search_count(self): count = gm.searchCount("maths editors") -- GitLab