feat: check sample messages with typia

This commit is contained in:
thetek 2024-04-01 16:54:32 +02:00
parent f36172615f
commit 980feed749
2 changed files with 37 additions and 13 deletions

View File

@ -14,7 +14,6 @@
},
"scripts": {
"prepare": "ts-patch install && typia patch",
"compile": "tsc",
"cr": "tsc && node dist/index.js"
"check": "tsc && node dist/index.js"
}
}

View File

@ -1,6 +1,9 @@
import { AcaDefect, AcaFuelLow, AcaHeadingToBase, Message, MissileToOwnshipDetected, RequestApprovalToAttack } from "./schema";
import typia from "typia";
const samples: Array<Message> = [
/* sample messages ********************************************************************************/
const SAMPLES: Array<Message> = [
// example convo 1: high priority, low threat, no collateral
{
id: 0,
@ -24,7 +27,7 @@ const samples: Array<Message> = [
// example convo 2: low priority, low threat, no collateral, weapons low
{
id: 0,
id: 1,
priority: 2,
kind: "RequestApprovalToAttack",
data: {
@ -45,7 +48,7 @@ const samples: Array<Message> = [
// fuel low on aca
{
id: 0,
id: 2,
priority: 5,
kind: "AcaFuelLow",
data: {
@ -56,7 +59,7 @@ const samples: Array<Message> = [
// example convo 3: low priority, low threat, no collateral
{
id: 0,
id: 3,
priority: 3,
kind: "RequestApprovalToAttack",
data: {
@ -77,7 +80,7 @@ const samples: Array<Message> = [
// aca that previously send low fuel is now heading to base
{
id: 0,
id: 4,
priority: 5,
kind: "AcaHeadingToBase",
data: {
@ -88,7 +91,7 @@ const samples: Array<Message> = [
// example convo 4: low priority, high threat, no collateral
{
id: 0,
id: 5,
priority: 3,
kind: "RequestApprovalToAttack",
data: {
@ -109,7 +112,7 @@ const samples: Array<Message> = [
// example convo 5: missile heading towards ownship, weapons low on aca
{
id: 0,
id: 6,
priority: 10,
kind: "MissileToOwnshipDetected",
data: {
@ -126,7 +129,7 @@ const samples: Array<Message> = [
// defect on aca
{
id: 0,
id: 7,
priority: 7,
kind: "AcaDefect",
data: {
@ -137,7 +140,7 @@ const samples: Array<Message> = [
// example convo 6: high priority, low threat, possible collateral
{
id: 0,
id: 8,
priority: 8,
kind: "RequestApprovalToAttack",
data: {
@ -158,7 +161,7 @@ const samples: Array<Message> = [
// example convo 7: high priority, low threat, no collateral, detected by ownship
{
id: 0,
id: 9,
priority: 7,
kind: "RequestApprovalToAttack",
data: {
@ -177,4 +180,26 @@ const samples: Array<Message> = [
} satisfies RequestApprovalToAttack,
];
console.log(samples);
/* validation *************************************************************************************/
const VALIDATORS = {
"AcaDefect": typia.createValidateEquals<AcaDefect>(),
"AcaFuelLow": typia.createValidateEquals<AcaFuelLow>(),
"AcaHeadingToBase": typia.createValidateEquals<AcaHeadingToBase>(),
"MissileToOwnshipDetected": typia.createValidateEquals<MissileToOwnshipDetected>(),
"RequestApprovalToAttack": typia.createValidateEquals<RequestApprovalToAttack>(),
};
for (const msg of SAMPLES) {
const validator = VALIDATORS[msg.kind];
const validationResult = validator(msg);
if (validationResult.success) {
console.log(`msg ${msg.id}: OK`);
} else {
console.log(`msg ${msg.id}: ERROR`);
for (const error of validationResult.errors) {
console.log(` - ${error.path}, expected ${error.expected}, found value ${error.value}`);
}
}
}