diff --git a/src/cutecoin/gui/mainwindow.py b/src/cutecoin/gui/mainwindow.py index 1aabed473a067dcf0ee667e225e1cebc28a06790..caa26f3b4159117c6f17de76f5db69a082ee1b65 100644 --- a/src/cutecoin/gui/mainwindow.py +++ b/src/cutecoin/gui/mainwindow.py @@ -103,6 +103,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.open_ucoin_info = lambda: QDesktopServices.openUrl(QUrl("http://ucoin.io/theoretical/")) self.homescreen.button_info.clicked.connect(self.open_ucoin_info) + self.export_dialog = None + # TODO: There are too much refresh() calls on startup self.refresh() @@ -350,16 +352,23 @@ class MainWindow(QMainWindow, Ui_MainWindow): dialog.exec_() def export_account(self): - selected_file = QFileDialog.getSaveFileName(self, - self.tr("Export an account"), - "", - self.tr("All account files (*.acc)")) - path = "" - if selected_file[0][-4:] == ".acc": - path = selected_file[0] - else: - path = selected_file[0] + ".acc" - self.app.export_account(path, self.app.current_account) + # Testable way off using a QFileDialog + self.export_dialog = QFileDialog(self) + self.export_dialog.setObjectName('ExportFileDialog') + self.export_dialog.setWindowTitle(self.tr("Export an account")) + self.export_dialog.setNameFilter(self.tr("All account files (*.acc)")) + self.export_dialog.setLabelText(QFileDialog.Accept, self.tr('Export')) + self.export_dialog.accepted.connect(self.export_account_accepted) + self.export_dialog.show() + + def export_account_accepted(self): + selected_file = self.export_dialog.selectedFiles() + if selected_file: + if selected_file[0][-4:] == ".acc": + path = selected_file[0] + else: + path = selected_file[0] + ".acc" + self.app.export_account(path, self.app.current_account) def closeEvent(self, event): if self.app.current_account: diff --git a/src/cutecoin/tests/__init__.py b/src/cutecoin/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/src/cutecoin/tests/__init__.py @@ -0,0 +1 @@ + diff --git a/src/cutecoin/tests/all.py b/src/cutecoin/tests/all.py new file mode 100644 index 0000000000000000000000000000000000000000..5531ab01fc7b28f8f51a90e8523a692d79df21f3 --- /dev/null +++ b/src/cutecoin/tests/all.py @@ -0,0 +1,4 @@ +import unittest + +# run all tests +unittest.TextTestRunner().run(unittest.defaultTestLoader.discover(start_dir='cutecoin.tests', pattern='test_*')) diff --git a/src/cutecoin/tests/main_window/__init__.py b/src/cutecoin/tests/main_window/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/src/cutecoin/tests/main_window/__init__.py @@ -0,0 +1 @@ + diff --git a/src/cutecoin/tests/main_window/test_main_window_dialogs.py b/src/cutecoin/tests/main_window/test_main_window_dialogs.py new file mode 100644 index 0000000000000000000000000000000000000000..748ef886a1048eba81adb36f733c94746daf6059 --- /dev/null +++ b/src/cutecoin/tests/main_window/test_main_window_dialogs.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- + +import sys +import unittest +import gc +import PyQt5 +from PyQt5.QtWidgets import QApplication, QMenu +from PyQt5.QtCore import QLocale, QTimer +from cutecoin.gui.mainwindow import MainWindow +from cutecoin.core.app import Application + +# Qapplication cause a core dumped when re-run in setup +# set it as global var +qapplication = QApplication(sys.argv) + + +class MainWindowDialogsTest(unittest.TestCase): + def setUp(self): + QLocale.setDefault(QLocale("en_GB")) + self.application = Application(sys.argv) + self.main_window = MainWindow(self.application) + + def test_action_about(self): + # select menu + self.main_window.actionAbout.trigger() + widgets = qapplication.topLevelWidgets() + for widget in widgets: + if isinstance(widget, PyQt5.QtWidgets.QDialog): + self.assertEqual(widget.objectName(), 'AboutPopup') + self.assertEqual(widget.isVisible(), True) + widget.close() + break + + def test_action_add_account(self): + # asynchronous test, cause dialog is waiting user response + QTimer.singleShot(0, self._async_test_action_add_account) + # select menu + self.main_window.action_add_account.trigger() + + def _async_test_action_add_account(self): + widgets = qapplication.topLevelWidgets() + for widget in widgets: + if isinstance(widget, PyQt5.QtWidgets.QDialog): + self.assertEqual(widget.objectName(), 'AccountConfigurationDialog') + self.assertEqual(widget.isVisible(), True) + widget.close() + break + # + # # fixme: require a app.current_account fixture + # # def test_action_configure_account(self): + # # # asynchronous test, cause dialog is waiting user response + # # QTimer.singleShot(0, self._async_test_action_configure_account) + # # # select about menu + # # self.main_window.action_configure_parameters.trigger() + # # + # # def _async_test_action_configure_account(self): + # # widgets = qapplication.topLevelWidgets() + # # for widget in widgets: + # # if isinstance(widget, PyQt5.QtWidgets.QDialog): + # # self.assertEqual(widget.objectName(), 'AccountConfigurationDialog') + # # self.assertEqual(widget.isVisible(), True) + # # widget.close() + # # break + # + + def test_action_export_account(self): + # select menu + self.main_window.action_export.trigger() + + widgets = qapplication.topLevelWidgets() + for widget in widgets: + if isinstance(widget, PyQt5.QtWidgets.QFileDialog): + self.assertEqual(widget.objectName(), 'ExportFileDialog') + self.assertTrue(widget.isVisible()) + widget.close() + break + +if __name__ == '__main__': + unittest.main() diff --git a/src/cutecoin/tests/MainWindowTest.py b/src/cutecoin/tests/main_window/test_main_window_menus.py similarity index 79% rename from src/cutecoin/tests/MainWindowTest.py rename to src/cutecoin/tests/main_window/test_main_window_menus.py index deca0f8876dee2725af54c298839b66a475b38c5..0a221eac3ab3431d6eb80abe89dda5aaddd6187e 100644 --- a/src/cutecoin/tests/MainWindowTest.py +++ b/src/cutecoin/tests/main_window/test_main_window_menus.py @@ -14,7 +14,7 @@ from cutecoin.core.app import Application qapplication = QApplication(sys.argv) -class MainWindowTest(unittest.TestCase): +class MainWindowMenusTest(unittest.TestCase): def setUp(self): QLocale.setDefault(QLocale("en_GB")) self.application = Application(sys.argv) @@ -64,19 +64,6 @@ class MainWindowTest(unittest.TestCase): self.assertEqual(actions[0].objectName(), 'actionTransfer_money') self.assertEqual(actions[1].objectName(), 'actionCertification') - def test_action_about(self): - # select about menu - self.main_window.actionAbout.trigger() - widgets = qapplication.topLevelWidgets() - dialog = None - for widget in widgets: - if isinstance(widget, PyQt5.QtWidgets.QDialog): - dialog = widget - break - self.assertEqual(dialog.objectName(), 'AboutPopup') - self.assertEqual(dialog.isVisible(), True) if __name__ == '__main__': - main_window_suite = unittest.TestLoader().loadTestsFromTestCase(MainWindowTest) - runner = unittest.TextTestRunner() - runner.run(main_window_suite) + unittest.main()