Coverage for tests/frontend_tests/test_base.py: 44%

103 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-09-16 19:50 +0000

1import os 

2import uuid 

3from dotenv import load_dotenv 

4import pytest 

5from selenium.webdriver.common.by import By 

6from passlib.hash import pbkdf2_sha512 

7from selenium.webdriver.support.ui import WebDriverWait 

8from selenium.webdriver.support import expected_conditions as EC 

9 

10# from selenium.webdriver.chrome.service import Service as ChromeService 

11# from webdriver_manager.chrome import ChromeDriverManager 

12from core import shared 

13from core.database_mongo_manager import DatabaseMongoManager 

14 

15# sys.path.append( 

16# os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 

17# ) 

18os.environ["IS_TEST"] = "True" 

19 

20load_dotenv() 

21 

22PORT = 5000 

23 

24 

25@pytest.fixture() 

26def database(): 

27 """Fixture to create a test database.""" 

28 DATABASE = DatabaseMongoManager( 

29 shared.getenv("MONGO_URI"), 

30 shared.getenv("MONGO_DB_TEST", "cs3528_testing"), 

31 ) 

32 

33 yield DATABASE 

34 

35 DATABASE.connection.close() 

36 

37 

38def test_base_page(chrome_browser, flask_server): 

39 chrome_browser.get("http://127.0.0.1:5000/students/login") 

40 assert chrome_browser.title == "SkillPilot - Student Login" 

41 

42 

43def test_student_login_page(chrome_browser, flask_server): 

44 chrome_browser.get("http://127.0.0.1:5000/students/login") 

45 assert chrome_browser.title == "SkillPilot - Student Login" 

46 

47 

48@pytest.fixture 

49def placement_member(database): 

50 users = database.get_all("users") 

51 database.delete_all("users") 

52 

53 user = { 

54 "_id": uuid.uuid4().hex, 

55 "name": "dummy", 

56 "email": "dummy@dummy.com", 

57 "password": pbkdf2_sha512.hash("dummy"), 

58 } 

59 database.insert("users", user) 

60 yield user 

61 database.delete_all("users") 

62 for user in users: 

63 database.insert("users", user) 

64 

65 

66@pytest.fixture 

67def student_member(database): 

68 students = database.get_all("students") 

69 database.delete_all("students") 

70 modules = database.get_all("modules") 

71 database.delete_all("modules") 

72 skills = database.get_all("skills") 

73 database.delete_all("skills") 

74 opportunities = database.get_all("opportunities") 

75 database.delete_all("opportunities") 

76 employers = database.get_all("employers") 

77 database.delete_all("employers") 

78 courses = database.get_all("courses") 

79 database.delete_all("courses") 

80 

81 student = { 

82 "_id": uuid.uuid4().hex, 

83 "first_name": "Olivia", 

84 "last_name": "Brown", 

85 "email": "dummy@example.com", 

86 "student_id": "12345678", 

87 "attempted_skills": [], 

88 "comments": "", 

89 "course": "DU78", 

90 "has_car": "false", 

91 "modules": ["DUMMY1", "DUMMY2"], 

92 "placement_duration": [ 

93 "6_months", 

94 "1_month", 

95 "12_months", 

96 ], 

97 "skills": [ 

98 "9a5f8be14beb4b138ca5376d295d2abc", 

99 "f71a49ed9614404380b34b69083b21cf", 

100 ], 

101 "preferences": [ 

102 "c31519139b2e4497912c73b4a1ecf86d", 

103 "ea7dd8d0c2394885a78fe761ae64ea1e", 

104 ], 

105 } 

106 database.insert("students", student) 

107 module1 = { 

108 "module_id": "DUMMY1", 

109 "module_name": "DUMMY", 

110 "module_description": "DUMMY", 

111 } 

112 database.insert("modules", module1) 

113 module2 = { 

114 "module_id": "DUMMY2", 

115 "module_name": "DUMMY", 

116 "module_description": "DUMMY", 

117 } 

