From 574c5ca74642ae1a319920e548e55ba5d0eb6322 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Fri, 11 Feb 2022 16:37:33 -0500 Subject: [PATCH 01/18] Create test_user_course.py --- src/api/tests/test_user_course.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/api/tests/test_user_course.py diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py new file mode 100644 index 000000000..c3dfbcde4 --- /dev/null +++ b/src/api/tests/test_user_course.py @@ -0,0 +1,8 @@ +import pytest +import requests +from .util import Client +from .fixtures import * + +def test_user_course(client: Client): + r = client.get("/api/user/course") + assert(r.text == "YACS API is Up!") From f72edf2ed876cab9528da5b0be6f4110ce8d3503 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Fri, 11 Feb 2022 18:03:59 -0500 Subject: [PATCH 02/18] Update test_user_course.py --- src/api/tests/test_user_course.py | 48 +++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index c3dfbcde4..0cfc173e3 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -1,8 +1,46 @@ -import pytest -import requests from .util import Client from .fixtures import * -def test_user_course(client: Client): - r = client.get("/api/user/course") - assert(r.text == "YACS API is Up!") +TEST_USER = { 'email': TEST_USER_SIGNUP['email'], + 'password': TEST_USER_SIGNUP['password'] } + +# TEST_USER_SIGNUP = { 'email': 'test@email.com', +# 'name': 'TestName', +# 'phone': '', +# 'password': '123456', +# 'degree': 'Undergraduate', +# 'major': 'CSCI' } +def test_user_course_post_success(post_user, client: Client): + ''' + Test user course post by comparing it to user course get + ''' + + s = client.post("/api/session", json=TEST_USER) + assert s.status_code == 200 + + r = client.post("/api/user/course", json={ + "name": "ADMN-1824", + "semester": "SUMMER 2020", + "cid": "-1" + }) + assert r.status_code == 200 + data = r.json() + g = client.get("/api/user/course", json=TEST_USER) + get_data = g.json() + print(get_data) + assert data['content'] is not None + assert data['content']['course_name'] is not None + assert data['content']['crn'] is not None + assert data['content']['semester'] is not None + + assert data['content']['course_name'] == get_data['content']['course_name'] + +def test_user_course_post_failure(client: Client): + ''' + Test user course post with invalid credentials + ''' + # r = client.post("/api/user/course", json={'name':'NotAUser', 'password':'000000'}) + # assert r.status_code == 200 + + # data = r.json() + # assert data['content'] is None \ No newline at end of file From d4d31eadb3f1f67d8f7c20fbd1daceb8a09dbcd6 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Fri, 11 Feb 2022 18:59:46 -0500 Subject: [PATCH 03/18] Update failure case and minor change on success post --- src/api/tests/test_user_course.py | 45 +++++++++++++++++++------------ 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index 0cfc173e3..3bba7ef77 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -3,7 +3,11 @@ TEST_USER = { 'email': TEST_USER_SIGNUP['email'], 'password': TEST_USER_SIGNUP['password'] } - +TEST_USER_COURSE = { + "name": "ADMN-1824", + "semester": "SUMMER 2020", + "cid": "-1" +} # TEST_USER_SIGNUP = { 'email': 'test@email.com', # 'name': 'TestName', # 'phone': '', @@ -14,33 +18,40 @@ def test_user_course_post_success(post_user, client: Client): ''' Test user course post by comparing it to user course get ''' - s = client.post("/api/session", json=TEST_USER) assert s.status_code == 200 - - r = client.post("/api/user/course", json={ - "name": "ADMN-1824", - "semester": "SUMMER 2020", - "cid": "-1" - }) + r = client.post("/api/user/course", json=TEST_USER_COURSE) assert r.status_code == 200 data = r.json() - g = client.get("/api/user/course", json=TEST_USER) + g = client.get("/api/user/course", json=TEST_USER_COURSE) get_data = g.json() print(get_data) assert data['content'] is not None - assert data['content']['course_name'] is not None - assert data['content']['crn'] is not None + assert data['content']['name'] is not None assert data['content']['semester'] is not None + assert data['content']['cid'] is not None - assert data['content']['course_name'] == get_data['content']['course_name'] + assert data['content']['name'] == get_data['content']['name'] + assert data['content']['semester'] == get_data['content']['semester'] + assert data['content']['cid'] == get_data['content']['cid'] def test_user_course_post_failure(client: Client): ''' - Test user course post with invalid credentials + Test user course post with invalid parameter ''' - # r = client.post("/api/user/course", json={'name':'NotAUser', 'password':'000000'}) - # assert r.status_code == 200 + MISMATCH_TEST_USER_COURSE = { + "name": "AAAAAA", + "semester": "BBBB", + "cid": "9999" + } + s = client.post("/api/session", json=TEST_USER) + assert s.status_code == 200 + r = client.post("api/user/course", json=TEST_USER_COURSE) + assert r.status_code == 200 + data = r.json() + g = client.get("/api/user/course", json=MISMATCH_TEST_USER_COURSE) + get_data = g.json() - # data = r.json() - # assert data['content'] is None \ No newline at end of file + assert data['content']['name'] != get_data['content']['name'] + assert data['content']['semester'] != get_data['content']['semester'] + assert data['content']['cid'] != get_data['content']['cid'] \ No newline at end of file From 33df37521c1ae10b4055e274c1b63e1fe540f02e Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Mon, 14 Feb 2022 16:04:30 -0500 Subject: [PATCH 04/18] Minor changes --- src/api/tests/test_user_course.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index 3bba7ef77..9aa6b434b 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -3,10 +3,9 @@ TEST_USER = { 'email': TEST_USER_SIGNUP['email'], 'password': TEST_USER_SIGNUP['password'] } -TEST_USER_COURSE = { - "name": "ADMN-1824", - "semester": "SUMMER 2020", - "cid": "-1" +TEST_USER_COURSE = {'name': 'ADMN-1824', + 'semester': 'SUMMER 2020', + 'cid': '-1' } # TEST_USER_SIGNUP = { 'email': 'test@email.com', # 'name': 'TestName', @@ -18,19 +17,21 @@ def test_user_course_post_success(post_user, client: Client): ''' Test user course post by comparing it to user course get ''' + # Test if user can login s = client.post("/api/session", json=TEST_USER) assert s.status_code == 200 + # Test if the user can post course r = client.post("/api/user/course", json=TEST_USER_COURSE) assert r.status_code == 200 data = r.json() - g = client.get("/api/user/course", json=TEST_USER_COURSE) - get_data = g.json() - print(get_data) assert data['content'] is not None assert data['content']['name'] is not None assert data['content']['semester'] is not None assert data['content']['cid'] is not None - + # Test if the user can get from posted course data + g = client.get("/api/user/course", json=TEST_USER_COURSE) + get_data = g.json() + #print(get_data) assert data['content']['name'] == get_data['content']['name'] assert data['content']['semester'] == get_data['content']['semester'] assert data['content']['cid'] == get_data['content']['cid'] From 4fc5f9ce722ee4037e43f810867abc088cd1e413 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Tue, 15 Feb 2022 16:22:19 -0500 Subject: [PATCH 05/18] Debugging json on line 26 --- src/api/tests/test_user_course.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index 9aa6b434b..87a1c66d9 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -1,8 +1,7 @@ from .util import Client -from .fixtures import * -TEST_USER = { 'email': TEST_USER_SIGNUP['email'], - 'password': TEST_USER_SIGNUP['password'] } +TEST_USER = { 'email': 'test@email.com', + 'password': '123456' } TEST_USER_COURSE = {'name': 'ADMN-1824', 'semester': 'SUMMER 2020', 'cid': '-1' @@ -23,6 +22,7 @@ def test_user_course_post_success(post_user, client: Client): # Test if the user can post course r = client.post("/api/user/course", json=TEST_USER_COURSE) assert r.status_code == 200 + print(r.text) data = r.json() assert data['content'] is not None assert data['content']['name'] is not None From e6412e4cb0de05d4680740a14e4a7f9d6fbd924e Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Wed, 16 Feb 2022 12:48:25 -0500 Subject: [PATCH 06/18] Passed post success and failure for user/course --- src/api/tests/test_user_course.py | 57 +++++++++++-------------------- 1 file changed, 20 insertions(+), 37 deletions(-) diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index 87a1c66d9..3b08ddaf4 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -2,57 +2,40 @@ TEST_USER = { 'email': 'test@email.com', 'password': '123456' } + TEST_USER_COURSE = {'name': 'ADMN-1824', 'semester': 'SUMMER 2020', 'cid': '-1' } -# TEST_USER_SIGNUP = { 'email': 'test@email.com', -# 'name': 'TestName', -# 'phone': '', -# 'password': '123456', -# 'degree': 'Undergraduate', -# 'major': 'CSCI' } +# pytest -s tests/test_user_course.py def test_user_course_post_success(post_user, client: Client): ''' Test user course post by comparing it to user course get ''' # Test if user can login - s = client.post("/api/session", json=TEST_USER) - assert s.status_code == 200 + sess = client.post("/api/session", json=TEST_USER) + assert sess.status_code == 200 # Test if the user can post course r = client.post("/api/user/course", json=TEST_USER_COURSE) assert r.status_code == 200 - print(r.text) - data = r.json() - assert data['content'] is not None - assert data['content']['name'] is not None - assert data['content']['semester'] is not None - assert data['content']['cid'] is not None - # Test if the user can get from posted course data g = client.get("/api/user/course", json=TEST_USER_COURSE) - get_data = g.json() - #print(get_data) - assert data['content']['name'] == get_data['content']['name'] - assert data['content']['semester'] == get_data['content']['semester'] - assert data['content']['cid'] == get_data['content']['cid'] - + get_data = g.json()[0] + assert get_data['course_name'] == TEST_USER_COURSE['name'] + assert get_data['semester'] == TEST_USER_COURSE['semester'] + assert get_data['crn'] == TEST_USER_COURSE['cid'] + # clear the session login + d = client.delete("/api/session", json={"sessionID": sess.json()['content']['sessionID']}) + assert d.status_code == 200 def test_user_course_post_failure(client: Client): ''' Test user course post with invalid parameter ''' - MISMATCH_TEST_USER_COURSE = { - "name": "AAAAAA", - "semester": "BBBB", - "cid": "9999" - } - s = client.post("/api/session", json=TEST_USER) - assert s.status_code == 200 - r = client.post("api/user/course", json=TEST_USER_COURSE) - assert r.status_code == 200 - data = r.json() - g = client.get("/api/user/course", json=MISMATCH_TEST_USER_COURSE) - get_data = g.json() - - assert data['content']['name'] != get_data['content']['name'] - assert data['content']['semester'] != get_data['content']['semester'] - assert data['content']['cid'] != get_data['content']['cid'] \ No newline at end of file + TEST_INVALID_USER_COURSE = {} + sess = client.post("/api/session", json=TEST_USER).json() + sessID = sess['content']['sessionID'] + # Test the post failure with invalid json + r = client.post("/api/user/course", json=TEST_INVALID_USER_COURSE) + assert r.status_code == 500 + # clear the session login + d = client.delete('/api/session', json={'sessionID': sessID}) + assert d.status_code == 200 From 65dff44d150e60d855e3bd48fbf14a2e29974733 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Wed, 16 Feb 2022 13:06:30 -0500 Subject: [PATCH 07/18] Clear comments for pr requirements --- src/api/tests/test_user_course.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index 3b08ddaf4..6816077d7 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -7,15 +7,17 @@ 'semester': 'SUMMER 2020', 'cid': '-1' } -# pytest -s tests/test_user_course.py + +''' +Test this api endpoint/file only with the following command line: +pytest -s tests/test_user_course.py +''' def test_user_course_post_success(post_user, client: Client): ''' - Test user course post by comparing it to user course get + Test user course post by comparing it to user get course ''' - # Test if user can login sess = client.post("/api/session", json=TEST_USER) assert sess.status_code == 200 - # Test if the user can post course r = client.post("/api/user/course", json=TEST_USER_COURSE) assert r.status_code == 200 g = client.get("/api/user/course", json=TEST_USER_COURSE) @@ -23,7 +25,6 @@ def test_user_course_post_success(post_user, client: Client): assert get_data['course_name'] == TEST_USER_COURSE['name'] assert get_data['semester'] == TEST_USER_COURSE['semester'] assert get_data['crn'] == TEST_USER_COURSE['cid'] - # clear the session login d = client.delete("/api/session", json={"sessionID": sess.json()['content']['sessionID']}) assert d.status_code == 200 def test_user_course_post_failure(client: Client): @@ -33,9 +34,7 @@ def test_user_course_post_failure(client: Client): TEST_INVALID_USER_COURSE = {} sess = client.post("/api/session", json=TEST_USER).json() sessID = sess['content']['sessionID'] - # Test the post failure with invalid json r = client.post("/api/user/course", json=TEST_INVALID_USER_COURSE) assert r.status_code == 500 - # clear the session login d = client.delete('/api/session', json={'sessionID': sessID}) assert d.status_code == 200 From 18a6fe5f0f6b82dacc295d0422cc69c4c5ce4e82 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Fri, 18 Feb 2022 16:26:23 -0500 Subject: [PATCH 08/18] Added not authorized test and followed pr requirements --- src/api/tests/test_user_course.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index 6816077d7..ebbd3395c 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -27,6 +27,7 @@ def test_user_course_post_success(post_user, client: Client): assert get_data['crn'] == TEST_USER_COURSE['cid'] d = client.delete("/api/session", json={"sessionID": sess.json()['content']['sessionID']}) assert d.status_code == 200 + def test_user_course_post_failure(client: Client): ''' Test user course post with invalid parameter @@ -38,3 +39,10 @@ def test_user_course_post_failure(client: Client): assert r.status_code == 500 d = client.delete('/api/session', json={'sessionID': sessID}) assert d.status_code == 200 + +def test_course_post_not_authorized(client: Client): + ''' + Test user course post without user session/login + ''' + r = client.post("/api/user/course", json=TEST_USER_COURSE) + assert r.status_code == 403 From 341b8cdbdfb5ce0bc3209d12e925dd4fa9e4303e Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Mon, 28 Feb 2022 12:22:11 -0500 Subject: [PATCH 09/18] Update endpoints step 1 --- src/api/app.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/api/app.py b/src/api/app.py index 74f543f72..8ed414ec3 100644 --- a/src/api/app.py +++ b/src/api/app.py @@ -247,19 +247,19 @@ def log_out(request: Request, session: SessionDeletePydantic): return response -# @app.route('/api/event', methods=['POST']) -# def add_user_event(): -# return event_controller.add_event(json.loads(request.data)) -# -# @app.route('/api/user/course', methods=['POST']) -# def add_student_course(): -# info = request.get_json() -# -# if 'user' not in session: -# return Response("Not authorized", status=403) -# -# resp, error = course_select.add_selection(info['name'], info['semester'], session['user']['user_id'], info['cid']) -# return Response(status=200) if not error else Response(error, status=500) +@app.post('/api/event') +def add_user_event(request: Request, credentials: SessionPydantic): + return event_controller.add_event(json.loads(request.data)) + +@app.post('/api/user/course') +async def add_student_course(request: Request, credentials: SessionPydantic): + info = request.get_json() + + if 'user' not in session: + return Response("Not authorized", status=403) + + resp, error = course_select.add_selection(info['name'], info['semester'], session['user']['user_id'], info['cid']) + return Response(status=200) if not error else Response(error, status=500) # # # @app.route('/api/user/course', methods=['DELETE']) From 4bfd579048b1b2daf5dd9208f40231b5aef2cc69 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Mon, 28 Feb 2022 15:21:43 -0500 Subject: [PATCH 10/18] Update in pydantic model --- src/api/api_models.py | 10 ++++++++++ src/api/app.py | 11 +++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/api/api_models.py b/src/api/api_models.py index 2b93dd7f6..f58320160 100644 --- a/src/api/api_models.py +++ b/src/api/api_models.py @@ -7,3 +7,13 @@ class SessionPydantic(BaseModel): class SessionDeletePydantic(BaseModel): sessionID: str +class EventPostPydantic(BaseModel): + pass + +class UserCoursePydantic(BaseModel): + email: str + password: str + name: str + user_id: int + cid: int + diff --git a/src/api/app.py b/src/api/app.py index 8ed414ec3..ce44ffcdc 100644 --- a/src/api/app.py +++ b/src/api/app.py @@ -249,15 +249,18 @@ def log_out(request: Request, session: SessionDeletePydantic): @app.post('/api/event') def add_user_event(request: Request, credentials: SessionPydantic): - return event_controller.add_event(json.loads(request.data)) + return Response("Not Implemented", status=501) + #return event_controller.add_event(json.loads(request.data)) @app.post('/api/user/course') async def add_student_course(request: Request, credentials: SessionPydantic): info = request.get_json() - - if 'user' not in session: + session_res = session_controller.add_session(credentials.dict()) + if (session_res['success']): + session = session_res['content'] + # [0] b/c conn.exec uses fetchall() which wraps result in list + if 'user' not in request.session: return Response("Not authorized", status=403) - resp, error = course_select.add_selection(info['name'], info['semester'], session['user']['user_id'], info['cid']) return Response(status=200) if not error else Response(error, status=500) # From af8eee506d510c6bc924bf4bb6d01eff0dc69c68 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Mon, 28 Feb 2022 15:22:58 -0500 Subject: [PATCH 11/18] Status to Status_code --- src/api/app.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/app.py b/src/api/app.py index ce44ffcdc..a9b628963 100644 --- a/src/api/app.py +++ b/src/api/app.py @@ -249,7 +249,7 @@ def log_out(request: Request, session: SessionDeletePydantic): @app.post('/api/event') def add_user_event(request: Request, credentials: SessionPydantic): - return Response("Not Implemented", status=501) + return Response("Not Implemented", status_code=501) #return event_controller.add_event(json.loads(request.data)) @app.post('/api/user/course') @@ -260,9 +260,9 @@ async def add_student_course(request: Request, credentials: SessionPydantic): session = session_res['content'] # [0] b/c conn.exec uses fetchall() which wraps result in list if 'user' not in request.session: - return Response("Not authorized", status=403) + return Response("Not authorized", status_code=403) resp, error = course_select.add_selection(info['name'], info['semester'], session['user']['user_id'], info['cid']) - return Response(status=200) if not error else Response(error, status=500) + return Response(status_code=200) if not error else Response(error, status_code=500) # # # @app.route('/api/user/course', methods=['DELETE']) From f07f0f13e66f51416583118a025ebc07b0bca7fd Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Tue, 1 Mar 2022 16:59:37 -0500 Subject: [PATCH 12/18] Change api naming conversion to FastAPI --- src/api/api_models.py | 4 +--- src/api/app.py | 11 +++-------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/api/api_models.py b/src/api/api_models.py index f58320160..f3fc89389 100644 --- a/src/api/api_models.py +++ b/src/api/api_models.py @@ -7,13 +7,11 @@ class SessionPydantic(BaseModel): class SessionDeletePydantic(BaseModel): sessionID: str -class EventPostPydantic(BaseModel): - pass - class UserCoursePydantic(BaseModel): email: str password: str name: str + semester: str user_id: int cid: int diff --git a/src/api/app.py b/src/api/app.py index a9b628963..c379c4a19 100644 --- a/src/api/app.py +++ b/src/api/app.py @@ -249,19 +249,14 @@ def log_out(request: Request, session: SessionDeletePydantic): @app.post('/api/event') def add_user_event(request: Request, credentials: SessionPydantic): - return Response("Not Implemented", status_code=501) + return Response(status_code=501) #return event_controller.add_event(json.loads(request.data)) @app.post('/api/user/course') -async def add_student_course(request: Request, credentials: SessionPydantic): - info = request.get_json() - session_res = session_controller.add_session(credentials.dict()) - if (session_res['success']): - session = session_res['content'] - # [0] b/c conn.exec uses fetchall() which wraps result in list +async def add_student_course(request: Request, credentials: UserCoursePydantic): if 'user' not in request.session: return Response("Not authorized", status_code=403) - resp, error = course_select.add_selection(info['name'], info['semester'], session['user']['user_id'], info['cid']) + resp, error = course_select.add_selection(credentials.name, credentials.semester, request.session['user']['user_id'], credentials.cid) return Response(status_code=200) if not error else Response(error, status_code=500) # # From 335e4c8fcc934adbe6972c97a2a0af4b8e28744d Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Tue, 1 Mar 2022 17:24:22 -0500 Subject: [PATCH 13/18] Debugging pytest --- src/api/app.py | 18 +++++++++++++----- src/api/pytest.ini | 4 +--- src/api/tests/test_user_course.py | 13 +++++++++---- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/api/app.py b/src/api/app.py index c379c4a19..e2a527e9a 100644 --- a/src/api/app.py +++ b/src/api/app.py @@ -206,11 +206,19 @@ async def uploadHandler( # # return user_controller.get_user_info(session_id) # -# -# @app.route('/api/user', methods=['POST']) -# def add_user(): -# return user_controller.add_user(request.json) -# + +class userinput(BaseModel): + email: str + phone: str + password: str + name: str + + +@app.route('/api/user', methods=['POST']) +def add_user(request: Request, user: userinput): + print(request.json()) + return user_controller.add_user(request.json) + # @app.route('/api/user', methods=['DELETE']) # def delete_user(): # if 'user' not in session: diff --git a/src/api/pytest.ini b/src/api/pytest.ini index d25552b0c..4c61731e5 100644 --- a/src/api/pytest.ini +++ b/src/api/pytest.ini @@ -6,6 +6,4 @@ markers = testclient: tests updated to use the FastAPI TestClient object incompletedependency: marks tests that depend on an api that has not yet been completed testpaths = - tests/test_root.py - tests/test_session.py - tests/test_bulk_upload.py + tests/ diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index ebbd3395c..92af851ce 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -1,4 +1,5 @@ -from .util import Client +from fastapi.testclient import TestClient +import pytest TEST_USER = { 'email': 'test@email.com', 'password': '123456' } @@ -12,7 +13,9 @@ Test this api endpoint/file only with the following command line: pytest -s tests/test_user_course.py ''' -def test_user_course_post_success(post_user, client: Client): +@pytest.mark.testclient +@pytest.mark.incompletedependency +def test_user_course_post_success(post_user, client: TestClient): ''' Test user course post by comparing it to user get course ''' @@ -28,7 +31,8 @@ def test_user_course_post_success(post_user, client: Client): d = client.delete("/api/session", json={"sessionID": sess.json()['content']['sessionID']}) assert d.status_code == 200 -def test_user_course_post_failure(client: Client): +@pytest.mark.testclient +def test_user_course_post_failure(client: TestClient): ''' Test user course post with invalid parameter ''' @@ -40,7 +44,8 @@ def test_user_course_post_failure(client: Client): d = client.delete('/api/session', json={'sessionID': sessID}) assert d.status_code == 200 -def test_course_post_not_authorized(client: Client): +@pytest.mark.testclient +def test_course_post_not_authorized(client: TestClient): ''' Test user course post without user session/login ''' From 19a3946c4516ae259add0bafa93027cacbd1eec1 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Fri, 4 Mar 2022 17:13:46 -0500 Subject: [PATCH 14/18] Fixed Post success and post failure pytest method --- src/api/tests/test.sh | 2 +- src/api/tests/test_user_course.py | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/api/tests/test.sh b/src/api/tests/test.sh index b7da99368..45efdc6d6 100755 --- a/src/api/tests/test.sh +++ b/src/api/tests/test.sh @@ -11,4 +11,4 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) export TEST_APP_DIR=$SCRIPT_DIR/../ # pip install -r $TEST_APP_DIR/requirements.txt -pytest -s -m "testclient and not incompletedependency" $SCRIPT_DIR \ No newline at end of file +pytest -s -m "testclient and not incompletedependency" "${SCRIPT_DIR}" \ No newline at end of file diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index 92af851ce..b5dd7d10b 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -10,8 +10,8 @@ } ''' -Test this api endpoint/file only with the following command line: -pytest -s tests/test_user_course.py +Test this api endpoint/file locally with the following command line: +src/api/tests/test.sh ''' @pytest.mark.testclient @pytest.mark.incompletedependency @@ -32,12 +32,14 @@ def test_user_course_post_success(post_user, client: TestClient): assert d.status_code == 200 @pytest.mark.testclient -def test_user_course_post_failure(client: TestClient): +@pytest.mark.incompletedependency +def test_user_course_post_failure(post_user, client: TestClient): ''' Test user course post with invalid parameter ''' TEST_INVALID_USER_COURSE = {} sess = client.post("/api/session", json=TEST_USER).json() + print("sess info : \n", sess) sessID = sess['content']['sessionID'] r = client.post("/api/user/course", json=TEST_INVALID_USER_COURSE) assert r.status_code == 500 @@ -50,4 +52,5 @@ def test_course_post_not_authorized(client: TestClient): Test user course post without user session/login ''' r = client.post("/api/user/course", json=TEST_USER_COURSE) + print(r.text) assert r.status_code == 403 From b9f5572184d755992f958a0c05a08e513fddf095 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Fri, 4 Mar 2022 17:14:50 -0500 Subject: [PATCH 15/18] Change api_model datatype to str --- src/api/api_models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/api_models.py b/src/api/api_models.py index f3fc89389..b708fef31 100644 --- a/src/api/api_models.py +++ b/src/api/api_models.py @@ -12,6 +12,6 @@ class UserCoursePydantic(BaseModel): password: str name: str semester: str - user_id: int - cid: int + user_id: str + cid: str From c7dd3e5f1514c28c7757e67b5f888929fdb7f2f3 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Thu, 24 Mar 2022 16:56:46 -0400 Subject: [PATCH 16/18] newest update --- src/api/api_models.py | 4 ++-- src/api/tests/test_user_course.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/api/api_models.py b/src/api/api_models.py index b708fef31..4af4079c3 100644 --- a/src/api/api_models.py +++ b/src/api/api_models.py @@ -8,8 +8,8 @@ class SessionDeletePydantic(BaseModel): sessionID: str class UserCoursePydantic(BaseModel): - email: str - password: str + # email: str + # password: str name: str semester: str user_id: str diff --git a/src/api/tests/test_user_course.py b/src/api/tests/test_user_course.py index b5dd7d10b..a7d7c1c17 100644 --- a/src/api/tests/test_user_course.py +++ b/src/api/tests/test_user_course.py @@ -39,7 +39,6 @@ def test_user_course_post_failure(post_user, client: TestClient): ''' TEST_INVALID_USER_COURSE = {} sess = client.post("/api/session", json=TEST_USER).json() - print("sess info : \n", sess) sessID = sess['content']['sessionID'] r = client.post("/api/user/course", json=TEST_INVALID_USER_COURSE) assert r.status_code == 500 @@ -47,10 +46,14 @@ def test_user_course_post_failure(post_user, client: TestClient): assert d.status_code == 200 @pytest.mark.testclient +#@pytest.mark.incompletedependency def test_course_post_not_authorized(client: TestClient): ''' Test user course post without user session/login ''' r = client.post("/api/user/course", json=TEST_USER_COURSE) print(r.text) - assert r.status_code == 403 + assert r.status_code == 403 #422? + # data = r.json() + # assert data['content']['sessionID'] is not None + From 2d7620e56105613f7afad719a2bd5917d59475ba Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Fri, 25 Mar 2022 16:20:49 -0400 Subject: [PATCH 17/18] Fixed the 422 Issue by removing user_id parameter --- src/api/api_models.py | 3 --- src/api/app.py | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/api/api_models.py b/src/api/api_models.py index 333cefedc..907cd5ed7 100644 --- a/src/api/api_models.py +++ b/src/api/api_models.py @@ -9,10 +9,7 @@ class SessionDeletePydantic(BaseModel): sessionID: str class UserCoursePydantic(BaseModel): - # email: str - # password: str name: str semester: str - user_id: str cid: str diff --git a/src/api/app.py b/src/api/app.py index 0912c340d..0faeca1e0 100644 --- a/src/api/app.py +++ b/src/api/app.py @@ -263,7 +263,7 @@ def add_user_event(request: Request, credentials: SessionPydantic): async def add_student_course(request: Request, credentials: UserCoursePydantic): if 'user' not in request.session: return Response("Not authorized", status_code=403) - resp, error = course_select.add_selection(credentials.name, credentials.semester, request.session['user']['user_id'], credentials.cid) + resp, error = course_select.add_selection(credentials.name, credentials.semester, credentials.cid) return Response(status_code=200) if not error else Response(error, status_code=500) # # From b52ab0b05cc93873df1bbd7a14ebdd644c87b3f3 Mon Sep 17 00:00:00 2001 From: YuetingLiao <46305076+YuetingLiao@users.noreply.github.com> Date: Fri, 25 Mar 2022 17:39:31 -0400 Subject: [PATCH 18/18] Undo some changes --- src/api/app.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/api/app.py b/src/api/app.py index 2562cfbae..4a9e3e187 100644 --- a/src/api/app.py +++ b/src/api/app.py @@ -205,19 +205,11 @@ async def uploadHandler( # # return user_controller.get_user_info(session_id) # - -class userinput(BaseModel): - email: str - phone: str - password: str - name: str - - -@app.route('/api/user', methods=['POST']) -def add_user(request: Request, user: userinput): - print(request.json()) - return user_controller.add_user(request.json) - +# +# @app.route('/api/user', methods=['POST']) +# def add_user(): +# return user_controller.add_user(request.json) +# # @app.route('/api/user', methods=['DELETE']) # def delete_user(): # if 'user' not in session: