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