cubicweb/web/test/unittest_uicfg.py
changeset 11057 0b59724cb3f2
parent 9341 099a3a33eaaa
child 11876 b35e21fc1f9b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/web/test/unittest_uicfg.py	Sat Jan 16 13:48:51 2016 +0100
@@ -0,0 +1,139 @@
+# copyright 2003-2010 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/>.
+import copy
+from logilab.common.testlib import tag
+from cubicweb.devtools.testlib import CubicWebTC
+from cubicweb.web import uihelper, formwidgets as fwdgs
+from cubicweb.web.views import uicfg
+
+abaa = uicfg.actionbox_appearsin_addmenu
+
+class UICFGTC(CubicWebTC):
+
+    def test_default_actionbox_appearsin_addmenu_config(self):
+        self.assertFalse(abaa.etype_get('TrInfo', 'wf_info_for', 'object', 'CWUser'))
+
+
+
+class DefinitionOrderTC(CubicWebTC):
+    """This test check that when multiple definition could match a key, only
+    the more accurate apply"""
+
+    def setUp(self):
+        super(DefinitionOrderTC, self).setUp()
+        for rtag in (uicfg.autoform_section, uicfg.autoform_field_kwargs):
+            rtag._old_tagdefs = copy.deepcopy(rtag._tagdefs)
+        new_def = (
+                    (('*', 'login', '*'),
+                         {'formtype':'main', 'section':'hidden'}),
+                    (('*', 'login', '*'),
+                         {'formtype':'muledit', 'section':'hidden'}),
+                    (('CWUser', 'login', '*'),
+                         {'formtype':'main', 'section':'attributes'}),
+                    (('CWUser', 'login', '*'),
+                         {'formtype':'muledit', 'section':'attributes'}),
+                    (('CWUser', 'login', 'String'),
+                         {'formtype':'main', 'section':'inlined'}),
+                    (('CWUser', 'login', 'String'),
+                         {'formtype':'inlined', 'section':'attributes'}),
+                    )
+        for key, kwargs in new_def:
+            uicfg.autoform_section.tag_subject_of(key, **kwargs)
+
+    def tearDown(self):
+        super(DefinitionOrderTC, self).tearDown()
+        for rtag in (uicfg.autoform_section, uicfg.autoform_field_kwargs):
+            rtag._tagdefs = rtag._old_tagdefs
+
+    @tag('uicfg')
+    def test_definition_order_hidden(self):
+        result = uicfg.autoform_section.get('CWUser', 'login', 'String', 'subject')
+        expected = set(['main_inlined', 'muledit_attributes', 'inlined_attributes'])
+        self.assertSetEqual(result, expected)
+
+    @tag('uihelper', 'order', 'func')
+    def test_uihelper_set_fields_order(self):
+        afk_get = uicfg.autoform_field_kwargs.get
+        self.assertEqual(afk_get('CWUser', 'firstname', 'String', 'subject'), {})
+        uihelper.set_fields_order('CWUser', ('login', 'firstname', 'surname'))
+        self.assertEqual(afk_get('CWUser', 'firstname', 'String', 'subject'), {'order': 1})
+
+    @tag('uicfg', 'order', 'func')
+    def test_uicfg_primaryview_set_fields_order(self):
+        pvdc = uicfg.primaryview_display_ctrl
+        pvdc.set_fields_order('CWUser', ('login', 'firstname', 'surname'))
+        self.assertEqual(pvdc.get('CWUser', 'login', 'String', 'subject'), {'order': 0})
+        self.assertEqual(pvdc.get('CWUser', 'firstname', 'String', 'subject'), {'order': 1})
+        self.assertEqual(pvdc.get('CWUser', 'surname', 'String', 'subject'), {'order': 2})
+
+    @tag('uihelper', 'kwargs', 'func')
+    def test_uihelper_set_field_kwargs(self):
+        afk_get = uicfg.autoform_field_kwargs.get
+        self.assertEqual(afk_get('CWUser', 'firstname', 'String', 'subject'), {})
+        wdg = fwdgs.TextInput({'size': 30})
+        uihelper.set_field_kwargs('CWUser', 'firstname', widget=wdg)
+        self.assertEqual(afk_get('CWUser', 'firstname', 'String', 'subject'), {'widget': wdg})
+
+    @tag('uihelper', 'hidden', 'func')
+    def test_uihelper_hide_fields(self):
+        # original conf : in_group is edited in 'attributes' section everywhere
+        section_conf = uicfg.autoform_section.get('CWUser', 'in_group', '*', 'subject')
+        self.assertCountEqual(section_conf, ['main_attributes', 'muledit_attributes'])
+        # hide field in main form
+        uihelper.hide_fields('CWUser', ('login', 'in_group'))
+        section_conf = uicfg.autoform_section.get('CWUser', 'in_group', '*', 'subject')
+        self.assertCountEqual(section_conf, ['main_hidden', 'muledit_attributes'])
+        # hide field in muledit form
+        uihelper.hide_fields('CWUser', ('login', 'in_group'), formtype='muledit')
+        section_conf = uicfg.autoform_section.get('CWUser', 'in_group', '*', 'subject')
+        self.assertCountEqual(section_conf, ['main_hidden', 'muledit_hidden'])
+
+    @tag('uihelper', 'hidden', 'formconfig')
+    def test_uihelper_formconfig(self):
+        afk_get = uicfg.autoform_field_kwargs.get
+        class CWUserFormConfig(uihelper.FormConfig):
+            etype = 'CWUser'
+            hidden = ('in_group',)
+            fields_order = ('login', 'firstname')
+        section_conf = uicfg.autoform_section.get('CWUser', 'in_group', '*', 'subject')
+        self.assertCountEqual(section_conf, ['main_hidden', 'muledit_attributes'])
+        self.assertEqual(afk_get('CWUser', 'firstname', 'String', 'subject'), {'order': 1})
+
+
+class UicfgRegistryTC(CubicWebTC):
+
+    def test_default_uicfg_object(self):
+        'CW default ui config objects must be registered in uicfg registry'
+        onames = ('autoform_field', 'autoform_section', 'autoform_field_kwargs')
+        for oname in onames:
+            obj = self.vreg['uicfg'].select_or_none(oname)
+            self.assertTrue(obj is not None, '%s not found in uicfg registry'
+                            % oname)
+
+    def test_custom_uicfg(self):
+        ASRT = uicfg.AutoformSectionRelationTags
+        custom_afs = ASRT()
+        custom_afs.__select__ = ASRT.__select__ & ASRT.__select__
+        self.vreg['uicfg'].register(custom_afs)
+        obj = self.vreg['uicfg'].select_or_none('autoform_section')
+        self.assertTrue(obj is custom_afs)
+
+
+if __name__ == '__main__':
+    from logilab.common.testlib import unittest_main
+    unittest_main()