Skip to content

Commit 5eea64a

Browse files
committed
adding tests
1 parent 029e882 commit 5eea64a

File tree

1 file changed

+156
-2
lines changed

1 file changed

+156
-2
lines changed

thoughtswap/thoughtswap/tests.py

Lines changed: 156 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,157 @@
1-
from django.test import TestCase
1+
# chat/tests.py
2+
from channels.testing import ChannelsLiveServerTestCase
3+
from selenium import webdriver
4+
from selenium.webdriver.common.action_chains import ActionChains
5+
from selenium.webdriver.common.by import By
6+
from selenium.webdriver.common.keys import Keys
7+
from selenium.webdriver.support.wait import WebDriverWait
28

3-
# Create your tests here.
9+
10+
class ChatTests(ChannelsLiveServerTestCase):
11+
serve_static = True # emulate StaticLiveServerTestCase
12+
13+
@classmethod
14+
def setUpClass(cls):
15+
super().setUpClass()
16+
try:
17+
# NOTE: Requires "chromedriver" binary to be installed in $PATH
18+
cls.driver = webdriver.Chrome()
19+
cls.other_driver = webdriver.Firefox()
20+
except Exception as e:
21+
super().tearDownClass()
22+
raise e
23+
24+
@classmethod
25+
def tearDownClass(cls):
26+
cls.driver.quit()
27+
super().tearDownClass()
28+
29+
def test_when_chat_message_posted_then_seen_by_everyone_in_same_room_two_browsers(
30+
self,
31+
):
32+
try:
33+
self._open_teacher_and_student_dashboards()
34+
# self._enter_chat_room("room_1")
35+
36+
# self._open_new_window()
37+
# self._enter_chat_room("room_1")
38+
39+
self._switch_to_window(0)
40+
self._post_message("hello")
41+
WebDriverWait(self.driver, 2).until(
42+
lambda _: "hello" in self._chat_log_value,
43+
"Message was not received by window 1 from window 1",
44+
)
45+
self._switch_to_window(1)
46+
WebDriverWait(self.driver, 2).until(
47+
lambda _: "hello" in self._chat_log_value,
48+
"Message was not received by window 2 from window 1",
49+
)
50+
finally:
51+
self._close_all_new_windows()
52+
53+
def test_when_chat_message_posted_then_seen_by_everyone_in_same_room(self):
54+
try:
55+
self._enter_chat_room("room_1")
56+
57+
self._open_new_window()
58+
self._enter_chat_room("room_1")
59+
60+
self._switch_to_window(0)
61+
self._post_message("hello")
62+
WebDriverWait(self.driver, 2).until(
63+
lambda _: "hello" in self._chat_log_value,
64+
"Message was not received by window 1 from window 1",
65+
)
66+
self._switch_to_window(1)
67+
WebDriverWait(self.driver, 2).until(
68+
lambda _: "hello" in self._chat_log_value,
69+
"Message was not received by window 2 from window 1",
70+
)
71+
finally:
72+
self._close_all_new_windows()
73+
74+
def test_when_chat_message_posted_then_not_seen_by_anyone_in_different_room(self):
75+
try:
76+
self._enter_chat_room("room_1")
77+
78+
self._open_new_window()
79+
self._enter_chat_room("room_2")
80+
81+
self._switch_to_window(0)
82+
self._post_message("hello")
83+
WebDriverWait(self.driver, 2).until(
84+
lambda _: "hello" in self._chat_log_value,
85+
"Message was not received by window 1 from window 1",
86+
)
87+
88+
self._switch_to_window(1)
89+
self._post_message("world")
90+
WebDriverWait(self.driver, 2).until(
91+
lambda _: "world" in self._chat_log_value,
92+
"Message was not received by window 2 from window 2",
93+
)
94+
self.assertTrue(
95+
"hello" not in self._chat_log_value,
96+
"Message was improperly received by window 2 from window 1",
97+
)
98+
finally:
99+
self._close_all_new_windows()
100+
101+
# === Utility ===
102+
103+
def _open_teacher_and_student_dashboards(self):
104+
self.driver.get(self.live_server_url + "/thoughtswap/teacher_dashboard/")
105+
elem = self.driver.find_element(By.ID, "id_login")
106+
ActionChains(self.driver).send_keys("teacher", Keys.ENTER).perform()
107+
self.other_driver.get(self.live_server_url + "/thoughtswap/dashboard/")
108+
WebDriverWait(self.driver, 2).until(
109+
lambda _: "teacher" in self.driver.current_url
110+
)
111+
self.other_driver.get(self.live_server_url + "/student/")
112+
WebDriverWait(self.other_driver, 2).until(
113+
lambda _: "student" in self.other_driver.current_url
114+
)
115+
116+
def _enter_chat_room(self, room_name):
117+
self.driver.get(self.live_server_url + "/chat/")
118+
ActionChains(self.driver).send_keys(room_name, Keys.ENTER).perform()
119+
WebDriverWait(self.driver, 2).until(
120+
lambda _: room_name in self.driver.current_url
121+
)
122+
123+
# def _enter_chat_room(self, room_name):
124+
# self.driver.get(self.live_server_url + "/chat/")
125+
# ActionChains(self.driver).send_keys(room_name, Keys.ENTER).perform()
126+
# WebDriverWait(self.driver, 2).until(
127+
# lambda _: room_name in self.driver.current_url
128+
# )
129+
130+
def _open_new_window(self):
131+
self.driver.execute_script('window.open("about:blank", "_blank");')
132+
self._switch_to_window(-1)
133+
134+
def _open_new_window_other_client(self):
135+
self.other_driver.execute_script('window.open("about:blank", "_blank");')
136+
self._switch_to_window(-1)
137+
138+
def _close_all_new_windows(self):
139+
while len(self.driver.window_handles) > 1:
140+
self._switch_to_window(-1)
141+
self.driver.execute_script("window.close();")
142+
if len(self.driver.window_handles) == 1:
143+
self._switch_to_window(0)
144+
145+
def _switch_to_window(self, window_index, driver=None):
146+
if driver is None:
147+
driver = self.driver
148+
driver.switch_to.window(driver.window_handles[window_index])
149+
150+
def _post_message(self, message):
151+
ActionChains(self.driver).send_keys(message, Keys.ENTER).perform()
152+
153+
@property
154+
def _chat_log_value(self):
155+
return self.driver.find_element(
156+
by=By.CSS_SELECTOR, value="#chat-log"
157+
).get_property("value")

0 commit comments

Comments
 (0)