3 from cubicweb.devtools.testlib import WebTest |
3 from cubicweb.devtools.testlib import WebTest |
4 from cubicweb.web.form import * |
4 from cubicweb.web.form import * |
5 from cubicweb.web.views.baseforms import ChangeStateForm |
5 from cubicweb.web.views.baseforms import ChangeStateForm |
6 |
6 |
7 |
7 |
8 class CustomChangeStateForm(ChangeStateForm): |
|
9 hello = IntField(name='youlou') |
|
10 creation_date = DateTimeField(widget=DateTimePicker) |
|
11 |
|
12 |
|
13 class RTFForm(EntityFieldsForm): |
|
14 content = RichTextField() |
|
15 |
|
16 class FFForm(EntityFieldsForm): |
|
17 data = FileField(format_field=StringField(name='data_format'), |
|
18 encoding_field=StringField(name='data_encoding')) |
|
19 |
|
20 class PFForm(EntityFieldsForm): |
|
21 upassword = StringField(widget=PasswordInput) |
|
22 |
|
23 |
|
24 class EntityFieldsFormTC(WebTest): |
8 class EntityFieldsFormTC(WebTest): |
25 |
9 |
26 def setUp(self): |
10 def setUp(self): |
27 super(EntityFieldsFormTC, self).setUp() |
11 super(EntityFieldsFormTC, self).setUp() |
28 self.req = self.request() |
12 self.req = self.request() |
29 self.entity = self.user(self.req) |
13 self.entity = self.user(self.req) |
|
14 self.renderer = FormRenderer() |
30 |
15 |
|
16 # form tests ############################################################## |
|
17 |
31 def test_form_inheritance(self): |
18 def test_form_inheritance(self): |
|
19 class CustomChangeStateForm(ChangeStateForm): |
|
20 hello = IntField(name='youlou') |
|
21 creation_date = DateTimeField(widget=DateTimePicker) |
32 form = CustomChangeStateForm(self.req, redirect_path='perdu.com', |
22 form = CustomChangeStateForm(self.req, redirect_path='perdu.com', |
33 entity=self.entity) |
23 entity=self.entity) |
34 self.assertTextEquals(form.form_render(state=123), |
24 self.assertTextEquals(form.form_render(state=123, trcomment=u''), |
35 ''' ''') |
25 ''' ''') |
36 |
26 |
37 def test_change_state_form(self): |
27 def test_change_state_form(self): |
38 form = ChangeStateForm(self.req, redirect_path='perdu.com', |
28 form = ChangeStateForm(self.req, redirect_path='perdu.com', |
39 entity=self.entity) |
29 entity=self.entity) |
40 self.assertTextEquals(form.form_render(state=123, trcomment=u''), |
30 self.assertTextEquals(form.form_render(state=123, trcomment=u''), |
41 ''' ''') |
31 ''' ''') |
42 |
|
43 def test_richtextfield(self): |
|
44 card = self.add_entity('Card', title=u"tls sprint fev 2009", |
|
45 content=u'new widgets system') |
|
46 form = RTFForm(self.req, redirect_path='perdu.com', |
|
47 entity=card) |
|
48 self.assertTextEquals(form.form_render(), |
|
49 '''''') |
|
50 |
|
51 def test_filefield(self): |
|
52 file = self.add_entity('File', name=u"pouet.txt", |
|
53 data=Binary('new widgets system')) |
|
54 form = FFForm(self.req, redirect_path='perdu.com', |
|
55 entity=file) |
|
56 self.assertTextEquals(form.form_render(), |
|
57 '''''') |
|
58 |
|
59 def test_passwordfield(self): |
|
60 form = PFForm(self.req, redirect_path='perdu.com', |
|
61 entity=self.entity) |
|
62 self.assertTextEquals(form.form_render(), |
|
63 '''''') |
|
64 |
32 |
65 def test_delete_conf_form_multi(self): |
33 def test_delete_conf_form_multi(self): |
66 rset = self.execute('EGroup X') |
34 rset = self.execute('EGroup X') |
67 self.assertTextEquals(self.view('deleteconf', rset, template=None).source, |
35 self.assertTextEquals(self.view('deleteconf', rset, template=None).source, |
68 '') |
36 '') |
69 |
37 |
|
38 # fields tests ############################################################ |
|
39 |
|
40 def _render_entity_field(self, name, form): |
|
41 form.form_build_context({}) |
|
42 form.form_add_entity_hiddens(form.entity.e_schema) |
|
43 return form.field_by_name(name).render(form, self.renderer) |
|
44 |
|
45 def _test_richtextfield(self, expected): |
|
46 class RTFForm(EntityFieldsForm): |
|
47 content = RichTextField() |
|
48 card = self.add_entity('Card', title=u"tls sprint fev 2009", |
|
49 content=u'<h1>new widgets system</h1>', |
|
50 content_format=u'text/html') |
|
51 form = RTFForm(self.req, redirect_path='perdu.com', entity=card) |
|
52 self.assertTextEquals(self._render_entity_field('content', form), expected) |
|
53 |
|
54 def test_richtextfield_1(self): |
|
55 self.req.use_fckeditor = lambda: False |
|
56 self._test_richtextfield('''<select name="content_format" id="content_format" tabindex="0"> |
|
57 <option value="text/rest">text/rest</option> |
|
58 <option selected="selected" value="text/html">text/html</option> |
|
59 <option value="text/plain">text/plain</option> |
|
60 <option value="text/cubicweb-page-template">text/cubicweb-page-template</option> |
|
61 </select><textarea tabindex="1" id="content" name="content" onkeypress="autogrow(this)"/>''') |
|
62 |
|
63 def test_richtextfield_2(self): |
|
64 self.req.use_fckeditor = lambda: True |
|
65 self._test_richtextfield('''<input type="hidden" name="content_format" value="text/html"/><textarea tabindex="0" cubicweb:type="wysiwyg" id="content" name="content" onkeypress="autogrow(this)"/>''') |
|
66 |
|
67 |
|
68 def test_filefield(self): |
|
69 class FFForm(EntityFieldsForm): |
|
70 data = FileField(format_field=StringField(name='data_format'), |
|
71 encoding_field=StringField(name='data_encoding')) |
|
72 file = self.add_entity('File', name=u"pouet.txt", |
|
73 data=Binary('new widgets system')) |
|
74 form = FFForm(self.req, redirect_path='perdu.com', entity=file) |
|
75 self.assertTextEquals(self._render_entity_field('data', form), |
|
76 '''<input id="data" type="file" name="data" value="" tabindex="0"/> |
|
77 <a href="javascript: toggleVisibility('data-advanced')" title="show advanced fields"><img src="http://testing.fr/cubicweb/data/puce_down.png" alt="show advanced fields"/></a> |
|
78 <div id="data-advanced" class="hidden"> |
|
79 <label for="data_format">data_format</label><input id="data_format" type="text" name="data_format" value="" tabindex="1"/><br/><br/> |
|
80 <label for="data_encoding">data_encoding</label><input id="data_encoding" type="text" name="data_encoding" value="" tabindex="2"/><br/><br/> |
|
81 </div>''') |
|
82 |
|
83 |
|
84 def test_editablefilefield(self): |
|
85 class EFFForm(EntityFieldsForm): |
|
86 data = EditableFileField(format_field=StringField(name='data_format'), |
|
87 encoding_field=StringField(name='data_encoding')) |
|
88 def form_field_encoding(self, field): |
|
89 return 'ascii' |
|
90 def form_field_format(self, field): |
|
91 return 'text/plain' |
|
92 file = self.add_entity('File', name=u"pouet.txt", |
|
93 data=Binary('new widgets system')) |
|
94 form = EFFForm(self.req, redirect_path='perdu.com', entity=file) |
|
95 self.assertTextEquals(self._render_entity_field('data', form), |
|
96 '''<input id="data" type="file" name="data" value="" tabindex="0"/> |
|
97 <a href="javascript: toggleVisibility('data-advanced')" title="show advanced fields"><img src="http://testing.fr/cubicweb/data/puce_down.png" alt="show advanced fields"/></a> |
|
98 <div id="data-advanced" class="hidden"> |
|
99 <label for="data_format">data_format</label><input id="data_format" type="text" name="data_format" value="" tabindex="1"/><br/><br/> |
|
100 <label for="data_encoding">data_encoding</label><input id="data_encoding" type="text" name="data_encoding" value="" tabindex="2"/><br/><br/> |
|
101 </div> |
|
102 <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> |
|
103 <textarea tabindex="3" name="data" onkeypress="autogrow(this)">new widgets system</textarea>''') |
|
104 |
|
105 def test_passwordfield(self): |
|
106 class PFForm(EntityFieldsForm): |
|
107 upassword = StringField(widget=PasswordInput) |
|
108 form = PFForm(self.req, redirect_path='perdu.com', entity=self.entity) |
|
109 self.assertTextEquals(self._render_entity_field('upassword', form), |
|
110 '''<input id="upassword" type="password" name="upassword" value="" tabindex="0"/> |
|
111 <br/> |
|
112 <input type="password" id="upassword" name="upassword-confirm" tabindex="0"/> |
|
113 |
|
114 <span class="emphasis">confirm password</span>''') |
|
115 |
70 |
116 |
71 if __name__ == '__main__': |
117 if __name__ == '__main__': |
72 unittest_main() |
118 unittest_main() |