File size: 3,524 Bytes
0b5541b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

class EchoLightAppTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        # Adjust the path to your chromedriver if needed
        cls.driver = webdriver.Chrome()
        cls.driver.get('http://localhost:5500/index.html')  # Use your local server/port
        cls.driver.maximize_window()
        cls.wait = WebDriverWait(cls.driver, 10)

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def test_1_text_chat(self):
        driver = self.driver
        wait = self.wait
        # Find input and send a message
        input_box = wait.until(EC.presence_of_element_located((By.ID, 'messageInput')))
        input_box.clear()
        input_box.send_keys('Hello, how are you?')
        input_box.send_keys(Keys.ENTER)
        # Wait for echo reply
        wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, '.message.echo')) > 0)
        messages = driver.find_elements(By.CSS_SELECTOR, '.message.echo')
        self.assertTrue(any('how are you' in m.text.lower() or m.text for m in messages))

    def test_2_empty_message(self):
        driver = self.driver
        wait = self.wait
        input_box = wait.until(EC.presence_of_element_located((By.ID, 'messageInput')))
        input_box.clear()
        input_box.send_keys('   ')
        input_box.send_keys(Keys.ENTER)
        # No new user message should be added
        time.sleep(1)
        user_msgs = driver.find_elements(By.CSS_SELECTOR, '.message.user')
        self.assertFalse(user_msgs[-1].text.strip() == '')

    def test_3_modes_navigation(self):
        driver = self.driver
        wait = self.wait
        # Modes grid
        modes = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.mode-card')))
        for mode in modes:
            mode.click()
            time.sleep(0.5)
            # Check that the screen is active
            active = driver.find_elements(By.CSS_SELECTOR, '.screen.active')
            self.assertTrue(len(active) > 0)

    def test_4_vocabulary_card(self):
        driver = self.driver
        wait = self.wait
        # Go to vocabulary mode
        vocab_mode = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.mode-card')))[1]
        vocab_mode.click()
        time.sleep(0.5)
        # Check card content
        word = driver.find_element(By.ID, 'cardWord').text
        self.assertTrue(len(word) > 0)
        # Next card
        next_btn = driver.find_element(By.ID, 'nextCardBtn') if driver.find_elements(By.ID, 'nextCardBtn') else None
        if next_btn:
            next_btn.click()
            time.sleep(0.5)
            new_word = driver.find_element(By.ID, 'cardWord').text
            self.assertNotEqual(word, new_word)

    def test_5_achievements(self):
        driver = self.driver
        wait = self.wait
        # Go to achievements/progress screen
        progress_btn = driver.find_element(By.ID, 'progressBtn') if driver.find_elements(By.ID, 'progressBtn') else None
        if progress_btn:
            progress_btn.click()
            time.sleep(0.5)
            achievements = driver.find_elements(By.CSS_SELECTOR, '.achievement-card')
            self.assertTrue(len(achievements) > 0)

if __name__ == '__main__':
    unittest.main()