unittest_views_editforms.py 7.31 KB
Newer Older
1
2
3
4
5
6
7
"""

:organization: Logilab
:copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
"""
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
8
9
from logilab.common.testlib import unittest_main
from cubicweb.devtools.apptest import EnvBasedTC
10
from cubicweb.devtools.testlib import WebTest
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
11
from cubicweb.web.views.autoform import AutomaticEntityForm as AEF
12
from cubicweb.web.formwidgets import AutoCompletionWidget
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
13
14
15
16
17
def rbc(entity, category):
    return [(rschema.type, x) for rschema, tschemas, x in AEF.erelations_by_category(entity, category)]

class AutomaticEntityFormTC(EnvBasedTC):

18
    def test_custom_widget(self):
19
20
        AEF.rfields_kwargs.tag_subject_of(('CWUser', 'login', '*'),
                                          {'widget':AutoCompletionWidget})
21
22
23
24
        form = self.vreg.select_object('forms', 'edition', self.request(), None,
                                       entity=self.user())
        field = form.field_by_name('login')
        self.assertIsInstance(field.widget, AutoCompletionWidget)
25
        AEF.rfields_kwargs.del_rtag('CWUser', 'login', '*', 'subject')
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
26

27

sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
28
29
30
31
    def test_euser_relations_by_category(self):
        #for (rtype, role, stype, otype), tag in AEF.rcategories._tagdefs.items():
        #    if rtype == 'tags':
        #        print rtype, role, stype, otype, ':', tag
32
        e = self.etype_instance('CWUser')
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
        # see custom configuration in views.euser
        self.assertEquals(rbc(e, 'primary'),
                          [('login', 'subject'),
                           ('upassword', 'subject'),
                           ('in_group', 'subject'),
                           ('in_state', 'subject'),
                           ('eid', 'subject'),
                           ])
        self.assertListEquals(rbc(e, 'secondary'),
                              [('firstname', 'subject'),
                               ('surname', 'subject')
                               ])
        self.assertListEquals(rbc(e, 'metadata'),
                              [('last_login_time', 'subject'),
                               ('created_by', 'subject'),
                               ('creation_date', 'subject'),
                               ('modification_date', 'subject'),
                               ('owned_by', 'subject'),
                               ('bookmarked_by', 'object'),
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
52
                               ])
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
53
        self.assertListEquals(rbc(e, 'generic'),
54
55
                              [('primary_email', 'subject'),
                               ('connait', 'subject'),
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
56
57
                               ('checked_by', 'object'),
                               ])
58
        # owned_by is defined both as subject and object relations on CWUser
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
59
        self.assertListEquals(rbc(e, 'generated'),
60
                              [('use_email', 'subject'),
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
61
                               ('has_text', 'subject'),
62
63
                               ('identity', 'subject'),
                               ('is', 'subject'),
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
64
65
66
67
68
69
                               ('is_instance_of', 'subject'),
                               ('tags', 'object'),
                               ('for_user', 'object'),
                               ('created_by', 'object'),
                               ('wf_info_for', 'object'),
                               ('owned_by', 'object'),
70
                               ('identity', 'object'),
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
71
                               ])
72
73

    def test_inlined_view(self):
74
75
        self.failUnless(AEF.rinlined.etype_get('CWUser', 'use_email', 'subject'))
        self.failIf(AEF.rinlined.etype_get('CWUser', 'primary_email', 'subject'))
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
76

sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
    def test_personne_relations_by_category(self):
        e = self.etype_instance('Personne')
        self.assertListEquals(rbc(e, 'primary'),
                              [('nom', 'subject'),
                               ('eid', 'subject')
                               ])
        self.assertListEquals(rbc(e, 'secondary'),
                              [('prenom', 'subject'),
                               ('sexe', 'subject'),
                               ('promo', 'subject'),
                               ('titre', 'subject'),
                               ('ass', 'subject'),
                               ('web', 'subject'),
                               ('tel', 'subject'),
                               ('fax', 'subject'),
                               ('datenaiss', 'subject'),
                               ('test', 'subject'),
                               ('description', 'subject'),
                               ('salary', 'subject')
                               ])
        self.assertListEquals(rbc(e, 'metadata'),
                              [('created_by', 'subject'),
                               ('creation_date', 'subject'),
                               ('modification_date', 'subject'),
                               ('owned_by', 'subject'),
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
102
                               ])
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
103
104
105
106
107
        self.assertListEquals(rbc(e, 'generic'),
                              [('travaille', 'subject'),
                               ('connait', 'object')
                               ])
        self.assertListEquals(rbc(e, 'generated'),
108
109
110
                              [('has_text', 'subject'),
                               ('identity', 'subject'),
                               ('is', 'subject'),
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
111
                               ('is_instance_of', 'subject'),
112
                               ('identity', 'object'),
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
113
                               ])
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
114

115
    def test_edition_form(self):
116
        rset = self.execute('CWUser X LIMIT 1')
117
118
119
120
121
122
        form = self.vreg.select_object('forms', 'edition', rset.req, rset,
                                       row=0, col=0)
        # should be also selectable by specifying entity
        self.vreg.select_object('forms', 'edition', self.request(), None,
                                entity=rset.get_entity(0, 0))
        self.failIf(any(f for f in form.fields if f is None))
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
123
124


125
126
class FormViewsTC(WebTest):
    def test_delete_conf_formview(self):
127
        rset = self.execute('CWGroup X')
128
        self.view('deleteconf', rset, template=None).source
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
129

130
    def test_automatic_edition_formview(self):
131
        rset = self.execute('CWUser X')
132
        self.view('edition', rset, row=0, template=None).source
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
133

134
    def test_automatic_edition_formview(self):
135
        rset = self.execute('CWUser X')
136
        self.view('copy', rset, row=0, template=None).source
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
137

138
    def test_automatic_creation_formview(self):
139
        self.view('creation', None, etype='CWUser', template=None).source
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
140

141
    def test_automatic_muledit_formview(self):
142
        rset = self.execute('CWUser X')
143
        self.view('muledit', rset, template=None).source
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
144

145
    def test_automatic_reledit_formview(self):
146
        rset = self.execute('CWUser X')
147
        self.view('reledit', rset, row=0, rtype='login', template=None).source
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
148

149
    def test_automatic_inline_edit_formview(self):
150
151
        geid = self.execute('CWGroup X LIMIT 1')[0][0]
        rset = self.execute('CWUser X LIMIT 1')
152
        self.view('inline-edition', rset, row=0, rtype='in_group', peid=geid, template=None).source
sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
153

154
    def test_automatic_inline_creation_formview(self):
155
156
        geid = self.execute('CWGroup X LIMIT 1')[0][0]
        self.view('inline-creation', None, etype='CWUser', rtype='in_group', peid=geid, template=None).source
157

sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
158

sylvain.thenault@logilab.fr's avatar
sylvain.thenault@logilab.fr committed
159
160
if __name__ == '__main__':
    unittest_main()