[tests] Add a webtest based TestCase class
authorChristophe de Vienne <christophe@unlish.com>
Tue, 17 Jun 2014 11:14:20 +0200
changeset 9930 d20c2b262f55
parent 9929 16163ee1cdf9
child 9931 013dd868e6da
[tests] Add a webtest based TestCase class Closes #4002134
devtools/test/unittest_webtest.py
devtools/webtest.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devtools/test/unittest_webtest.py	Tue Jun 17 11:14:20 2014 +0200
@@ -0,0 +1,40 @@
+import httplib
+
+from logilab.common.testlib import Tags
+from cubicweb.devtools.webtest import CubicWebTestTC
+
+
+class CWTTC(CubicWebTestTC):
+    def test_response(self):
+        response = self.webapp.get('/')
+        self.assertEqual(200, response.status_int)
+
+    def test_base_url(self):
+        if self.config['base-url'] not in self.webapp.get('/').text:
+            self.fail('no mention of base url in retrieved page')
+
+
+class CWTIdentTC(CubicWebTestTC):
+    anonymous_allowed = False
+    tags = CubicWebTestTC.tags | Tags(('auth',))
+
+    def test_reponse_denied(self):
+        res = self.webapp.get('/', expect_errors=True)
+        self.assertEqual(httplib.FORBIDDEN, res.status_int)
+
+    def test_login(self):
+        res = self.webapp.get('/', expect_errors=True)
+        self.assertEqual(httplib.FORBIDDEN, res.status_int)
+
+        self.login(self.admlogin, self.admpassword)
+        res = self.webapp.get('/')
+        self.assertEqual(httplib.OK, res.status_int)
+
+        self.logout()
+        res = self.webapp.get('/', expect_errors=True)
+        self.assertEqual(httplib.FORBIDDEN, res.status_int)
+
+
+if __name__ == '__main__':
+    from logilab.common.testlib import unittest_main
+    unittest_main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devtools/webtest.py	Tue Jun 17 11:14:20 2014 +0200
@@ -0,0 +1,36 @@
+from __future__ import absolute_import
+
+import webtest
+
+from cubicweb.wsgi import handler
+from cubicweb.devtools.testlib import CubicWebTC
+
+
+class CubicWebTestTC(CubicWebTC):
+    @classmethod
+    def init_config(cls, config):
+        super(CubicWebTestTC, cls).init_config(config)
+        config.global_set_option('base-url', 'http://localhost.local/')
+
+    def setUp(self):
+        super(CubicWebTestTC, self).setUp()
+        webapp = handler.CubicWebWSGIApplication(self.config)
+        self.webapp = webtest.TestApp(webapp)
+
+    def tearDown(self):
+        del self.webapp
+        super(CubicWebTestTC, self).tearDown()
+
+    def login(self, user=None, password=None, **args):
+        if user is None:
+            user = self.admlogin
+        if password is None:
+            password = self.admpassword if user == self.admlogin else user
+        args.update({
+            '__login': user,
+            '__password': password
+        })
+        return self.webapp.get('/login', args)
+
+    def logout(self):
+        return self.webapp.get('/logout')