diff --git a/tests/test_router.py b/tests/test_router.py new file mode 100644 index 0000000..fb18b9b --- /dev/null +++ b/tests/test_router.py @@ -0,0 +1,83 @@ +import pytest +from src.core.router import Router +from src.models.endpoint import Endpoint + + +class TestRouter: + def setup_method(self): + self.router = Router() + + def test_add_route_simple(self): + endpoint = Endpoint( + path="/api/users", + method="GET", + response={"status_code": 200, "body": {"users": []}} + ) + self.router.add_route(endpoint) + routes = self.router.get_all_routes() + assert len(routes) == 1 + assert routes[0].path == "/api/users" + + def test_match_simple_path(self): + endpoint = Endpoint( + path="/api/hello", + method="GET", + response={"status_code": 200, "body": {"message": "Hello"}} + ) + self.router.add_route(endpoint) + result = self.router.match("/api/hello", "GET") + assert result is not None + endpoint_result, params = result + assert endpoint_result.path == "/api/hello" + assert params == {} + + def test_match_with_path_params(self): + endpoint = Endpoint( + path="/api/users/{id}", + method="GET", + response={"status_code": 200, "body": {}} + ) + self.router.add_route(endpoint) + result = self.router.match("/api/users/123", "GET") + assert result is not None + endpoint_result, params = result + assert params["id"] == "123" + + def test_match_method_mismatch(self): + endpoint = Endpoint( + path="/api/users", + method="GET", + response={"status_code": 200, "body": {}} + ) + self.router.add_route(endpoint) + result = self.router.match("/api/users", "POST") + assert result is None + + def test_match_nonexistent_path(self): + result = self.router.match("/api/nonexistent", "GET") + assert result is None + + def test_clear_routes(self): + endpoint = Endpoint( + path="/api/test", + method="GET", + response={"status_code": 200, "body": {}} + ) + self.router.add_route(endpoint) + self.router.clear() + routes = self.router.get_all_routes() + assert len(routes) == 0 + + def test_multiple_routes(self): + endpoints = [ + Endpoint(path="/api/users", method="GET", response={}), + Endpoint(path="/api/users/{id}", method="GET", response={}), + Endpoint(path="/api/posts", method="POST", response={}), + ] + for ep in endpoints: + self.router.add_route(ep) + assert len(self.router.get_all_routes()) == 3 + assert self.router.match("/api/users", "GET") is not None + assert self.router.match("/api/users/123", "GET") is not None + assert self.router.match("/api/posts", "POST") is not None + assert self.router.match("/api/posts", "GET") is None