source: products/quintagroup.gauth/trunk/quintagroup/gauth/tests.py @ 2613

Last change on this file since 2613 was 2613, checked in by mylan, 14 years ago

Added tests for SafeQuery? class

  • Property svn:eol-style set to native
File size: 6.0 KB
RevLine 
[2613]1import sys
[2605]2import re
[2577]3import unittest
[2613]4from StringIO import StringIO
[2577]5
6#from zope.testing import doctestunit
7#from zope.component import testing
[2610]8from zope.component import queryUtility, queryAdapter
9from zope.component import getSiteManager, getGlobalSiteManager
[2577]10from Testing import ZopeTestCase as ztc
11
12from Products.Five import fiveconfigure
13from Products.PloneTestCase import PloneTestCase as ptc
14from Products.PloneTestCase.layer import PloneSite
[2608]15from Products.PloneTestCase.PloneTestCase import portal_owner
16from Products.PloneTestCase.PloneTestCase import default_password
17
[2577]18ptc.setupPloneSite()
19
20import quintagroup.gauth
[2613]21from quintagroup.gauth.utility import SafeQuery
[2609]22from quintagroup.gauth.interfaces import IGAuthUtility
[2610]23from quintagroup.gauth.browser.configlet import IGAuthConfigletSchema
[2577]24
[2605]25class GauthLayer(PloneSite):
26    @classmethod
27    def setUp(cls):
28        fiveconfigure.debug_mode = True
29        ztc.installPackage(quintagroup.gauth)
30        fiveconfigure.debug_mode = False
[2577]31
[2605]32    @classmethod
33    def tearDown(cls):
34        pass
[2577]35
36
[2605]37class TestCase(ptc.PloneTestCase):
38    layer = GauthLayer
[2577]39
40
[2607]41class FunctionalTestCase(ptc.FunctionalTestCase):
[2605]42    layer = GauthLayer
[2577]43
[2605]44    def _getauth(self):
45        # Fix authenticator for the form
46        try:
47            authenticator = self.portal.restrictedTraverse("@@authenticator")
48        except:
49            handle  = ""
50        else:
51            html = authenticator.authenticator()
52            handle = re.search('value="(.*)"', html).groups()[0]
53        return handle
[2604]54
55
[2605]56class TestInstall(TestCase):
[2609]57
[2605]58    def afterSetUp(self):
59        self.loginAsPortalOwner()
[2607]60        self.addProduct("quintagroup.gauth")
61       
[2605]62    def testProperties(self):
63        pp = self.portal.portal_properties
64        self.assert_("gauth_properties" in pp.objectIds())
[2607]65        self.assert_(bool(pp.gauth_properties.hasProperty("gauth_email")))
[2604]66
[2605]67    def testConfiglet(self):
68        cp = self.portal.portal_controlpanel
[2607]69        aifs = [ai['id'] for ai in cp.listActionInfos(
70                check_visibility=0, check_permissions=0, check_condition=0)]
71        self.assert_("quintagroup.gauth" in aifs, aifs)
[2604]72
[2609]73    def testUtility(self):
74        lsm = getSiteManager(self.portal)
[2610]75        gsm = getGlobalSiteManager()
76        lgauth = lsm.queryUtility(IGAuthUtility)
77        ggauth = gsm.queryUtility(IGAuthUtility)
78        self.assertEqual(ggauth, None)
79        self.assertNotEqual(lgauth, None)
[2604]80
[2610]81
[2608]82class TestConfiglet(FunctionalTestCase):
83
84    def afterSetUp(self):
85        self.loginAsPortalOwner()
86        self.addProduct("quintagroup.gauth")
87        self.basic_auth = portal_owner + ":" + default_password
88        self.get_url = self.portal.id+'/@@gauth-controlpanel'
89        self.save_url = self.portal.id+'/@@gauth-controlpanel?form.actions.save=1' \
90            '&_authenticator=%s' % self._getauth()
91
92    def test_presentEmail(self):
93        res = self.publish(self.get_url, self.basic_auth).getBody()
94        self.assert_(re.match(".*<input\s[^>]*name=\"form.gauth_email\"[^>]*>", res, re.I|re.S))
95
96    def test_presentPassword(self):
97        res = self.publish(self.get_url, self.basic_auth).getBody()
98        self.assert_(re.match(".*<input\s[^>]*name=\"form.gauth_pass\"[^>]*>", res, re.I|re.S))
99
100    def test_update(self):
101        temail, tpass = "tester@test.com", "secret"
[2609]102        gauth_util = queryUtility(IGAuthUtility)
[2608]103        url = self.save_url + '&form.gauth_email='+temail + '&form.gauth_pass='+tpass
104        self.publish(url, self.basic_auth)
105        self.assert_(gauth_util.email == temail)
106        self.assert_(gauth_util.password == tpass)
107
[2609]108
[2610]109class TestUtility(FunctionalTestCase):
110
111    def afterSetUp(self):
112        self.loginAsPortalOwner()
113        self.addProduct("quintagroup.gauth")
114        sm = getSiteManager(self.portal)
115        self.gauthutil = sm.queryUtility(IGAuthUtility)
116        self.gauthconfiglet = queryAdapter(self.portal, IGAuthConfigletSchema)
117
118    def testEmail(self):
119        self.assertEqual(bool(self.gauthutil.email), False)
120        self.gauthconfiglet.gauth_email = "tester@test.com"
121        self.assertEqual(self.gauthutil.email, "tester@test.com")
122
123    def testPassword(self):
124        self.assertEqual(bool(self.gauthutil.password), False)
125        self.gauthconfiglet.gauth_pass = u"secret"
126        self.assertEqual(self.gauthutil.password, "secret")
127
128
[2613]129import gdata.service
130
131out = ""
132class DummyService(object):
133    doraise = False
134
135    def ProgrammaticLogin(self):
136        global out
137        out += "\nCall ProgrammaticLogin"
138        self.doraise = False
139
140    def Action(self, *args, **kwargs):
141        global out
142        out += "\nCall Action with: args='%s', kwargs='%s'" % (str(args), str(kwargs))
143        if self.doraise:
144            raise gdata.service.RequestError("Token is expired")
145
146class TestSafeQuery(unittest.TestCase):
147
148    def setUp(self):
149        global out
150        self.serv = DummyService()
151        self.args = "test_arg",
152        self.kwargs = {"kw1_key": "kw1_val"}
153        self.sq = SafeQuery()
154        out = ""
155
156    def testMethodCall(self):
157        self.sq.safeQuery(self.serv, self.serv.Action, *self.args, **self.kwargs)
158        res = filter(None, out.split("\n"))
159        self.assertEqual(res[0],
160            "Call Action with: args='%s', kwargs='%s'" % (str(self.args), str(self.kwargs)))
161
162    def testProgrammaticLogin(self):
163        self.serv.doraise = True
164        self.sq.safeQuery(self.serv, self.serv.Action, *self.args, **self.kwargs)
165        res = filter(None, out.split("\n"))
166        self.assertEqual(res[0], "Call Action with: args='%s', kwargs='%s'" % (
167            str(self.args), str(self.kwargs)))
168        self.assertEqual(res[1], "Call ProgrammaticLogin")
169        self.assertEqual(res[2], "Call Action with: args='%s', kwargs='%s'" % (
170            str(self.args), str(self.kwargs)))
171
172
[2577]173def test_suite():
[2605]174    from unittest import TestSuite, makeSuite
175    suite = TestSuite()
176    suite.addTest(makeSuite(TestInstall))
[2608]177    suite.addTest(makeSuite(TestConfiglet))
[2610]178    suite.addTest(makeSuite(TestUtility))
[2613]179    suite.addTest(makeSuite(TestSafeQuery))
[2605]180    return suite
[2577]181
182
183if __name__ == '__main__':
184    unittest.main(defaultTest='test_suite')
Note: See TracBrowser for help on using the repository browser.