Skip to content

Commit b9e52c0

Browse files
committed
feat: ci test for apis; manual otp
1 parent b69b775 commit b9e52c0

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ venv
1414
ACADEMIC_CALENDAR_*.pdf
1515
Academic_Cal-j/**
1616
final.json
17+
erpcreds.py

api-integration-test.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import requests
2+
import erpcreds
3+
4+
BASE_URL = "http://127.0.0.1:8000"
5+
6+
session = requests.Session()
7+
8+
def get_secret_question():
9+
url = f"{BASE_URL}/secret-question"
10+
data = {"roll_number": erpcreds.ROLL_NUMBER}
11+
12+
response = session.post(url, data=data)
13+
res_json = response.json()
14+
15+
if res_json["status"] == "success":
16+
secret_question = res_json["SECRET_QUESTION"]
17+
session_token = res_json["SESSION_TOKEN"]
18+
print(f"✅ Secret Question: {secret_question}")
19+
print(f"✅ Session Token: {session_token}")
20+
return secret_question, session_token
21+
else:
22+
print(f"❌ Error: {res_json['message']}")
23+
exit(1)
24+
25+
def request_otp(session_token, secret_question):
26+
url = f"{BASE_URL}/request-otp"
27+
headers = {"Session-Token": session_token}
28+
data = {
29+
"roll_number": erpcreds.ROLL_NUMBER,
30+
"password": erpcreds.PASSWORD,
31+
"secret_answer": erpcreds.SECURITY_QUESTIONS_ANSWERS[secret_question],
32+
}
33+
34+
response = session.post(url, headers=headers, data=data)
35+
res_json = response.json()
36+
37+
if res_json["status"] == "success":
38+
print("✅ OTP request successful. Check your email for the OTP.")
39+
else:
40+
print(f"❌ Error: {res_json['message']}")
41+
exit(1)
42+
43+
def login(session_token, secret_question, otp):
44+
url = f"{BASE_URL}/login"
45+
headers = {"Session-Token": session_token}
46+
data = {
47+
"roll_number": erpcreds.ROLL_NUMBER,
48+
"password": erpcreds.PASSWORD,
49+
"secret_answer": erpcreds.SECURITY_QUESTIONS_ANSWERS[secret_question],
50+
"otp": otp,
51+
}
52+
53+
response = session.post(url, headers=headers, data=data)
54+
res_json = response.json()
55+
56+
if res_json["status"] == "success":
57+
sso_token = res_json["ssoToken"]
58+
print(f"✅ Login successful. SSO Token: {sso_token}")
59+
return sso_token
60+
else:
61+
print(f"❌ Error: {res_json['message']}")
62+
exit(1)
63+
64+
def download_timetable(sso_token):
65+
url = f"{BASE_URL}/timetable"
66+
headers = {"SSO-Token": sso_token}
67+
data = {"roll_number": erpcreds.ROLL_NUMBER}
68+
69+
response = session.post(url, headers=headers, data=data)
70+
71+
if response.status_code == 200:
72+
with open(f"{erpcreds.ROLL_NUMBER}-timetable.ics", "wb") as file:
73+
file.write(response.content)
74+
print(f"✅ Timetable downloaded successfully as {erpcreds.ROLL_NUMBER}-timetable.ics")
75+
else:
76+
print(f"❌ Error: {response.json().get('message', 'Unknown error')}")
77+
exit(1)
78+
79+
if __name__ == "__main__":
80+
secret_question, session_token = get_secret_question()
81+
request_otp(session_token, secret_question)
82+
83+
otp = input("Enter OTP received via email: ").strip()
84+
sso_token = login(session_token, secret_question, otp)
85+
86+
download_timetable(sso_token)

0 commit comments

Comments
 (0)