diff options
Diffstat (limited to 'src/leap/gui/tests/test_firstrun_providerselect.py')
-rw-r--r-- | src/leap/gui/tests/test_firstrun_providerselect.py | 162 |
1 files changed, 151 insertions, 11 deletions
diff --git a/src/leap/gui/tests/test_firstrun_providerselect.py b/src/leap/gui/tests/test_firstrun_providerselect.py index be7cc9c1..976c68cd 100644 --- a/src/leap/gui/tests/test_firstrun_providerselect.py +++ b/src/leap/gui/tests/test_firstrun_providerselect.py @@ -4,23 +4,29 @@ import unittest import mock from leap.testing import qunittest -from leap.testing import pyqt +#from leap.testing import pyqt from PyQt4 import QtGui #from PyQt4 import QtCore -import PyQt4.QtCore # some weirdness with mock module +#import PyQt4.QtCore # some weirdness with mock module from PyQt4.QtTest import QTest -#from PyQt4.QtCore import Qt +from PyQt4.QtCore import Qt from leap.gui import firstrun +try: + from collections import OrderedDict +except ImportError: + # We must be in 2.6 + from leap.util.dicts import OrderedDict + class TestPage(firstrun.providerselect.SelectProviderPage): pass -class SelectProviderPageTestCase(qunittest.TestCase): +class SelectProviderPageLogicTestCase(qunittest.TestCase): # XXX can spy on signal connections @@ -29,7 +35,18 @@ class SelectProviderPageTestCase(qunittest.TestCase): QtGui.qApp = self.app self.page = TestPage(None) self.page.wizard = mock.MagicMock() - self.page.wizard().netchecker.return_value = True + + mocknetchecker = mock.Mock() + self.page.wizard().netchecker.return_value = mocknetchecker + self.mocknetchecker = mocknetchecker + + mockpcertchecker = mock.Mock() + self.page.wizard().providercertchecker.return_value = mockpcertchecker + self.mockpcertchecker = mockpcertchecker + + mockeipconfchecker = mock.Mock() + self.page.wizard().eipconfigchecker.return_value = mockeipconfchecker + self.mockeipconfchecker = mockeipconfchecker def tearDown(self): QtGui.qApp = None @@ -38,6 +55,9 @@ class SelectProviderPageTestCase(qunittest.TestCase): def test__do_checks(self): eq = self.assertEqual + + self.page.providerNameEdit.setText('test_provider1') + checks = [x for x in self.page._do_checks()] eq(len(checks), 5) labels = [str(x) for (x, y), z in checks] @@ -47,15 +67,135 @@ class SelectProviderPageTestCase(qunittest.TestCase): progress = [y for (x, y), z in checks] eq(progress, [0, 20, 40, 80, 100]) - # XXX now: execute the functions - # with proper mocks (for checkers and so on) - # and try to cover all the exceptions + # normal run, ie, no exceptions + checkfuns = [z for (x, y), z in checks] - #import ipdb;ipdb.set_trace() + namecheck, httpscheck, fetchinfo = checkfuns[1:-1] + + self.assertTrue(namecheck()) + self.mocknetchecker.check_name_resolution.assert_called_with( + 'test_provider1') + + self.assertTrue(httpscheck()) + self.mockpcertchecker.is_https_working.assert_called_with( + "https://test_provider1", verify=True) + + self.assertTrue(fetchinfo()) + self.mockeipconfchecker.fetch_definition.assert_called_with( + domain="test_provider1") + + # XXX missing: inject failing exceptions + # XXX TODO make it break + - def test_next_button_is_disabled(self): - pass +class SelectProviderPageUITestCase(qunittest.TestCase): + # XXX can spy on signal connections + __name__ = "Select Provider Page UI tests" + + def setUp(self): + self.app = QtGui.QApplication(sys.argv) + QtGui.qApp = self.app + + self.pagename = "providerselection" + pages = OrderedDict(( + (self.pagename, TestPage), + ('providerinfo', + firstrun.providerinfo.ProviderInfoPage))) + self.wizard = firstrun.wizard.FirstRunWizard(None, pages_dict=pages) + self.page = self.wizard.page(self.wizard.get_page_index(self.pagename)) + + self.page.do_checks = mock.Mock() + + # wizard would do this for us + self.page.initializePage() + + def tearDown(self): + QtGui.qApp = None + self.app = None + self.wizard = None + + def fill_provider(self): + """ + fills provider line edit + """ + keyp = QTest.keyPress + pedit = self.page.providerNameEdit + pedit.setFocus(True) + for c in "testprovider": + keyp(pedit, c) + self.assertEqual(pedit.text(), "testprovider") + + def del_provider(self): + """ + deletes entried provider in + line edit + """ + keyp = QTest.keyPress + pedit = self.page.providerNameEdit + for c in range(len("testprovider")): + keyp(pedit, Qt.Key_Backspace) + self.assertEqual(pedit.text(), "") + + def test_buttons_disabled_until_textentry(self): + nextbutton = self.wizard.button(QtGui.QWizard.NextButton) + checkbutton = self.page.providerCheckButton + + self.assertFalse(nextbutton.isEnabled()) + self.assertFalse(checkbutton.isEnabled()) + + self.fill_provider() + # checkbutton should be enabled + self.assertTrue(checkbutton.isEnabled()) + self.assertFalse(nextbutton.isEnabled()) + + self.del_provider() + # after rm provider checkbutton disabled again + self.assertFalse(checkbutton.isEnabled()) + self.assertFalse(nextbutton.isEnabled()) + + def test_check_button_triggers_tests(self): + checkbutton = self.page.providerCheckButton + self.assertFalse(checkbutton.isEnabled()) + self.assertFalse(self.page.do_checks.called) + + self.fill_provider() + + self.assertTrue(checkbutton.isEnabled()) + mclick = QTest.mouseClick + # click! + mclick(checkbutton, Qt.LeftButton) + self.waitFor(seconds=0.1) + self.assertTrue(self.page.do_checks.called) + + # XXX + # can play with different side_effects for do_checks mock... + # so we can see what happens with errors and so on + + def test_page_completed_after_checks(self): + nextbutton = self.wizard.button(QtGui.QWizard.NextButton) + self.assertFalse(nextbutton.isEnabled()) + + self.assertFalse(self.page.isComplete()) + self.fill_provider() + # simulate checks done + self.page.done = True + self.page.on_checks_validation_ready() + self.assertTrue(self.page.isComplete()) + # cannot test for nexbutton enabled + # cause it's the the wizard loop + # that would do that I think + + def test_validate_page(self): + self.assertTrue(self.page.validatePage()) + + def test_next_id(self): + self.assertEqual(self.page.nextId(), 1) + + def test_paint_event(self): + self.page.populateErrors = mock.Mock() + self.page.paintEvent(None) + self.page.populateErrors.assert_called_with() if __name__ == "__main__": unittest.main() |