24 def setUp(self): |
24 def setUp(self): |
25 super(EntityFieldsFormTC, self).setUp() |
25 super(EntityFieldsFormTC, self).setUp() |
26 self.req = self.request() |
26 self.req = self.request() |
27 self.entity = self.user(self.req) |
27 self.entity = self.user(self.req) |
28 self.renderer = FormRenderer() |
28 self.renderer = FormRenderer() |
29 |
29 |
30 def test_form_field_vocabulary_unrelated(self): |
30 def test_form_field_vocabulary_unrelated(self): |
31 b = self.add_entity('BlogEntry', title=u'di mascii code', content=u'a best-seller') |
31 b = self.add_entity('BlogEntry', title=u'di mascii code', content=u'a best-seller') |
32 t = self.add_entity('Tag', name=u'x') |
32 t = self.add_entity('Tag', name=u'x') |
33 form1 = EntityFieldsForm(self.request(), None, entity=t) |
33 form1 = EntityFieldsForm(self.request(), None, entity=t) |
34 unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')] |
34 unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')] |
39 self.execute('SET X tags Y WHERE X is Tag, Y is BlogEntry') |
39 self.execute('SET X tags Y WHERE X is Tag, Y is BlogEntry') |
40 unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')] |
40 unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')] |
41 self.failIf(b.eid in unrelated, unrelated) |
41 self.failIf(b.eid in unrelated, unrelated) |
42 unrelated = [reid for rview, reid in form2.object_relation_vocabulary('tags')] |
42 unrelated = [reid for rview, reid in form2.object_relation_vocabulary('tags')] |
43 self.failIf(t.eid in unrelated, unrelated) |
43 self.failIf(t.eid in unrelated, unrelated) |
44 |
44 |
45 def test_form_field_vocabulary_new_entity(self): |
45 def test_form_field_vocabulary_new_entity(self): |
46 e = self.etype_instance('CWUser') |
46 e = self.etype_instance('CWUser') |
47 form = EntityFieldsForm(self.request(), None, entity=e) |
47 form = EntityFieldsForm(self.request(), None, entity=e) |
48 unrelated = [rview for rview, reid in form.subject_relation_vocabulary('in_group')] |
48 unrelated = [rview for rview, reid in form.subject_relation_vocabulary('in_group')] |
49 # should be default groups but owners, i.e. managers, users, guests |
49 # should be default groups but owners, i.e. managers, users, guests |
62 states = list(form.subject_in_state_vocabulary('in_state')) |
62 states = list(form.subject_in_state_vocabulary('in_state')) |
63 self.assertEquals(len(states), 1) |
63 self.assertEquals(len(states), 1) |
64 self.assertEquals(states[0][0], u'deactivated') # list of (combobox view, state eid) |
64 self.assertEquals(states[0][0], u'deactivated') # list of (combobox view, state eid) |
65 |
65 |
66 |
66 |
67 |
67 |
68 # form view tests ######################################################### |
68 # form view tests ######################################################### |
69 |
69 |
70 def test_massmailing_formview(self): |
70 def test_massmailing_formview(self): |
71 self.execute('INSERT EmailAddress X: X address L + "@cubicweb.org", ' |
71 self.execute('INSERT EmailAddress X: X address L + "@cubicweb.org", ' |
72 'U use_email X WHERE U is CWUser, U login L') |
72 'U use_email X WHERE U is CWUser, U login L') |
73 rset = self.execute('CWUser X') |
73 rset = self.execute('CWUser X') |
74 self.view('massmailing', rset, template=None) |
74 self.view('massmailing', rset, template=None) |
75 |
75 |
76 |
76 |
77 # form tests ############################################################## |
77 # form tests ############################################################## |
78 |
78 |
79 def test_form_inheritance(self): |
79 def test_form_inheritance(self): |
80 class CustomChangeStateForm(ChangeStateForm): |
80 class CustomChangeStateForm(ChangeStateForm): |
81 hello = IntField(name='youlou') |
81 hello = IntField(name='youlou') |
82 creation_date = DateTimeField(widget=DateTimePicker) |
82 creation_date = DateTimeField(widget=DateTimePicker) |
83 form = CustomChangeStateForm(self.req, redirect_path='perdu.com', |
83 form = CustomChangeStateForm(self.req, redirect_path='perdu.com', |
86 |
86 |
87 def test_change_state_form(self): |
87 def test_change_state_form(self): |
88 form = ChangeStateForm(self.req, redirect_path='perdu.com', |
88 form = ChangeStateForm(self.req, redirect_path='perdu.com', |
89 entity=self.entity) |
89 entity=self.entity) |
90 form.form_render(state=123, trcomment=u'') |
90 form.form_render(state=123, trcomment=u'') |
91 |
91 |
92 # fields tests ############################################################ |
92 # fields tests ############################################################ |
93 |
93 |
94 def _render_entity_field(self, name, form): |
94 def _render_entity_field(self, name, form): |
95 form.form_build_context({}) |
95 form.form_build_context({}) |
96 return form.field_by_name(name).render(form, self.renderer) |
96 return form.field_by_name(name).render(form, self.renderer) |
97 |
97 |
98 def _test_richtextfield(self, expected): |
98 def _test_richtextfield(self, expected): |
99 class RTFForm(EntityFieldsForm): |
99 class RTFForm(EntityFieldsForm): |
100 content = RichTextField() |
100 description = RichTextField() |
101 card = self.add_entity('Card', title=u"tls sprint fev 2009", |
101 state = self.execute('State X WHERE X name "activated", X state_of ET, ET name "CWUser"').get_entity(0, 0) |
102 content=u'<h1>new widgets system</h1>', |
102 form = RTFForm(self.req, redirect_path='perdu.com', entity=state) |
103 content_format=u'text/html') |
103 # make it think it can use fck editor anyway |
104 form = RTFForm(self.req, redirect_path='perdu.com', entity=card) |
104 form.form_field_format = lambda x: 'text/html' |
105 self.assertTextEquals(self._render_entity_field('content', form), expected % {'eid': card.eid}) |
105 self.assertTextEquals(self._render_entity_field('description', form), |
|
106 expected % {'eid': state.eid}) |
106 |
107 |
107 |
108 |
108 def test_richtextfield_1(self): |
109 def test_richtextfield_1(self): |
109 self.req.use_fckeditor = lambda: False |
110 self.req.use_fckeditor = lambda: False |
110 self._test_richtextfield('''<select name="content_format:%(eid)s" id="content_format:%(eid)s" tabindex="0"> |
111 self._test_richtextfield('''<select name="description_format:%(eid)s" size="1" id="description_format:%(eid)s" tabindex="0"> |
111 <option value="text/cubicweb-page-template">text/cubicweb-page-template</option> |
112 <option value="text/cubicweb-page-template">text/cubicweb-page-template</option> |
112 <option selected="selected" value="text/html">text/html</option> |
113 <option value="text/html">text/html</option> |
113 <option value="text/plain">text/plain</option> |
114 <option value="text/plain">text/plain</option> |
114 <option value="text/rest">text/rest</option> |
115 <option selected="selected" value="text/rest">text/rest</option> |
115 </select><textarea tabindex="1" id="content:%(eid)s" name="content:%(eid)s" onkeypress="autogrow(this)"><h1>new widgets system</h1></textarea>''') |
116 </select><textarea rows="5" name="description:564" onkeypress="autogrow(this)" cols="60" id="description:564" tabindex="1"/>''') |
116 |
117 |
117 |
118 |
118 def test_richtextfield_2(self): |
119 def test_richtextfield_2(self): |
119 self.req.use_fckeditor = lambda: True |
120 self.req.use_fckeditor = lambda: True |
120 self._test_richtextfield('''<input type="hidden" name="content_format:%(eid)s" value="text/html"/><textarea tabindex="0" cubicweb:type="wysiwyg" id="content:%(eid)s" name="content:%(eid)s" onkeypress="autogrow(this)"><h1>new widgets system</h1></textarea>''') |
121 self._test_richtextfield('<input type="hidden" name="description_format:%(eid)s" value="text/rest"/><textarea rows="20" name="description:564" onkeypress="autogrow(this)" cols="80" cubicweb:type="wysiwyg" id="description:564" tabindex="0"/>') |
121 |
122 |
122 |
123 |
123 def test_filefield(self): |
124 def test_filefield(self): |
124 class FFForm(EntityFieldsForm): |
125 class FFForm(EntityFieldsForm): |
125 data = FileField(format_field=StringField(name='data_format'), |
126 data = FileField(format_field=StringField(name='data_format'), |
133 <div id="data:%(eid)s-advanced" class="hidden"> |
134 <div id="data:%(eid)s-advanced" class="hidden"> |
134 <label for="data_format:%(eid)s">data_format</label><input id="data_format:%(eid)s" type="text" name="data_format:%(eid)s" value="text/plain" tabindex="1"/><br/><br/> |
135 <label for="data_format:%(eid)s">data_format</label><input id="data_format:%(eid)s" type="text" name="data_format:%(eid)s" value="text/plain" tabindex="1"/><br/><br/> |
135 <label for="data_encoding:%(eid)s">data_encoding</label><input id="data_encoding:%(eid)s" type="text" name="data_encoding:%(eid)s" value="UTF-8" tabindex="2"/><br/><br/> |
136 <label for="data_encoding:%(eid)s">data_encoding</label><input id="data_encoding:%(eid)s" type="text" name="data_encoding:%(eid)s" value="UTF-8" tabindex="2"/><br/><br/> |
136 </div> |
137 </div> |
137 <br/> |
138 <br/> |
138 <input type="checkbox" name="data:594__detach"/> |
139 <input type="checkbox" name="data:%(eid)s__detach"/> |
139 detach attached file |
140 detach attached file |
140 ''' % {'eid': file.eid}) |
141 ''' % {'eid': file.eid}) |
141 |
142 |
142 |
143 |
143 def test_editablefilefield(self): |
144 def test_editablefilefield(self): |
144 class EFFForm(EntityFieldsForm): |
145 class EFFForm(EntityFieldsForm): |
145 data = EditableFileField(format_field=StringField(name='data_format'), |
146 data = EditableFileField(format_field=StringField(name='data_format'), |
146 encoding_field=StringField(name='data_encoding')) |
147 encoding_field=StringField(name='data_encoding')) |
147 def form_field_encoding(self, field): |
148 def form_field_encoding(self, field): |
157 <div id="data:%(eid)s-advanced" class="hidden"> |
158 <div id="data:%(eid)s-advanced" class="hidden"> |
158 <label for="data_format:%(eid)s">data_format</label><input id="data_format:%(eid)s" type="text" name="data_format:%(eid)s" value="text/plain" tabindex="1"/><br/><br/> |
159 <label for="data_format:%(eid)s">data_format</label><input id="data_format:%(eid)s" type="text" name="data_format:%(eid)s" value="text/plain" tabindex="1"/><br/><br/> |
159 <label for="data_encoding:%(eid)s">data_encoding</label><input id="data_encoding:%(eid)s" type="text" name="data_encoding:%(eid)s" value="UTF-8" tabindex="2"/><br/><br/> |
160 <label for="data_encoding:%(eid)s">data_encoding</label><input id="data_encoding:%(eid)s" type="text" name="data_encoding:%(eid)s" value="UTF-8" tabindex="2"/><br/><br/> |
160 </div> |
161 </div> |
161 <br/> |
162 <br/> |
162 <input type="checkbox" name="data:594__detach"/> |
163 <input type="checkbox" name="data:%(eid)s__detach"/> |
163 detach attached file |
164 detach attached file |
164 <p><b>You can either submit a new file using the browse button above, or choose to remove already uploaded file by checking the "detach attached file" check-box, or edit file content online with the widget below.</b></p> |
165 <p><b>You can either submit a new file using the browse button above, or choose to remove already uploaded file by checking the "detach attached file" check-box, or edit file content online with the widget below.</b></p> |
165 <textarea tabindex="3" name="data:%(eid)s" onkeypress="autogrow(this)">new widgets system</textarea>''' % {'eid': file.eid}) |
166 <textarea tabindex="3" rows="20" cols="80" name="data:%(eid)s" onkeypress="autogrow(this)">new widgets system</textarea>''' % {'eid': file.eid}) |
166 |
167 |
167 |
168 |
168 def test_passwordfield(self): |
169 def test_passwordfield(self): |
169 class PFForm(EntityFieldsForm): |
170 class PFForm(EntityFieldsForm): |
170 upassword = StringField(widget=PasswordInput) |
171 upassword = StringField(widget=PasswordInput) |