mirror of
https://github.com/onionshare/onionshare.git
synced 2025-01-10 19:52:50 -03:00
232 lines
8.1 KiB
Python
232 lines
8.1 KiB
Python
|
#!/usr/bin/env python3
|
||
|
import pytest
|
||
|
import unittest
|
||
|
|
||
|
import json
|
||
|
import os
|
||
|
import requests
|
||
|
import shutil
|
||
|
import base64
|
||
|
import tempfile
|
||
|
import secrets
|
||
|
|
||
|
from PyQt5 import QtCore, QtTest, QtWidgets
|
||
|
|
||
|
from onionshare import strings
|
||
|
from onionshare.common import Common
|
||
|
from onionshare.settings import Settings
|
||
|
from onionshare.onion import Onion
|
||
|
from onionshare.web import Web
|
||
|
from onionshare_gui import Application, MainWindow, GuiCommon
|
||
|
|
||
|
|
||
|
class TestTabs(unittest.TestCase):
|
||
|
@classmethod
|
||
|
def setUpClass(cls):
|
||
|
common = Common()
|
||
|
qtapp = Application(common)
|
||
|
common.gui = GuiCommon(common, qtapp, local_only=True)
|
||
|
cls.gui = MainWindow(common, filenames=None)
|
||
|
cls.gui.qtapp = qtapp
|
||
|
|
||
|
# Create some random files to test with
|
||
|
cls.tmpdir = tempfile.TemporaryDirectory()
|
||
|
cls.tmpfiles = []
|
||
|
for _ in range(10):
|
||
|
filename = os.path.join(cls.tmpdir.name, f"{secrets.token_hex(4)}.txt")
|
||
|
with open(filename, "w") as file:
|
||
|
file.write(secrets.token_hex(10))
|
||
|
cls.tmpfiles.append(filename)
|
||
|
|
||
|
@classmethod
|
||
|
def tearDownClass(cls):
|
||
|
cls.gui.cleanup()
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_001_gui_loaded(self):
|
||
|
"""Test that the GUI actually is shown"""
|
||
|
self.assertTrue(self.gui.show)
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_002_window_title_seen(self):
|
||
|
"""Test that the window title is OnionShare"""
|
||
|
self.assertEqual(self.gui.windowTitle(), "OnionShare")
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_003_settings_button_is_visible(self):
|
||
|
"""Test that the settings button is visible"""
|
||
|
self.assertTrue(self.gui.settings_button.isVisible())
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_004_server_status_bar_is_visible(self):
|
||
|
"""Test that the status bar is visible"""
|
||
|
self.assertTrue(self.gui.status_bar.isVisible())
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_005_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())
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_006_new_tab_button_opens_new_tabs(self):
|
||
|
"""Clicking the "+" button should open new tabs"""
|
||
|
self.assertEqual(self.gui.tabs.count(), 1)
|
||
|
QtTest.QTest.mouseClick(self.gui.tabs.new_tab_button, QtCore.Qt.LeftButton)
|
||
|
QtTest.QTest.mouseClick(self.gui.tabs.new_tab_button, QtCore.Qt.LeftButton)
|
||
|
QtTest.QTest.mouseClick(self.gui.tabs.new_tab_button, QtCore.Qt.LeftButton)
|
||
|
self.assertEqual(self.gui.tabs.count(), 4)
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_007_close_tab_button_closes_tabs(self):
|
||
|
"""Clicking the "x" button should close tabs"""
|
||
|
self.assertEqual(self.gui.tabs.count(), 4)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
self.assertEqual(self.gui.tabs.count(), 1)
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_008_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
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.widget(0).share_button, QtCore.Qt.LeftButton
|
||
|
)
|
||
|
self.assertFalse(self.gui.tabs.widget(0).new_tab.isVisible())
|
||
|
self.assertTrue(self.gui.tabs.widget(0).share_mode.isVisible())
|
||
|
|
||
|
# Close the tab
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
|
||
|
# A new tab should be opened
|
||
|
self.assertEqual(self.gui.tabs.count(), 1)
|
||
|
self.assertTrue(self.gui.tabs.widget(0).new_tab.isVisible())
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_009_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
|
||
|
QtTest.QTest.mouseClick(self.gui.tabs.new_tab_button, QtCore.Qt.LeftButton)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.widget(1).share_button, QtCore.Qt.LeftButton
|
||
|
)
|
||
|
self.assertFalse(self.gui.tabs.widget(1).new_tab.isVisible())
|
||
|
self.assertTrue(self.gui.tabs.widget(1).share_mode.isVisible())
|
||
|
|
||
|
# New tab, receive files
|
||
|
QtTest.QTest.mouseClick(self.gui.tabs.new_tab_button, QtCore.Qt.LeftButton)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.widget(2).receive_button, QtCore.Qt.LeftButton
|
||
|
)
|
||
|
self.assertFalse(self.gui.tabs.widget(2).new_tab.isVisible())
|
||
|
self.assertTrue(self.gui.tabs.widget(2).receive_mode.isVisible())
|
||
|
|
||
|
# New tab, publish website
|
||
|
QtTest.QTest.mouseClick(self.gui.tabs.new_tab_button, QtCore.Qt.LeftButton)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.widget(3).website_button, QtCore.Qt.LeftButton
|
||
|
)
|
||
|
self.assertFalse(self.gui.tabs.widget(3).new_tab.isVisible())
|
||
|
self.assertTrue(self.gui.tabs.widget(3).website_mode.isVisible())
|
||
|
|
||
|
# Close tabs
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
|
||
|
@pytest.mark.gui
|
||
|
def test_010_close_share_tab_while_server_started_should_warn(self):
|
||
|
"""Closing a share mode tab when the server is running should throw a warning"""
|
||
|
pass
|
||
|
"""
|
||
|
tab = self.gui.tabs.widget(0)
|
||
|
|
||
|
# Share files
|
||
|
QtTest.QTest.mouseClick(tab.share_button, QtCore.Qt.LeftButton)
|
||
|
self.assertFalse(tab.new_tab.isVisible())
|
||
|
self.assertTrue(tab.share_mode.isVisible())
|
||
|
|
||
|
# Add files
|
||
|
for filename in self.tmpfiles:
|
||
|
tab.share_mode.server_status.file_selection.file_list.add_file(filename)
|
||
|
|
||
|
# Start the server
|
||
|
self.assertEqual(
|
||
|
tab.share_mode.server_status.status,
|
||
|
tab.share_mode.server_status.STATUS_STOPPED,
|
||
|
)
|
||
|
QtTest.QTest.mouseClick(
|
||
|
tab.share_mode.server_status.server_button, QtCore.Qt.LeftButton
|
||
|
)
|
||
|
self.assertEqual(
|
||
|
tab.share_mode.server_status.status,
|
||
|
tab.share_mode.server_status.STATUS_WORKING,
|
||
|
)
|
||
|
QtTest.QTest.qWait(1000)
|
||
|
self.assertEqual(
|
||
|
tab.share_mode.server_status.status,
|
||
|
tab.share_mode.server_status.STATUS_STARTED,
|
||
|
)
|
||
|
|
||
|
# Close tab
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
|
||
|
# The active window should now be a dialog
|
||
|
dialog = self.gui.qtapp.activeWindow()
|
||
|
self.assertEqual(type(dialog), QtWidgets.QMessageBox)
|
||
|
|
||
|
# Reject it -- the share mode tab should still be open
|
||
|
dialog.reject()
|
||
|
self.assertFalse(tab.new_tab.isVisible())
|
||
|
self.assertTrue(tab.share_mode.isVisible())
|
||
|
|
||
|
# Close tab
|
||
|
QtTest.QTest.mouseClick(
|
||
|
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide),
|
||
|
QtCore.Qt.LeftButton,
|
||
|
)
|
||
|
|
||
|
# This time accept it -- the share mode tab should be closed
|
||
|
dialog = self.gui.qtapp.activeWindow()
|
||
|
self.assertEqual(type(dialog), QtWidgets.QMessageBox)
|
||
|
dialog.accept()
|
||
|
|
||
|
self.assertTrue(self.gui.tabs.widget(0).new_tab.isVisible())
|
||
|
"""
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|