118 database.insert("modules", module2) 

119 skill1 = { 

120 "skill_id": "9a5f8be14beb4b138ca5376d295d2abc", 

121 "skill_name": "DUMMY2", 

122 "skill_description": "DUMMY", 

123 } 

124 database.insert("skills", skill1) 

125 skill2 = { 

126 "skill_id": "f71a49ed9614404380b34b69083b21cf", 

127 "skill_name": "DUMMY2", 

128 "skill_description": "DUMMY", 

129 } 

130 database.insert("skills", skill2) 

131 preference1 = { 

132 "_id": "c31519139b2e4497912c73b4a1ecf86d", 

133 "title": "DUMMY1", 

134 "description": "DUMMY", 

135 "url": "DUMMY", 

136 "employer_id": "DUMMY", 

137 "location": "DUMMY", 

138 "modules_required": ["DUMMY1", "DUMMY2"], 

139 "courses_required": ["DU78", "DU79"], 

140 "spots_available": 1, 

141 "duration": "6_months", 

142 } 

143 database.insert("opportunities", preference1) 

144 preference2 = { 

145 "_id": "ea7dd8d0c2394885a78fe761ae64ea1e", 

146 "title": "DUMMY2", 

147 "description": "DUMMY", 

148 "url": "DUMMY", 

149 "employer_id": "DUMMY", 

150 "location": "DUMMY", 

151 "modules_required": ["DUMMY1", "DUMMY2"], 

152 "courses_required": ["DU78", "DU79"], 

153 "spots_available": 1, 

154 "duration": "6_months", 

155 } 

156 database.insert("opportunities", preference2) 

157 employer = { 

158 "_id": "DUMMY", 

159 "company_name": "DUMMY", 

160 "email": "DUMMY", 

161 } 

162 database.insert("employers", employer) 

163 course = { 

164 "_id": "DU78", 

165 "course_id": "DU78", 

166 "course_name": "DUMMY", 

167 "course_description": "DUMMY", 

168 } 

169 database.insert("courses", course) 

170 yield student 

171 

172 database.delete_all("students") 

173 database.delete_all("modules") 

174 database.delete_all("skills") 

175 database.delete_all("opportunities") 

176 database.delete_all("employers") 

177 database.delete_all("courses") 

178 for student in students: 

179 database.insert("students", student) 

180 for module in modules: 

181 database.insert("modules", module) 

182 for skill in skills: 

183 database.insert("skills", skill) 

184 for opportunity in opportunities: 

185 database.insert("opportunities", opportunity) 

186 for employer in employers: 

187 database.insert("employers", employer) 

188 for course in courses: 

189 database.insert("courses", course) 

190 

191 

192@pytest.fixture 

193def employer_member(database): 

194 employers = database.get_all("employers") 

195 database.delete_all("employers") 

196 

197 employer = { 

198 "_id": uuid.uuid4().hex, 

199 "company_name": "dummy", 

200 "email": "dummy@dummy.com", 

201 } 

202 

203 database.insert("employers", employer) 

204 yield employer 

205 

206 database.delete_all("employers") 

207 for employer in employers: 

208 database.insert("employers", employer) 

209 

210 

211def test_placement_team_login(chrome_browser, flask_server, database, placement_member): 

212 chrome_browser.get("http://127.0.0.1:5000/user/login") 

213 chrome_browser.find_element(By.ID, "agree-btn").click() 

214 chrome_browser.find_element(By.NAME, "email").send_keys("dummy@dummy.com") 

215 chrome_browser.find_element(By.NAME, "password").send_keys("dummy") 

216 chrome_browser.find_element(By.CSS_SELECTOR, "input[type='submit']").click() 

217 

218 WebDriverWait(chrome_browser, 10).until( 

219 EC.url_to_be("http://127.0.0.1:5000/user/home") 

220 ) 

221 

222 assert chrome_browser.current_url == "http://127.0.0.1:5000/user/home"