summaryrefslogtreecommitdiff
path: root/desktop/tests/test_gui_chat.py
blob: 15ecaa4494061a5d9b8a126d4bb142881e008844 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import requests

from PySide2 import QtTest

from .gui_base_test import GuiBaseTest


class TestChat(GuiBaseTest):
    # Shared test methods

    def view_chat(self, tab):
        """Test that we can view the chat room"""
        url = f"http://127.0.0.1:{tab.app.port}/"
        if tab.settings.get("general", "public"):
            r = requests.get(url)
        else:
            r = requests.get(
                url,
                auth=requests.auth.HTTPBasicAuth(
                    "onionshare", tab.get_mode().server_status.web.password
                ),
            )

        QtTest.QTest.qWait(500, self.gui.qtapp)
        self.assertTrue("Chat <b>requires JavaScript</b>" in r.text)

        cookies_dict = requests.utils.dict_from_cookiejar(r.cookies)
        self.assertTrue("session" in cookies_dict.keys())

    def change_username(self, tab):
        """Test that we can change our username"""
        url = f"http://127.0.0.1:{tab.app.port}/update-session-username"
        data = {"username": "oniontest"}
        if tab.settings.get("general", "public"):
            r = requests.post(url, json=data)
        else:
            r = requests.post(
                url,
                json=data,
                auth=requests.auth.HTTPBasicAuth(
                    "onionshare", tab.get_mode().server_status.web.password
                ),
            )

        QtTest.QTest.qWait(500, self.gui.qtapp)
        jsonResponse = r.json()
        self.assertTrue(jsonResponse["success"])
        self.assertEqual(jsonResponse["username"], "oniontest")

    def run_all_chat_mode_started_tests(self, tab):
        """Tests in chat mode after starting a chat"""
        self.server_working_on_start_button_pressed(tab)
        self.server_status_indicator_says_starting(tab)
        self.server_is_started(tab, startup_time=500)
        self.web_server_is_running(tab)
        self.have_a_password(tab)
        self.url_description_shown(tab)
        self.have_copy_url_button(tab)
        self.have_show_qr_code_button(tab)
        self.server_status_indicator_says_started(tab)

    def run_all_chat_mode_stopping_tests(self, tab):
        """Tests stopping a chat"""
        self.server_is_stopped(tab)
        self.web_server_is_stopped(tab)
        self.server_status_indicator_says_closed(tab)

    # Tests

    def test_chat(self):
        """
        Test chat mode
        """
        tab = self.new_chat_tab()
        self.run_all_chat_mode_started_tests(tab)
        self.view_chat(tab)
        self.change_username(tab)
        self.run_all_chat_mode_stopping_tests(tab)
        self.close_all_tabs()

    def test_405_page_returned_for_invalid_methods(self):
        """
        Our custom 405 page should return for invalid methods
        """
        tab = self.new_chat_tab()

        tab.get_mode().mode_settings_widget.public_checkbox.click()

        self.run_all_chat_mode_started_tests(tab)
        url = f"http://127.0.0.1:{tab.app.port}/"
        self.hit_405(
            url,
            expected_resp="OnionShare: 405 Method Not Allowed",
            data={"foo": "bar"},
            methods=["put", "post", "delete", "options"],
        )
        self.run_all_chat_mode_stopping_tests(tab)
        self.close_all_tabs()