Skip to content

Commit d858b47

Browse files
committed
add basic tests I ran into for the api schema
1 parent 3f41183 commit d858b47

6 files changed

Lines changed: 70 additions & 6 deletions

File tree

packages/api/schema/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,9 @@ const result = IRacingGetCarResponseSchema.parse(apiResponse);
1717
```
1818

1919
Use the schemas directly for runtime validation or feed them into helpers like `@iracing-data/api-schema-to-openapi` for OpenAPI generation.
20+
21+
## Development
22+
23+
```bash
24+
pnpm --filter @iracing-data/api-schema test
25+
```

packages/api/schema/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
"access": "public"
1919
},
2020
"scripts": {
21-
"build": "tsc --build tsconfig.build.json"
21+
"build": "tsc --build tsconfig.build.json",
22+
"test": "node --test -r ts-node/register src/schema/primitives.test.ts src/schema/parameters.test.ts"
2223
},
2324
"dependencies": {
2425
"zod": "^4.1.13"
2526
}
26-
}
27+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { strict as assert } from "node:assert";
2+
import { describe, it } from "node:test";
3+
import { IRacingMemberGetParametersSchema } from "./parameters";
4+
5+
describe("IRacingMemberGetParameters", () => {
6+
it("coerces single integers", () => {
7+
const integerValue = IRacingMemberGetParametersSchema.parse({
8+
cust_ids: 1,
9+
});
10+
assert.deepStrictEqual(integerValue, {
11+
cust_ids: "1",
12+
});
13+
});
14+
15+
it("preserves cust_ids as a string", () => {
16+
const singleValue = IRacingMemberGetParametersSchema.parse({
17+
cust_ids: "1",
18+
});
19+
const multipleValues = IRacingMemberGetParametersSchema.parse({
20+
cust_ids: "1,2,3",
21+
include_licenses: "true",
22+
});
23+
24+
assert.deepStrictEqual(singleValue, {
25+
cust_ids: "1",
26+
});
27+
assert.deepStrictEqual(multipleValues, {
28+
cust_ids: "1,2,3",
29+
include_licenses: true,
30+
});
31+
});
32+
});
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { strict as assert } from "node:assert";
2+
import { describe, it } from "node:test";
3+
import { CommaSeparatedNumberString } from "./primitives";
4+
5+
describe("CommaSeparatedNumberString", () => {
6+
it("coerces single integers", () => {
7+
const integerValue = CommaSeparatedNumberString.parse(1);
8+
9+
assert.strictEqual(integerValue, "1");
10+
assert.strictEqual(typeof integerValue, "string");
11+
});
12+
13+
it("preserves comma-separated strings", () => {
14+
const singleValue = CommaSeparatedNumberString.parse("1");
15+
const multipleValues = CommaSeparatedNumberString.parse("1,2,3");
16+
17+
assert.strictEqual(singleValue, "1");
18+
assert.strictEqual(typeof singleValue, "string");
19+
assert.strictEqual(multipleValues, "1,2,3");
20+
assert.strictEqual(typeof multipleValues, "string");
21+
});
22+
});

packages/api/schema/src/schema/primitives.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,12 @@ export const IRacingCustomerIdSchema = z.coerce.number().meta({
5454
id: "customerId",
5555
});
5656

57-
export const CommaSeparatedNumberString = z.string().regex(/^\d+(?:,\d+)*$/, {
58-
message: "Parameter must be a comma-separated list of numbers, e.g. '2,3,4'",
59-
});
57+
export const CommaSeparatedNumberString = z.coerce
58+
.string()
59+
.regex(/^\d+(?:,\d+)*$/, {
60+
message:
61+
"Parameter must be a comma-separated list of numbers, e.g. '2,3,4'",
62+
});
6063

6164
export const IRacingEventTypePracticeSchema = z
6265
.literal(2)

packages/api/schema/tsconfig.build.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
"module": "nodenext",
88
"moduleResolution": "nodenext"
99
},
10-
"exclude": ["node_modules", "dist", "scripts"]
10+
"exclude": ["node_modules", "dist", "scripts", "**/*.test.ts"]
1111
}

0 commit comments

Comments
 (0)