python 3.5 support
[tiramisu.git] / test / test_mandatory.py
1 # coding: utf-8
2 from .autopath import do_autopath
3 do_autopath()
4
5 from py.test import raises
6 from tiramisu.config import Config
7 from tiramisu.option import IntOption, StrOption, UnicodeOption, OptionDescription, SymLinkOption
8 from tiramisu.error import PropertiesOptionError, ConfigError
9 from tiramisu.setting import groups
10 from tiramisu.storage import delete_session
11
12
13 def make_description():
14     stroption = StrOption('str', 'Test string option', default="abc",
15                           properties=('mandatory', ))
16     stroption1 = StrOption('str1', 'Test string option',
17                            properties=('mandatory', ))
18     stroption2 = UnicodeOption('unicode2', 'Test string option',
19                                properties=('mandatory', ))
20     stroption3 = StrOption('str3', 'Test string option', multi=True,
21                            properties=('mandatory', ))
22     stroption4 = StrOption('str4', 'Test string option', multi=True,
23                            properties=('mandatory', ), allow_empty_list=True)
24     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3, stroption4])
25     return descr
26
27
28 def return_value(value):
29     return value
30
31
32 def make_description2():
33     stroption = StrOption('str', 'Test string option', default="abc",
34                           properties=('mandatory', ))
35     stroption1 = StrOption('str1', 'Test string option',
36                            properties=('mandatory', ))
37     stroption2 = SymLinkOption('unicode2', stroption1)
38     stroption3 = StrOption('str3', 'Test string option', multi=True,
39                            properties=('mandatory', ))
40     unicode1 = UnicodeOption('unicode1', 'Test string option', callback=return_value, callback_params={'': ((stroption, False),)},  properties=('mandatory', ))
41     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3, unicode1])
42     return descr
43
44
45 def make_description_sym():
46     stroption = StrOption('str', 'Test string option', default="abc",
47                           properties=('mandatory', ))
48     stroption1 = StrOption('str1', 'Test string option',
49                            properties=('mandatory', ))
50     stroption2 = SymLinkOption('unicode2', stroption1)
51     stroption3 = StrOption('str3', 'Test string option', multi=True,
52                            properties=('mandatory', ))
53     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3])
54     return descr
55
56
57 def make_description3():
58     stroption = StrOption('str', 'Test string option', default="abc",
59                           properties=('mandatory', ))
60     stroption1 = StrOption('str1', 'Test string option',
61                            properties=('mandatory', ))
62     stroption2 = SymLinkOption('unicode2', stroption1)
63     stroption3 = StrOption('str3', 'Test string option', multi=True,
64                            properties=('mandatory', ))
65     unicode1 = UnicodeOption('unicode1', 'Test string option', callback=return_value, callback_params={'': ((stroption, False),)},  properties=('mandatory', ))
66     int1 = IntOption('int1', '', callback=return_value, callback_params={'': ((stroption, False),)},  properties=('mandatory', ))
67     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3, unicode1, int1])
68     return descr
69
70
71 def make_description4():
72     stroption = StrOption('str', 'Test string option', default="abc",
73                           properties=('mandatory', ))
74     stroption1 = StrOption('str1', 'Test string option',
75                            properties=('mandatory', ))
76     stroption2 = UnicodeOption('unicode2', 'Test string option',
77                                properties=('mandatory', ))
78     stroption3 = StrOption('str3', 'Test string option', multi=True, requires=[{'option': stroption, 'expected': 'yes', 'action': 'mandatory', 'transitive': False}])
79     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3])
80     return descr
81
82
83 def test_mandatory_ro():
84     descr = make_description()
85     config = Config(descr, session_id='man001')
86     config.read_only()
87     prop = []
88     try:
89         config.str1
90     except PropertiesOptionError as err:
91         prop = err.proptype
92     assert 'mandatory' in prop
93     config.read_write()
94     config.str1 = 'yes'
95     config.read_only()
96     assert config.str1 == 'yes'
97     try:
98         delete_session('config', config.impl_getsessionid())
99     except ValueError:
100         pass
101     del(config)
102
103
104 def test_mandatory_rw():
105     descr = make_description()
106     config = Config(descr, session_id='man002')
107     config.read_write()
108     #not mandatory in rw
109     config.str1
110     config.str1 = 'yes'
111     assert config.str1 == 'yes'
112     try:
113         delete_session('config', config.impl_getsessionid())
114     except ValueError:
115         pass
116     del(config)
117
118
119 def test_mandatory_default():
120     descr = make_description()
121     config = Config(descr, session_id='man003')
122     config.read_only()
123     #not mandatory in rw
124     config.str
125     config.read_write()
126     config.str = 'yes'
127     config.read_only()
128     config.str
129     config.read_write()
130     config.str = None
131     config.read_only()
132     prop = []
133     try:
134         config.str
135     except PropertiesOptionError as err:
136         prop = err.proptype
137     assert 'mandatory' in prop
138     try:
139         delete_session('config', config.impl_getsessionid())
140     except ValueError:
141         pass
142     del(config)
143
144
145 def test_mandatory_delete():
146     descr = make_description()
147     config = Config(descr, session_id='man004')
148     config.read_only()
149     config.str
150     try:
151         config.str1
152     except PropertiesOptionError as err:
153         prop = err.proptype
154     assert 'mandatory' in prop
155     config.read_write()
156     config.str1 = 'yes'
157     config.read_only()
158     assert config.str1 == 'yes'
159     config.cfgimpl_get_settings().remove('frozen')
160     prop = []
161     try:
162         del(config.str1)
163     except PropertiesOptionError as err:
164         prop = err.proptype
165     assert 'mandatory' in prop
166     del(config.str)
167     assert config.str1 == 'yes'
168     try:
169         delete_session('config', config.impl_getsessionid())
170     except ValueError:
171         pass
172     del(config)
173
174
175 #valeur vide : None, '', u'', ...
176 def test_mandatory_none():
177     descr = make_description()
178     config = Config(descr, session_id='man005')
179     config.str1 = None
180     assert config.getowner(config.unwrap_from_path('str1')) == 'user'
181     config.read_only()
182     prop = []
183     try:
184         config.str1
185     except PropertiesOptionError as err:
186         prop = err.proptype
187     assert 'mandatory' in prop
188     try:
189         delete_session('config', config.impl_getsessionid())
190     except ValueError:
191         pass
192     del(config)
193
194
195 def test_mandatory_empty():
196     descr = make_description()
197     config = Config(descr, session_id='man006')
198     config.str1 = ''
199     assert config.getowner(config.unwrap_from_path('str1')) == 'user'
200     config.read_only()
201     prop = []
202     try:
203         config.str1
204     except PropertiesOptionError as err:
205         prop = err.proptype
206     assert 'mandatory' in prop
207     try:
208         delete_session('config', config.impl_getsessionid())
209     except ValueError:
210         pass
211     del(config)
212
213
214 def test_mandatory_multi_none():
215     descr = make_description()
216     config = Config(descr, session_id='man007')
217     config.str3 = [None]
218     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
219     config.read_only()
220     prop = []
221     try:
222         config.str3
223     except PropertiesOptionError as err:
224         prop = err.proptype
225     assert 'mandatory' in prop
226     config.read_write()
227     config.str3 = ['yes', None]
228     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
229     config.read_only()
230     prop = []
231     try:
232         config.str3
233     except PropertiesOptionError as err:
234         prop = err.proptype
235     assert 'mandatory' in prop
236     try:
237         delete_session('config', config.impl_getsessionid())
238     except ValueError:
239         pass
240     del(config)
241
242
243 def test_mandatory_multi_empty():
244     descr = make_description()
245     config = Config(descr, session_id='man008')
246     config.str3 = []
247     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
248     config.read_only()
249     prop = []
250     try:
251         config.str3
252     except PropertiesOptionError as err:
253         prop = err.proptype
254     assert 'mandatory' in prop
255     #
256     config.read_write()
257     config.str3 = ['']
258     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
259     config.read_only()
260     prop = []
261     try:
262         config.str3
263     except PropertiesOptionError as err:
264         prop = err.proptype
265     assert 'mandatory' in prop
266     #
267     config.read_write()
268     config.str3 = ['yes', '']
269     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
270     config.read_only()
271     prop = []
272     try:
273         config.str3
274     except PropertiesOptionError as err:
275         prop = err.proptype
276     assert 'mandatory' in prop
277     try:
278         delete_session('config', config.impl_getsessionid())
279     except ValueError:
280         pass
281     del(config)
282
283
284 def test_mandatory_multi_empty_allow_empty_list():
285     descr = make_description()
286     config = Config(descr, session_id='man009')
287     config.str4 = []
288     assert config.getowner(config.unwrap_from_path('str4')) == 'user'
289     config.read_only()
290     prop = []
291     config.str4
292     #
293     config.read_write()
294     config.str4 = ['']
295     assert config.getowner(config.unwrap_from_path('str4')) == 'user'
296     config.read_only()
297     prop = []
298     try:
299         config.str4
300     except PropertiesOptionError as err:
301         prop = err.proptype
302     assert 'mandatory' in prop
303     #
304     config.read_write()
305     config.str4 = ['yes', '']
306     assert config.getowner(config.unwrap_from_path('str4')) == 'user'
307     config.read_only()
308     prop = []
309     try:
310         config.str4
311     except PropertiesOptionError as err:
312         prop = err.proptype
313     assert 'mandatory' in prop
314     try:
315         delete_session('config', config.impl_getsessionid())
316     except ValueError:
317         pass
318     del(config)
319
320
321 def test_mandatory_multi_append():
322     descr = make_description()
323     config = Config(descr, session_id='man010')
324     config.str3 = ['yes']
325     config.read_write()
326     config.str3.append(None)
327     try:
328         delete_session('config', config.impl_getsessionid())
329     except ValueError:
330         pass
331     del(config)
332
333
334 def test_mandatory_disabled():
335     descr = make_description()
336     config = Config(descr, session_id='man011')
337     setting = config.cfgimpl_get_settings()
338     config.str1
339     config.read_only()
340     prop = []
341     try:
342         config.str1
343     except PropertiesOptionError as err:
344         prop = err.proptype
345     assert prop == ['mandatory']
346     setting[descr.str1].append('disabled')
347     prop = []
348     try:
349         config.str1
350     except PropertiesOptionError as err:
351         prop = err.proptype
352     assert set(prop) == set(['disabled', 'mandatory'])
353     try:
354         delete_session('config', config.impl_getsessionid())
355     except ValueError:
356         pass
357     del(config)
358
359
360 def test_mandatory_unicode():
361     descr = make_description()
362     config = Config(descr, session_id='man012')
363     config.unicode2
364     config.read_only()
365     prop = []
366     try:
367         config.unicode2
368     except PropertiesOptionError as err:
369         prop = err.proptype
370     assert prop == ['mandatory']
371     config.read_write()
372     config.unicode2 = u''
373     config.read_only()
374     prop = []
375     try:
376         config.unicode2
377     except PropertiesOptionError as err:
378         prop = err.proptype
379     assert prop == ['mandatory']
380     try:
381         delete_session('config', config.impl_getsessionid())
382     except ValueError:
383         pass
384     del(config)
385
386
387 def test_mandatory_warnings_ro():
388     descr = make_description()
389     config = Config(descr, session_id='man013')
390     config.str = ''
391     config.read_only()
392     proc = []
393     try:
394         config.str
395     except PropertiesOptionError as err:
396         proc = err.proptype
397     assert proc == ['mandatory']
398     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
399     config.read_write()
400     config.str = 'a'
401     config.read_only()
402     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str1', 'unicode2', 'str3']
403     try:
404         delete_session('config', config.impl_getsessionid())
405     except ValueError:
406         pass
407     del(config)
408
409
410 def test_mandatory_warnings_rw():
411     descr = make_description()
412     config = Config(descr, session_id='man100')
413     config.str = ''
414     config.read_write()
415     config.str
416     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
417     config.str = 'a'
418     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str1', 'unicode2', 'str3']
419     try:
420         delete_session('config', 'man100')
421     except ValueError:
422         pass
423     del(config)
424
425
426 def test_mandatory_warnings_disabled():
427     descr = make_description()
428     config = Config(descr, session_id='man101')
429     config.str = ''
430     setting = config.cfgimpl_get_settings()
431     config.read_write()
432     config.str
433     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
434     setting[descr.str].append('disabled')
435     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str1', 'unicode2', 'str3']
436     try:
437         delete_session('config', 'man101')
438     except ValueError:
439         pass
440     del(config)
441
442
443 def test_mandatory_warnings_hidden():
444     descr = make_description()
445     config = Config(descr, session_id='man102')
446     config.str = ''
447     setting = config.cfgimpl_get_settings()
448     config.read_write()
449     config.cfgimpl_get_settings().setpermissive(('hidden',))
450     config.str
451     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
452     setting[descr.str].append('hidden')
453     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
454     try:
455         delete_session('config', 'man102')
456     except ValueError:
457         pass
458     del(config)
459
460
461 def test_mandatory_warnings_frozen():
462     descr = make_description()
463     config = Config(descr, session_id='man103')
464     config.str = ''
465     setting = config.cfgimpl_get_settings()
466     config.read_write()
467     config.str
468     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
469     setting[descr.str].append('frozen')
470     config.read_only()
471     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
472     try:
473         delete_session('config', 'man103')
474     except ValueError:
475         pass
476     del(config)
477
478
479 def test_mandatory_master():
480     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True,
481                               properties=('mandatory', ))
482     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
483                                    multi=True)
484     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
485     interface1.impl_set_group_type(groups.master)
486     o = OptionDescription('o', '', [interface1])
487     config = Config(o, session_id='man104')
488     config.read_only()
489     raises(PropertiesOptionError, 'config.ip_admin_eth0.ip_admin_eth0')
490     raises(PropertiesOptionError, 'config.ip_admin_eth0.netmask_admin_eth0')
491     try:
492         delete_session('config', 'man104')
493     except ValueError:
494         pass
495     del(config)
496
497
498 def test_mandatory_warnings_master():
499     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True,
500                               properties=('mandatory', ))
501     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
502                                    multi=True)
503     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
504     interface1.impl_set_group_type(groups.master)
505     o = OptionDescription('o', '', [interface1])
506     config = Config(o, session_id='man105')
507     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['ip_admin_eth0.ip_admin_eth0']
508     try:
509         delete_session('config', 'man105')
510     except ValueError:
511         pass
512     del(config)
513
514
515 def test_mandatory_master_empty():
516     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
517     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
518                                    multi=True)
519     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
520     interface1.impl_set_group_type(groups.master)
521     o = OptionDescription('o', '', [interface1])
522     config = Config(o, session_id='man106')
523     config.read_write()
524     assert config.ip_admin_eth0.ip_admin_eth0 == []
525     assert config.ip_admin_eth0.netmask_admin_eth0 == []
526     #
527     config.ip_admin_eth0.ip_admin_eth0.append()
528     assert config.ip_admin_eth0.ip_admin_eth0 == [None]
529     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
530     config.read_only()
531     raises(PropertiesOptionError, "config.ip_admin_eth0.ip_admin_eth0")
532     raises(PropertiesOptionError, "config.ip_admin_eth0.netmask_admin_eth0")
533     config.read_write()
534     del(config.ip_admin_eth0.ip_admin_eth0)
535     del(config.ip_admin_eth0.netmask_admin_eth0)
536     assert config.ip_admin_eth0.ip_admin_eth0 == []
537     assert config.ip_admin_eth0.netmask_admin_eth0 == []
538     #
539     config.ip_admin_eth0.ip_admin_eth0.append('')
540     assert config.ip_admin_eth0.ip_admin_eth0 == ['']
541     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
542     config.read_only()
543     raises(PropertiesOptionError, "config.ip_admin_eth0.ip_admin_eth0")
544     raises(PropertiesOptionError, "config.ip_admin_eth0.netmask_admin_eth0")
545     config.read_write()
546     #
547     config.read_write()
548     config.ip_admin_eth0.ip_admin_eth0 = ['ip']
549     config.read_only()
550     assert config.ip_admin_eth0.ip_admin_eth0 == ['ip']
551     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
552     #
553     config.read_write()
554     config.ip_admin_eth0.netmask_admin_eth0 = ['ip2']
555     config.read_only()
556     raises(PropertiesOptionError, "del(config.ip_admin_eth0.netmask_admin_eth0)")
557     raises(PropertiesOptionError, "del(config.ip_admin_eth0.ip_admin_eth0)")
558     config.read_write()
559     del(config.ip_admin_eth0.netmask_admin_eth0)
560     del(config.ip_admin_eth0.ip_admin_eth0)
561     try:
562         delete_session('config', 'man106')
563     except ValueError:
564         pass
565     del(config)
566
567
568 def test_mandatory_warnings_master_empty():
569     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
570     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
571                                    multi=True)
572     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
573     interface1.impl_set_group_type(groups.master)
574     o = OptionDescription('o', '', [interface1])
575     config = Config(o, session_id='man107')
576     config.read_write()
577     config.ip_admin_eth0.ip_admin_eth0.append()
578     assert config.ip_admin_eth0.ip_admin_eth0 == [None]
579     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
580     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['ip_admin_eth0.ip_admin_eth0']
581     del(config.ip_admin_eth0.ip_admin_eth0)
582     del(config.ip_admin_eth0.netmask_admin_eth0)
583     #
584     config.ip_admin_eth0.ip_admin_eth0.append('')
585     assert config.ip_admin_eth0.ip_admin_eth0 == ['']
586     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
587     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['ip_admin_eth0.ip_admin_eth0']
588     #
589     config.read_write()
590     config.ip_admin_eth0.ip_admin_eth0 = ['ip']
591     assert list(config.cfgimpl_get_values().mandatory_warnings()) == []
592     try:
593         delete_session('config', 'man107')
594     except ValueError:
595         pass
596     del(config)
597
598
599 def test_mandatory_slave():
600     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
601     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
602                                    multi=True, properties=('mandatory', ))
603     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
604     interface1.impl_set_group_type(groups.master)
605     o = OptionDescription('o', '', [interface1])
606     config = Config(o, session_id='man108')
607     config.read_only()
608     assert config.ip_admin_eth0.ip_admin_eth0 == []
609     assert config.ip_admin_eth0.netmask_admin_eth0 == []
610     #
611     config.read_write()
612     config.ip_admin_eth0.ip_admin_eth0.append('ip')
613     config.read_only()
614     assert config.ip_admin_eth0.ip_admin_eth0 == ['ip']
615     assert len(config.ip_admin_eth0.netmask_admin_eth0) == 1
616     raises(PropertiesOptionError, 'config.ip_admin_eth0.netmask_admin_eth0[0]')
617     #
618     config.read_write()
619     config.ip_admin_eth0.netmask_admin_eth0 = ['']
620     config.read_only()
621     assert config.ip_admin_eth0.ip_admin_eth0 == ['ip']
622     assert len(config.ip_admin_eth0.netmask_admin_eth0) == 1
623     raises(PropertiesOptionError, 'config.ip_admin_eth0.netmask_admin_eth0[0]')
624     #
625     config.read_write()
626     config.ip_admin_eth0.netmask_admin_eth0 = ['ip']
627     config.read_only()
628     assert config.ip_admin_eth0.ip_admin_eth0 == ['ip']
629     assert config.ip_admin_eth0.netmask_admin_eth0 == ['ip']
630     try:
631         delete_session('config', 'man108')
632     except ValueError:
633         pass
634     del(config)
635
636
637 def test_mandatory_warnings_slave():
638     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
639     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
640                                    multi=True, properties=('mandatory', ))
641     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
642     interface1.impl_set_group_type(groups.master)
643     o = OptionDescription('o', '', [interface1])
644     config = Config(o, session_id='man109')
645     config.read_only()
646     assert config.ip_admin_eth0.ip_admin_eth0 == []
647     assert config.ip_admin_eth0.netmask_admin_eth0 == []
648     #
649     config.read_write()
650     assert list(config.cfgimpl_get_values().mandatory_warnings()) == []
651     config.ip_admin_eth0.ip_admin_eth0.append('ip')
652     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['ip_admin_eth0.netmask_admin_eth0']
653     try:
654         delete_session('config', 'man109')
655     except ValueError:
656         pass
657     del(config)
658
659
660 def test_mandatory_warnings_symlink():
661     descr = make_description_sym()
662     config = Config(descr, session_id='man110')
663     config.str = ''
664     setting = config.cfgimpl_get_settings()
665     config.read_write()
666     config.str
667     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'str3']
668     setting[descr.str].append('frozen')
669     config.read_only()
670     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'str3']
671     try:
672         delete_session('config', 'man110')
673     except ValueError:
674         pass
675     del(config)
676
677
678 def test_mandatory_warnings_validate():
679     descr = make_description3()
680     config = Config(descr, session_id='man111')
681     config.str = ''
682     raises(ValueError, "list(config.cfgimpl_get_values().mandatory_warnings())")
683     config.str = 'test'
684     raises(ValueError, "list(config.cfgimpl_get_values().mandatory_warnings())")
685     try:
686         delete_session('config', 'man111')
687     except ValueError:
688         pass
689     del(config)
690
691
692 def test_mandatory_warnings_validate_empty():
693     descr = make_description2()
694     config = Config(descr, session_id='man112')
695     config.str = ''
696     config.read_only()
697     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'str3', 'unicode1']
698     try:
699         delete_session('config', 'man112')
700     except ValueError:
701         pass
702     del(config)
703
704
705 def test_mandatory_warnings_requires():
706     descr = make_description4()
707     config = Config(descr, session_id='man113')
708     config.str = ''
709     config.read_write()
710     config.str
711     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2']
712     config.read_only()
713     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2']
714     config.read_write()
715     config.str = 'yes'
716     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str1', 'unicode2', 'str3']
717     try:
718         delete_session('config', 'man113')
719     except ValueError:
720         pass
721     del(config)
722
723
724 def test_mandatory_od_disabled():
725     descr = make_description()
726     od = OptionDescription('od', '', [descr])
727     config = Config(od, session_id='man114')
728     config.read_only()
729     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['tiram.str1', 'tiram.unicode2', 'tiram.str3']
730     config.cfgimpl_get_settings()[descr].append('disabled')
731     assert list(config.cfgimpl_get_values().mandatory_warnings()) == []
732     try:
733         delete_session('config', 'man114')
734     except ValueError:
735         pass
736     del(config)