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": { "dependencies": {
"asdf": "~>0.7", "asdf": "~>0.7",
"dxml": "~>0.4", "dxml": "~>0.4",
"handy-http-primitives": "~>1.4" "handy-http-primitives": "~>1.6"
}, },
"description": "Support for common data formats and database operations.", "description": "Support for common data formats and database operations.",
"license": "CC0", "license": "CC0",

View File

@ -3,10 +3,10 @@
"versions": { "versions": {
"asdf": "0.7.17", "asdf": "0.7.17",
"dxml": "0.4.4", "dxml": "0.4.4",
"handy-http-primitives": "1.4.0", "handy-http-primitives": "1.6.0",
"mir-algorithm": "3.22.3", "mir-algorithm": "3.22.3",
"mir-core": "1.7.1", "mir-core": "1.7.1",
"silly": "1.1.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 * 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 * 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); StreamResult result = response.outputStream.writeToStream(cast(ubyte[]) responseBody);
if (result.hasError) { if (result.hasError) {
StreamError err = result.error; 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) { } catch (SerdeException e) {
throw new HttpStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.msg, 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\"}");
}