Break out getting SP metadata into a separate test helper
[cascardo/ipsilon.git] / tests / helpers / http.py
index 833637f..1fe989e 100755 (executable)
@@ -129,9 +129,11 @@ class HttpSessions(object):
         srv = self.servers[idp]
 
         try:
-            results = self.get_form_data(page, "login_form", [])
+            results = self.get_form_data(page, "login_form", ["name", "value"])
             action_url = results[0]
             method = results[1]
+            names = results[2]
+            values = results[3]
             if action_url is None:
                 raise Exception
         except Exception:  # pylint: disable=broad-except
@@ -139,8 +141,13 @@ class HttpSessions(object):
 
         referer = page.make_referer()
         headers = {'referer': referer}
-        payload = {'login_name': srv['user'],
-                   'login_password': srv['pwd']}
+        payload = {}
+        for i in range(0, len(names)):
+            payload[names[i]] = values[i]
+
+        # replace known values
+        payload['login_name'] = srv['user']
+        payload['login_password'] = srv['pwd']
 
         return [method, self.new_url(referer, action_url),
                 {'headers': headers, 'data': payload}]
@@ -221,16 +228,21 @@ class HttpSessions(object):
         page.expected_value('//div[@id="welcome"]/p/text()',
                             'Welcome %s!' % srv['user'])
 
-    def add_sp_metadata(self, idp, sp):
+    def get_sp_metadata(self, idp, sp):
         idpsrv = self.servers[idp]
         idpuri = idpsrv['baseuri']
+
         spuri = self.servers[sp]['baseuri']
 
+        return (idpuri, requests.get('%s/saml2/metadata' % spuri))
+
+    def add_sp_metadata(self, idp, sp):
+        idpsrv = self.servers[idp]
+        (idpuri, m) = self.get_sp_metadata(idp, sp)
         url = '%s/%s/admin/providers/saml2/admin/new' % (idpuri, idp)
+        metafile = {'metafile': m.content}
         headers = {'referer': url}
         payload = {'name': sp}
-        m = requests.get('%s/saml2/metadata' % spuri)
-        metafile = {'metafile': m.content}
         r = idpsrv['session'].post(url, headers=headers,
                                    data=payload, files=metafile)
         if r.status_code != 200: