summaryrefslogtreecommitdiff
path: root/desktop/tests/test_gui_tabs.py
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/tests/test_gui_tabs.py')
-rw-r--r--desktop/tests/test_gui_tabs.py223
1 files changed, 223 insertions, 0 deletions
diff --git a/desktop/tests/test_gui_tabs.py b/desktop/tests/test_gui_tabs.py
new file mode 100644
index 00000000..4ebbdffb
--- /dev/null
+++ b/desktop/tests/test_gui_tabs.py
@@ -0,0 +1,223 @@
+import pytest
+import os
+
+from PySide2 import QtCore, QtTest, QtWidgets
+
+from .gui_base_test import GuiBaseTest
+
+
+class TestTabs(GuiBaseTest):
+ # Shared test methods
+
+ def close_tab_with_active_server(self, tab):
+ # Start the server
+ self.assertEqual(
+ tab.get_mode().server_status.status,
+ tab.get_mode().server_status.STATUS_STOPPED,
+ )
+ tab.get_mode().server_status.server_button.click()
+ self.assertEqual(
+ tab.get_mode().server_status.status,
+ tab.get_mode().server_status.STATUS_WORKING,
+ )
+ QtTest.QTest.qWait(1000, self.gui.qtapp)
+ self.assertEqual(
+ tab.get_mode().server_status.status,
+ tab.get_mode().server_status.STATUS_STARTED,
+ )
+
+ # Prepare to reject the dialog
+ QtCore.QTimer.singleShot(0, tab.close_dialog.reject_button.click)
+
+ # Close tab
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+
+ # The tab should still be open
+ self.assertFalse(tab.new_tab.isVisible())
+ self.assertTrue(tab.get_mode().isVisible())
+
+ # Prepare to accept the dialog
+ QtCore.QTimer.singleShot(0, tab.close_dialog.accept_button.click)
+
+ # Close tab
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+
+ # The tab should be closed
+ self.assertTrue(self.gui.tabs.widget(0).new_tab.isVisible())
+
+ def close_persistent_tab(self, tab):
+ # There shouldn't be a persistent settings file
+ self.assertFalse(os.path.exists(tab.settings.filename))
+
+ # Click the persistent checkbox
+ tab.get_mode().server_status.mode_settings_widget.persistent_checkbox.click()
+ QtTest.QTest.qWait(100, self.gui.qtapp)
+
+ # There should be a persistent settings file now
+ self.assertTrue(os.path.exists(tab.settings.filename))
+
+ # Prepare to reject the dialog
+ QtCore.QTimer.singleShot(0, tab.close_dialog.reject_button.click)
+
+ # Close tab
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+
+ # The tab should still be open
+ self.assertFalse(tab.new_tab.isVisible())
+ self.assertTrue(tab.get_mode().isVisible())
+
+ # There should be a persistent settings file still
+ self.assertTrue(os.path.exists(tab.settings.filename))
+
+ # Prepare to accept the dialog
+ QtCore.QTimer.singleShot(0, tab.close_dialog.accept_button.click)
+
+ # Close tab
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+
+ # The tab should be closed
+ self.assertTrue(self.gui.tabs.widget(0).new_tab.isVisible())
+
+ # The persistent settings file should be deleted
+ self.assertFalse(os.path.exists(tab.settings.filename))
+
+ # Tests
+
+ def test_01_common_tests(self):
+ """Run all common tests"""
+ self.run_all_common_setup_tests()
+
+ def test_02_starts_with_one_new_tab(self):
+ """There should be one "New Tab" tab open"""
+ self.assertEqual(self.gui.tabs.count(), 1)
+ self.assertTrue(self.gui.tabs.widget(0).new_tab.isVisible())
+
+ def test_03_new_tab_button_opens_new_tabs(self):
+ """Clicking the "+" button should open new tabs"""
+ self.assertEqual(self.gui.tabs.count(), 1)
+ self.gui.tabs.new_tab_button.click()
+ self.gui.tabs.new_tab_button.click()
+ self.gui.tabs.new_tab_button.click()
+ self.assertEqual(self.gui.tabs.count(), 4)
+
+ def test_04_close_tab_button_closes_tabs(self):
+ """Clicking the "x" button should close tabs"""
+ self.assertEqual(self.gui.tabs.count(), 4)
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.assertEqual(self.gui.tabs.count(), 1)
+
+ def test_05_closing_last_tab_opens_new_one(self):
+ """Closing the last tab should open a new tab"""
+ self.assertEqual(self.gui.tabs.count(), 1)
+
+ # Click share button
+ self.gui.tabs.widget(0).share_button.click()
+ self.assertFalse(self.gui.tabs.widget(0).new_tab.isVisible())
+ self.assertTrue(self.gui.tabs.widget(0).share_mode.isVisible())
+
+ # Close the tab
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+
+ # A new tab should be opened
+ self.assertEqual(self.gui.tabs.count(), 1)
+ self.assertTrue(self.gui.tabs.widget(0).new_tab.isVisible())
+
+ def test_06_new_tab_mode_buttons_show_correct_modes(self):
+ """Clicking the mode buttons in a new tab should change the mode of the tab"""
+
+ # New tab, share files
+ self.gui.tabs.new_tab_button.click()
+ self.gui.tabs.widget(1).share_button.click()
+ self.assertFalse(self.gui.tabs.widget(1).new_tab.isVisible())
+ self.assertTrue(self.gui.tabs.widget(1).share_mode.isVisible())
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to share"
+ )
+
+ # New tab, receive files
+ self.gui.tabs.new_tab_button.click()
+ self.gui.tabs.widget(2).receive_button.click()
+ self.assertFalse(self.gui.tabs.widget(2).new_tab.isVisible())
+ self.assertTrue(self.gui.tabs.widget(2).receive_mode.isVisible())
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to receive"
+ )
+
+ # New tab, publish website
+ self.gui.tabs.new_tab_button.click()
+ self.gui.tabs.widget(3).website_button.click()
+ self.assertFalse(self.gui.tabs.widget(3).new_tab.isVisible())
+ self.assertTrue(self.gui.tabs.widget(3).website_mode.isVisible())
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to share"
+ )
+
+ # Close tabs
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+
+ def test_07_close_share_tab_while_server_started_should_warn(self):
+ """Closing a share mode tab when the server is running should throw a warning"""
+ tab = self.new_share_tab_with_files()
+ self.close_tab_with_active_server(tab)
+
+ def test_08_close_receive_tab_while_server_started_should_warn(self):
+ """Closing a recieve mode tab when the server is running should throw a warning"""
+ tab = self.new_receive_tab()
+ self.close_tab_with_active_server(tab)
+
+ def test_09_close_website_tab_while_server_started_should_warn(self):
+ """Closing a website mode tab when the server is running should throw a warning"""
+ tab = self.new_website_tab_with_files()
+ self.close_tab_with_active_server(tab)
+
+ def test_10_close_persistent_share_tab_shows_warning(self):
+ """Closing a share mode tab that's persistent should show a warning"""
+ tab = self.new_share_tab_with_files()
+ self.close_persistent_tab(tab)
+
+ def test_11_close_persistent_receive_tab_shows_warning(self):
+ """Closing a receive mode tab that's persistent should show a warning"""
+ tab = self.new_receive_tab()
+ self.close_persistent_tab(tab)
+
+ def test_12_close_persistent_website_tab_shows_warning(self):
+ """Closing a website mode tab that's persistent should show a warning"""
+ tab = self.new_website_tab_with_files()
+ self.close_persistent_tab(tab)
+
+ def test_13_quit_with_server_started_should_warn(self):
+ """Quitting OnionShare with any active servers should show a warning"""
+ tab = self.new_share_tab()
+
+ # Start the server
+ self.assertEqual(
+ tab.get_mode().server_status.status,
+ tab.get_mode().server_status.STATUS_STOPPED,
+ )
+ tab.get_mode().server_status.server_button.click()
+ self.assertEqual(
+ tab.get_mode().server_status.status,
+ tab.get_mode().server_status.STATUS_WORKING,
+ )
+ QtTest.QTest.qWait(500, self.gui.qtapp)
+ self.assertEqual(
+ tab.get_mode().server_status.status,
+ tab.get_mode().server_status.STATUS_STARTED,
+ )
+
+ # Prepare to reject the dialog
+ QtCore.QTimer.singleShot(0, self.gui.close_dialog.reject_button.click)
+
+ # Close the window
+ self.gui.close()
+
+ # The window should still be open
+ self.assertTrue(self.gui.isVisible())
+
+ # Stop the server
+ tab.get_mode().server_status.server_button.click()