cubicweb/test/unittest_vregistry.py
changeset 11057 0b59724cb3f2
parent 9675 8aabfefc8a81
child 11269 73ac69970047
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/test/unittest_vregistry.py	Sat Jan 16 13:48:51 2016 +0100
@@ -0,0 +1,90 @@
+# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This file is part of CubicWeb.
+#
+# CubicWeb is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License along
+# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
+
+from logilab.common.testlib import unittest_main, TestCase
+
+from os.path import join
+
+from cubicweb import CW_SOFTWARE_ROOT as BASE
+from cubicweb.appobject import AppObject
+from cubicweb.cwvreg import CWRegistryStore, UnknownProperty
+from cubicweb.devtools import TestServerConfiguration
+from cubicweb.devtools.testlib import CubicWebTC
+from cubicweb.view import EntityAdapter
+
+from cubes.card.entities import Card
+
+class YesSchema:
+    def __contains__(self, something):
+        return True
+
+WEBVIEWSDIR = join(BASE, 'web', 'views')
+
+class VRegistryTC(TestCase):
+
+    def setUp(self):
+        config = TestServerConfiguration('data')
+        self.vreg = CWRegistryStore(config)
+        config.bootstrap_cubes()
+        self.vreg.schema = config.load_schema()
+
+    def test_load_interface_based_vojects(self):
+        self.vreg.init_registration([WEBVIEWSDIR])
+        self.vreg.load_file(join(BASE, 'entities', '__init__.py'), 'cubicweb.entities.__init__')
+        self.vreg.load_file(join(WEBVIEWSDIR, 'idownloadable.py'), 'cubicweb.web.views.idownloadable')
+        self.vreg.load_file(join(WEBVIEWSDIR, 'primary.py'), 'cubicweb.web.views.primary')
+        self.assertEqual(len(self.vreg['views']['primary']), 2)
+        self.vreg.initialization_completed()
+        self.assertEqual(len(self.vreg['views']['primary']), 1)
+
+
+    def test_load_subinterface_based_appobjects(self):
+        self.vreg.register_objects([join(BASE, 'web', 'views', 'idownloadable.py')])
+        # check downloadlink was kicked
+        self.assertFalse(self.vreg['views'].get('downloadlink'))
+        # we've to emulate register_objects to add custom MyCard objects
+        path = [join(BASE, 'entities', '__init__.py'),
+                join(BASE, 'entities', 'adapters.py'),
+                join(BASE, 'web', 'views', 'idownloadable.py')]
+        filemods = self.vreg.init_registration(path, None)
+        for filepath, modname in filemods:
+            self.vreg.load_file(filepath, modname)
+        class CardIDownloadableAdapter(EntityAdapter):
+            __regid__ = 'IDownloadable'
+        self.vreg._loadedmods[__name__] = {}
+        self.vreg.register(CardIDownloadableAdapter)
+        self.vreg.initialization_completed()
+        # check progressbar isn't kicked
+        self.assertEqual(len(self.vreg['views']['downloadlink']), 1)
+
+    def test_properties(self):
+        self.vreg.reset()
+        self.assertNotIn('system.version.cubicweb', self.vreg['propertydefs'])
+        self.assertTrue(self.vreg.property_info('system.version.cubicweb'))
+        self.assertRaises(UnknownProperty, self.vreg.property_info, 'a.non.existent.key')
+
+
+class CWVregTC(CubicWebTC):
+
+    def test_property_default_overriding(self):
+        # see data/views.py
+        from cubicweb.web.views.xmlrss import RSSIconBox
+        self.assertEqual(self.vreg.property_info(RSSIconBox._cwpropkey('visible'))['default'], True)
+
+if __name__ == '__main__':
+    unittest_main()