comparison test/test_templating.py @ 8288:e70dc7c43c9c

test: basic testing for BooleanHTMLProperty plain and field.
author John Rouillard <rouilj@ieee.org>
date Sat, 18 Jan 2025 16:54:35 -0500
parents 60e682add9ea
children 46886073c665
comparison
equal deleted inserted replaced
8287:60e682add9ea 8288:e70dc7c43c9c
732 732
733 @pytest.fixture(autouse=True) 733 @pytest.fixture(autouse=True)
734 def inject_fixtures(self, caplog): 734 def inject_fixtures(self, caplog):
735 self._caplog = caplog 735 self._caplog = caplog
736 736
737 class BooleanHTMLPropertyTestCase(HTMLPropertyTestClass):
738
739 def setUp(self):
740 super(BooleanHTMLPropertyTestCase, self).setUp()
741
742 db = self.client.db
743 db.issue.addprop(boolvalt=hyperdb.Boolean())
744 db.issue.addprop(boolvalf=hyperdb.Boolean())
745 db.issue.addprop(boolvalunset=hyperdb.Boolean())
746
747 self.client.db.issue.create(title="title",
748 boolvalt = True,
749 boolvalf = False)
750
751 def tearDown(self):
752 self.client.db.close()
753 memorydb.db_nuke('')
754
755 testdata = [
756 ("boolvalt", "Yes", True, False),
757 ("boolvalf", "No", False, True),
758 ("boolvalunset", "", False, True),
759 ]
760
761 def test_BoolHTMLRadioButtons(self):
762 #propname = "boolvalt"
763
764 #plainval = "Yes"
765
766 self.maxDiff = None
767 for test_inputs in self.testdata:
768 params = {
769 "check1": 'checked="checked" ' if test_inputs[2] else "",
770 "check2": 'checked="checked" ' if test_inputs[3] else "",
771 "propname": test_inputs[0],
772 "plainval": test_inputs[1],
773
774 }
775
776
777 test_hyperdbBoolean = self.client.db.issue.getprops("1")[
778 params['propname']]
779 test_boolean = self.client.db.issue.get("1", params['propname'])
780
781 # client, classname, nodeid, prop, name, value,
782 # anonymous=0, offset=None
783 d = BooleanHTMLProperty(self.client, 'issue', '1',
784 test_hyperdbBoolean,
785 params['propname'], test_boolean)
786
787 self.assertIsInstance(d._value, (type(None), bool))
788
789 self.assertEqual(d.plain(), params['plainval'])
790
791 input_expected = (
792 '<input %(check1)sid="issue1@%(propname)s_yes" '
793 'name="issue1@%(propname)s" type="radio" value="yes">'
794 '<label class="rblabel" for="issue1@%(propname)s_yes">'
795 'Yes</label>'
796 '<input %(check2)sid="issue1@%(propname)s_no" name="issue1@%(propname)s" '
797 'type="radio" value="no"><label class="rblabel" '
798 'for="issue1@%(propname)s_no">No</label>') % params
799
800 self.assertEqual(d.field(), input_expected)
801
802 y_label = ( '<label class="rblabel" for="issue1@%(propname)s_yes">'
803 'True</label>') % params
804 n_label = ('<label class="rblabel" '
805 'for="issue1@%(propname)s_no">False</label>') % params
806
807 input_expected = (
808 '<input %(check1)sid="issue1@%(propname)s_yes" '
809 'name="issue1@%(propname)s" type="radio" value="yes">'
810 + y_label +
811 '<input %(check2)sid="issue1@%(propname)s_no" name="issue1@%(propname)s" '
812 'type="radio" value="no">' + n_label ) % params
813
814 self.assertEqual(d.field(y_label=y_label, n_label=n_label), input_expected)
815
816
817 input_expected = (
818 '<label class="rblabel" for="issue1@%(propname)s_yes">'
819 'Yes</label>'
820 '<input %(check1)sid="issue1@%(propname)s_yes" '
821 'name="issue1@%(propname)s" type="radio" value="yes">'
822 '<label class="rblabel" '
823 'for="issue1@%(propname)s_no">No</label>'
824 '<input %(check2)sid="issue1@%(propname)s_no" '
825 'name="issue1@%(propname)s" '
826 'type="radio" value="no">') % params
827
828 print(d.field(labelfirst=True))
829 self.assertEqual(d.field(labelfirst=True), input_expected)
830
831 # one test on the last d is enough.
832 # check permissions return
833 is_view_ok_orig = d.is_view_ok
834 is_edit_ok_orig = d.is_edit_ok
835 no_access = lambda : False
836
837 d.is_view_ok = no_access
838 self.assertEqual(d.plain(), "[hidden]")
839
840 d.is_edit_ok = no_access
841 self.assertEqual(d.field(), "[hidden]")
842
843 d.is_view_ok = is_view_ok_orig
844 self.assertEqual(d.field(), params['plainval'])
845 d.is_edit_ok = is_edit_ok_orig
846
737 class DateHTMLPropertyTestCase(HTMLPropertyTestClass): 847 class DateHTMLPropertyTestCase(HTMLPropertyTestClass):
738 848
739 def setUp(self): 849 def setUp(self):
740 super(DateHTMLPropertyTestCase, self).setUp() 850 super(DateHTMLPropertyTestCase, self).setUp()
741 851

Roundup Issue Tracker: http://roundup-tracker.org/