Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org)

<!-- Pytest Coverage Comment:Begin -->
<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/README.md"><img alt="Coverage" src="https://img.shields.io/badge/Coverage-55%25-orange.svg" /></a><details><summary>Coverage Report </summary><table><tr><th>File</th><th>Stmts</th><th>Miss</th><th>Cover</th><th>Missing</th></tr><tbody><tr><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py">app.py</a></td><td>104</td><td>46</td><td>56%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L40-L41">40&ndash;41</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L48-L56">48&ndash;56</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L61-L91">61&ndash;91</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L98">98</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L102">102</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L107">107</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L111">111</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L122">122</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L127">127</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L129">129</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L134">134</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L138">138</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L147-L161">147&ndash;161</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L165">165</a></td></tr><tr><td colspan="5"><b>modules</b></td></tr><tr><td>&nbsp; &nbsp;<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/evaluator.py">evaluator.py</a></td><td>56</td><td>14</td><td>75%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/evaluator.py#L96-L97">96&ndash;97</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/evaluator.py#L104-L122">104&ndash;122</a></td></tr><tr><td>&nbsp; &nbsp;<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/langgraph_qa.py">langgraph_qa.py</a></td><td>19</td><td>18</td><td>5%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/langgraph_qa.py#L2-L33">2&ndash;33</a></td></tr><tr><td>&nbsp; &nbsp;<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/parser.py">parser.py</a></td><td>12</td><td>1</td><td>92%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/parser.py#L20">20</a></td></tr><tr><td>&nbsp; &nbsp;<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/upload.py">upload.py</a></td><td>25</td><td>19</td><td>24%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/upload.py#L16-L54">16&ndash;54</a></td></tr><tr><td><b>TOTAL</b></td><td><b>216</b></td><td><b>98</b></td><td><b>55%</b></td><td>&nbsp;</td></tr></tbody></table></details>
<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/README.md"><img alt="Coverage" src="https://img.shields.io/badge/Coverage-62%25-yellow.svg" /></a><details><summary>Coverage Report </summary><table><tr><th>File</th><th>Stmts</th><th>Miss</th><th>Cover</th><th>Missing</th></tr><tbody><tr><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py">app.py</a></td><td>104</td><td>46</td><td>56%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L40-L41">40&ndash;41</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L48-L55">48&ndash;55</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L60-L90">60&ndash;90</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L97">97</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L101">101</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L106">106</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L110">110</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L121">121</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L126">126</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L128">128</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L133">133</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L137">137</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L146-L160">146&ndash;160</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/app.py#L164">164</a></td></tr><tr><td colspan="5"><b>modules</b></td></tr><tr><td>&nbsp; &nbsp;<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/evaluator.py">evaluator.py</a></td><td>56</td><td>14</td><td>75%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/evaluator.py#L96-L97">96&ndash;97</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/evaluator.py#L104-L122">104&ndash;122</a></td></tr><tr><td>&nbsp; &nbsp;<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/langgraph_qa.py">langgraph_qa.py</a></td><td>19</td><td>18</td><td>5%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/langgraph_qa.py#L2-L33">2&ndash;33</a></td></tr><tr><td>&nbsp; &nbsp;<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/parser.py">parser.py</a></td><td>12</td><td>1</td><td>92%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/parser.py#L20">20</a></td></tr><tr><td>&nbsp; &nbsp;<a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/upload.py">upload.py</a></td><td>25</td><td>3</td><td>88%</td><td><a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/upload.py#L23">23</a>, <a href="https://github.com/BUMETCS673/seprojects-cs673a2f24_team5/blob/main/modules/upload.py#L46-L47">46&ndash;47</a></td></tr><tr><td><b>TOTAL</b></td><td><b>216</b></td><td><b>82</b></td><td><b>62%</b></td><td>&nbsp;</td></tr></tbody></table></details>
<!-- Pytest Coverage Comment:End -->

<p>
Expand Down
1 change: 0 additions & 1 deletion be_repo/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ def upload_resume():
user_id = request.form.get('user_id')
if not user_id:
return jsonify({"error": "No user ID provided."}), 400
# Vector the resume text
return upload_parse_resume(request, resume_collection, user_state_collection)


Expand Down
27 changes: 24 additions & 3 deletions be_repo/tests/test_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,19 @@ def test_upload_parse_resume_success(mock_parse_resume, app):
mock_request.form = {'user_id': '123'}

mock_resume_collection = MagicMock()
mock_user_state_collection = MagicMock()

with app.app_context(): # Set up the application context
response = upload_parse_resume(mock_request, mock_resume_collection)
response = upload_parse_resume(
mock_request,
mock_resume_collection,
mock_user_state_collection
)

assert response[1] == 200
assert response[0].json['message'] == "File successfully uploaded and parsed"
mock_resume_collection.replace_one.assert_called_once()
mock_user_state_collection.replace_one.assert_called_once()


@patch('modules.upload.parse_resume', return_value="Parsed resume text")
Expand All @@ -53,12 +60,19 @@ def test_upload_parse_resume_invalid_format(mock_parse_resume, app):
mock_request.form = {'user_id': '123'}

mock_resume_collection = MagicMock()
mock_user_state_collection = MagicMock()

with app.app_context():
response = upload_parse_resume(mock_request, mock_resume_collection)
response = upload_parse_resume(
mock_request,
mock_resume_collection,
mock_user_state_collection
)

assert response[1] == 400
assert response[0].json['error'] == "Invalid file format, only PDF is allowed"
mock_resume_collection.replace_one.assert_not_called()
mock_user_state_collection.replace_one.assert_not_called()


@patch('modules.upload.parse_resume', return_value="Parsed resume text")
Expand All @@ -68,9 +82,16 @@ def test_upload_parse_resume_no_file(mock_parse_resume, app):
mock_request.form = {'user_id': '123'}

mock_resume_collection = MagicMock()
mock_user_state_collection = MagicMock()

with app.app_context():
response = upload_parse_resume(mock_request, mock_resume_collection)
response = upload_parse_resume(
mock_request,
mock_resume_collection,
mock_user_state_collection
)

assert response[1] == 400
assert response[0].json['error'] == "No file part in the request"
mock_resume_collection.replace_one.assert_not_called()
mock_user_state_collection.replace_one.assert_not_called()