Added tests, increased primitives version.

This commit is contained in:
Andrew Lalis 2025-05-22 18:59:38 -04:00
parent 5f412ad55c
commit 98d379925e
4 changed files with 35 additions and 6 deletions

View File

@ -1,3 +1,3 @@
# data
# Handy-Http Data
Support for common data formats and database operations.
Support for common data formats and database operations.

View File

@ -6,7 +6,7 @@
"dependencies": {
"asdf": "~>0.7",
"dxml": "~>0.4",
"handy-http-primitives": "~>1.4"
"handy-http-primitives": "~>1.6"
},
"description": "Support for common data formats and database operations.",
"license": "CC0",

View File

@ -3,10 +3,10 @@
"versions": {
"asdf": "0.7.17",
"dxml": "0.4.4",
"handy-http-primitives": "1.4.0",
"handy-http-primitives": "1.6.0",
"mir-algorithm": "3.22.3",
"mir-core": "1.7.1",
"silly": "1.1.1",
"streams": "3.5.0"
"streams": "3.6.0"
}
}

View File

@ -26,6 +26,19 @@ T readJsonBodyAs(T)(ref ServerHttpRequest request) {
}
}
unittest {
import handy_http_primitives.builder;
ServerHttpRequest request = ServerHttpRequestBuilder()
.withBody("{\"key\": \"value\"}")
.withHeader("Content-Length", "16")
.build();
struct TestStruct {
string key;
}
TestStruct testStruct = readJsonBodyAs!TestStruct(request);
assert(testStruct.key == "value");
}
/**
* Writes a JSON value to the body of the given HTTP response, serializing it
* using the ASDF library. Will also set Content-Type and Content-Length
@ -57,9 +70,25 @@ void writeJsonBody(T)(ref ServerHttpResponse response, in T bodyContent) {
StreamResult result = response.outputStream.writeToStream(cast(ubyte[]) responseBody);
if (result.hasError) {
StreamError err = result.error;
throw new HttpStatusException(HttpStatus.INTERNAL_SERVER_ERROR, err.message);
throw new HttpStatusException(HttpStatus.INTERNAL_SERVER_ERROR, cast(string) err.message);
}
} catch (SerdeException e) {
throw new HttpStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.msg, e);
}
}
unittest {
import handy_http_primitives.builder;
ArrayOutputStream!ubyte outputStream = byteArrayOutputStream();
ServerHttpResponse response = ServerHttpResponseBuilder()
.withOutputStream(&outputStream)
.build();
struct TestStruct {
string key;
}
TestStruct testStruct = TestStruct("value");
writeJsonBody(response, testStruct);
assert(response.headers["Content-Type"] == "application/json");
const writtenBody = cast(string) outputStream.toArrayRaw();
assert(writtenBody == "{\"key\":\"value\"}");
}