From 9da4820e00b579faf2ba6863878ada43b9b04031 Mon Sep 17 00:00:00 2001 From: Travis Fischer Date: Mon, 26 May 2025 02:47:58 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/schemas/package.json | 3 +- .../src/__snapshots__/schemas.test.ts.snap | 67 +++++++++++++++++++ packages/schemas/src/schemas.test.ts | 49 ++++++++++++++ packages/schemas/src/schemas.ts | 1 + 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 packages/schemas/src/__snapshots__/schemas.test.ts.snap create mode 100644 packages/schemas/src/schemas.test.ts diff --git a/packages/schemas/package.json b/packages/schemas/package.json index 4dd6bcc0..14f9ddf4 100644 --- a/packages/schemas/package.json +++ b/packages/schemas/package.json @@ -19,7 +19,8 @@ "scripts": { "test": "run-s test:*", "test:lint": "eslint .", - "test:typecheck": "tsc --noEmit" + "test:typecheck": "tsc --noEmit", + "test:unit": "vitest run" }, "dependencies": { "@agentic/platform-core": "workspace:*", diff --git a/packages/schemas/src/__snapshots__/schemas.test.ts.snap b/packages/schemas/src/__snapshots__/schemas.test.ts.snap new file mode 100644 index 00000000..3ff2b3eb --- /dev/null +++ b/packages/schemas/src/__snapshots__/schemas.test.ts.snap @@ -0,0 +1,67 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`rateLimitSchema invalid 1`] = ` +[ZodError: [ + { + "code": "too_small", + "minimum": 1, + "type": "string", + "inclusive": true, + "exact": false, + "message": "String must contain at least 1 character(s)", + "path": [ + "interval" + ] + } +]] +`; + +exports[`rateLimitSchema invalid 2`] = ` +[ZodError: [ + { + "code": "custom", + "message": "Invalid interval \\"--\\"", + "path": [ + "interval", + "interval" + ] + } +]] +`; + +exports[`rateLimitSchema invalid 3`] = ` +[ZodError: [ + { + "code": "too_small", + "minimum": 0, + "type": "number", + "inclusive": true, + "exact": false, + "message": "Number must be greater than or equal to 0", + "path": [ + "maxPerInterval" + ] + } +]] +`; + +exports[`rateLimitSchema valid 1`] = ` +{ + "interval": 10, + "maxPerInterval": 100, +} +`; + +exports[`rateLimitSchema valid 2`] = ` +{ + "interval": 10, + "maxPerInterval": 100, +} +`; + +exports[`rateLimitSchema valid 3`] = ` +{ + "interval": 86400, + "maxPerInterval": 1000, +} +`; diff --git a/packages/schemas/src/schemas.test.ts b/packages/schemas/src/schemas.test.ts new file mode 100644 index 00000000..7b215987 --- /dev/null +++ b/packages/schemas/src/schemas.test.ts @@ -0,0 +1,49 @@ +import { expect, test } from 'vitest' + +import { rateLimitSchema } from './schemas' + +test('rateLimitSchema valid', () => { + expect( + rateLimitSchema.parse({ + interval: 10, + maxPerInterval: 100 + }) + ).toMatchSnapshot() + + expect( + rateLimitSchema.parse({ + interval: '10s', + maxPerInterval: 100 + }) + ).toMatchSnapshot() + + expect( + rateLimitSchema.parse({ + interval: '1 day', + maxPerInterval: 1000 + }) + ).toMatchSnapshot() +}) + +test('rateLimitSchema invalid', () => { + expect(() => + rateLimitSchema.parse({ + interval: '', + maxPerInterval: 5 + }) + ).toThrowErrorMatchingSnapshot() + + expect(() => + rateLimitSchema.parse({ + interval: '--', + maxPerInterval: 10 + }) + ).toThrowErrorMatchingSnapshot() + + expect(() => + rateLimitSchema.parse({ + interval: '1 day', + maxPerInterval: -1000 + }) + ).toThrowErrorMatchingSnapshot() +}) diff --git a/packages/schemas/src/schemas.ts b/packages/schemas/src/schemas.ts index b28bd48a..2d89166d 100644 --- a/packages/schemas/src/schemas.ts +++ b/packages/schemas/src/schemas.ts @@ -59,6 +59,7 @@ export const rateLimitSchema = z */ maxPerInterval: z .number() + .nonnegative() .describe('Maximum number of operations per interval (unitless).') }) .openapi('RateLimit')