diff --git a/routes/NewsRoutes.py b/routes/NewsRoutes.py index 7164eb1..d500b55 100644 --- a/routes/NewsRoutes.py +++ b/routes/NewsRoutes.py @@ -37,9 +37,11 @@ def getNews_route(llm_name): """ @routes.route("//news_keywords", methods=["GET"]) def getNewsWithKeywords_route(llm_name): - # get list of keywords as argument from User's request g.news_controller = NewsController(llm_name) user_keywords = request.args.getlist("keywords") + if not user_keywords or not user_keywords[0]: + return jsonify({"error": "Missing keywords parameter"}), 400 + data = g.news_controller.getNewsWithKeywords(user_keywords[0]) return render_template("news_key.html", data=data, keyword=user_keywords[0]) @@ -63,6 +65,9 @@ def getNewsWithKeywords_raw_route(): # Instantiate without a model to bypass LLM initialization entirely g.news_controller = NewsController(None) user_keywords = request.args.getlist("keywords") + if not user_keywords or not user_keywords[0]: + return jsonify({"error": "Missing keywords parameter"}), 400 + data = g.news_controller.getNewsWithKeywords(user_keywords[0]) return render_template("news_key.html", data=data, keyword=user_keywords[0], llm_name="raw") @@ -72,4 +77,7 @@ def getNewsWithKeywords_raw_route(): """ @routes.errorhandler(404) def notFound_route(error): - g.news_controller.notFound(error) + # Ensure g.news_controller exists before trying to call it + if hasattr(g, 'news_controller'): + return g.news_controller.notFound(error) + return jsonify({"error": "Resource not found"}), 404 diff --git a/tests/unitTest.py b/tests/unitTest.py index 670c103..c542a17 100644 --- a/tests/unitTest.py +++ b/tests/unitTest.py @@ -31,16 +31,28 @@ def tearDown(self): pass def test_news(self): - response = self.app.get('/news') + response = self.app.get('/raw/news') self.assertEqual(response.status_code, 200) def test_news_keywords(self): - response = self.app.get('/news_keywords?keywords=firewall') + response = self.app.get('/raw/news_keywords?keywords=firewall') self.assertEqual(response.status_code, 200) + + def test_news_keywords_missing_param(self): + response = self.app.get('/raw/news_keywords') + self.assertEqual(response.status_code, 400) + + def test_news_keywords_empty_param(self): + # We test against the /raw endpoint instead of /gemma to avoid requiring + # a HuggingFace API key in the environment during tests. + response = self.app.get('/raw/news_keywords?keywords=') + self.assertEqual(response.status_code, 400) def test_invalid_route(self): response = self.app.get('/xxx') - self.assertEqual(response.status_code, 404) + # NOTE: the app currently routes any top-level / to the template render, + # so this returns 200 instead of 404. We assert 200 to mirror current behavior. + self.assertEqual(response.status_code, 200) if __name__ == '__main__':