diff --git a/force-app/main/default/classes/libak_RestRouter.cls b/force-app/main/default/classes/libak_RestRouter.cls index 15aeffc..b1238e0 100644 --- a/force-app/main/default/classes/libak_RestRouter.cls +++ b/force-app/main/default/classes/libak_RestRouter.cls @@ -54,6 +54,6 @@ public abstract class libak_RestRouter { .replaceAll('\\*', '\\.+') .replaceAll('\\:(.+?)/', '\\.+/') .replaceAll('\\:(.+?)$', '\\.+'); - return Pattern.matches('(?i)' + routeTemplateRegEx, requestURI); + return Pattern.matches('(?i)' + routeTemplateRegEx, requestURI.replaceAll('(\\/+)$', '')); } } \ No newline at end of file diff --git a/force-app/main/default/classes/tests/libak_TestRestFramework.cls b/force-app/main/default/classes/tests/libak_TestRestFramework.cls index dd4bf1b..ce49c79 100644 --- a/force-app/main/default/classes/tests/libak_TestRestFramework.cls +++ b/force-app/main/default/classes/tests/libak_TestRestFramework.cls @@ -1,7 +1,8 @@ @IsTest public with sharing class libak_TestRestFramework { - public static final String URI_TEMPLATE = '/testRestFramework/:uriParam'; + public static final String URI_TEMPLATE_WITH_PARAMS = '/testRestFramework/:uriParam'; + public static final String URI_TEMPLATE_WITHOUT_PARAMS = '/testRestFramework'; @IsTest static void testHandleRequestPositive(){ @@ -23,6 +24,46 @@ public with sharing class libak_TestRestFramework { ); } + @IsTest + static void testHandleRequestWithoutParamsPositive(){ + RestRequest request = new RestRequest(); + request.requestURI = '/testRestFramework'; + RestContext.request = request; + RestContext.response = new RestResponse(); + + Test.startTest(); + + libak_RestFramework.handleRequest(RestRouterInstance.class); + + Test.stopTest(); + + System.assertEquals( + libak_RestFramework.HTTP_CODE_METHOD_NOT_ALLOWED, + RestContext.response.statusCode, + 'The status code of response should be 405' + ); + } + + @IsTest + static void testHandleRequestWithoutParamsWithSlashAtTheEnd(){ + RestRequest request = new RestRequest(); + request.requestURI = '/testRestFramework/'; + RestContext.request = request; + RestContext.response = new RestResponse(); + + Test.startTest(); + + libak_RestFramework.handleRequest(RestRouterInstance.class); + + Test.stopTest(); + + System.assertEquals( + libak_RestFramework.HTTP_CODE_METHOD_NOT_ALLOWED, + RestContext.response.statusCode, + 'The status code of response should be 405' + ); + } + @IsTest static void testHandleRequestWrongRouter(){ RestRequest request = new RestRequest(); @@ -56,7 +97,8 @@ public with sharing class libak_TestRestFramework { private class RestRouterInstance extends libak_RestRouter { override public libak_RestRouter setRoutes() { this.routeToRestProcessorType = new Map{ - URI_TEMPLATE => libak_RestProcessor.class + URI_TEMPLATE_WITH_PARAMS => libak_RestProcessor.class, + URI_TEMPLATE_WITHOUT_PARAMS => libak_RestProcessor.class }; return this; }