Fix test (good catch - 200 for GET /api/, and 404 for bad version doc pages)

This commit is contained in:
2023-03-30 11:53:11 -05:00
parent 944a93bd99
commit f6f2cb7070
4 changed files with 55 additions and 2 deletions

View File

@ -104,6 +104,10 @@ public class GenerateOpenApiSpecAction extends AbstractQActionFunction<GenerateO
QInstance qInstance = QContext.getQInstance(); QInstance qInstance = QContext.getQInstance();
ApiInstanceMetaData apiInstanceMetaData = ApiInstanceMetaData.of(qInstance); ApiInstanceMetaData apiInstanceMetaData = ApiInstanceMetaData.of(qInstance);
if(!apiInstanceMetaData.getSupportedVersions().contains(new APIVersion(version)))
{
throw (new QException("[" + version + "] is not a supported API Version."));
}
OpenAPI openAPI = new OpenAPI() OpenAPI openAPI = new OpenAPI()
.withVersion("3.0.3") .withVersion("3.0.3")

View File

@ -482,6 +482,12 @@ public class QJavalinApiHandler
QBrandingMetaData branding = qInstance.getBranding(); QBrandingMetaData branding = qInstance.getBranding();
ApiInstanceMetaData apiInstanceMetaData = ApiInstanceMetaData.of(qInstance); ApiInstanceMetaData apiInstanceMetaData = ApiInstanceMetaData.of(qInstance);
if(!apiInstanceMetaData.getSupportedVersions().contains(new APIVersion(version)))
{
doPathNotFound(context);
return;
}
////////////////////////////////// //////////////////////////////////
// read html from resource file // // read html from resource file //
////////////////////////////////// //////////////////////////////////
@ -1634,6 +1640,24 @@ public class QJavalinApiHandler
public static void respondWithError(Context context, HttpStatus.Code statusCode, String errorMessage) public static void respondWithError(Context context, HttpStatus.Code statusCode, String errorMessage)
{ {
context.status(statusCode.getCode()); context.status(statusCode.getCode());
try
{
String accept = context.header("accept");
if(accept != null && accept.toLowerCase().startsWith(ContentType.HTML))
{
context.contentType(ContentType.HTML);
context.result("Error: " + errorMessage);
return;
}
}
catch(Exception e)
{
///////////////////////////
// just do default thing //
///////////////////////////
}
context.result(JsonUtils.toJson(Map.of("error", errorMessage))); context.result(JsonUtils.toJson(Map.of("error", errorMessage)));
} }

View File

@ -36,6 +36,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability; import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
@ -158,4 +159,17 @@ class GenerateOpenApiSpecActionTest extends BaseTest
assertTrue(apiPaths.stream().noneMatch(s -> s.contains("/internalName/"))); assertTrue(apiPaths.stream().noneMatch(s -> s.contains("/internalName/")));
} }
/*******************************************************************************
**
*******************************************************************************/
@Test
void testBadVersion()
{
assertThatThrownBy(() -> new GenerateOpenApiSpecAction().execute(new GenerateOpenApiSpecInput().withVersion("NotAVersion")))
.isInstanceOf(QException.class)
.hasMessageContaining("not a supported API Version");
}
} }

View File

@ -147,9 +147,20 @@ class QJavalinApiHandlerTest extends BaseTest
{ {
assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/" + VERSION + "/notATable/").asString()); assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/" + VERSION + "/notATable/").asString());
assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/" + VERSION + "/notATable/notAnId").asString()); assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/" + VERSION + "/notATable/notAnId").asString());
assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/").asString());
assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/foo").asString());
assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/" + VERSION + "/person/1/2").asString()); assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/" + VERSION + "/person/1/2").asString());
assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/foo").asString());
if(method.equals("get"))
{
//////////////////////////////////////////////
// this path returns the doc site for a GET //
//////////////////////////////////////////////
assertErrorResponse(HttpStatus.OK_200, null, Unirest.request(method, BASE_URL + "/api/").asString());
}
else
{
assertErrorResponse(HttpStatus.NOT_FOUND_404, "Could not find any resources at path", Unirest.request(method, BASE_URL + "/api/").asString());
}
} }
} }