69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
"use strict";
|
|
|
|
const test = require("node:test");
|
|
const assert = require("node:assert/strict");
|
|
const {
|
|
XWebhookPayloadSchema,
|
|
PolarWebhookPayloadSchema,
|
|
EmailSignInFormSchema,
|
|
EmailSignUpFormSchema,
|
|
TopUpFormSchema,
|
|
SimulateMentionFormSchema,
|
|
parseOrThrow,
|
|
} = require("../src/lib/validation");
|
|
|
|
test("validates X webhook payload", () => {
|
|
const parsed = parseOrThrow(XWebhookPayloadSchema, {
|
|
mentionPostId: "m1",
|
|
callerUserId: "u1",
|
|
parentPost: { id: "p1", article: { body: "x" } },
|
|
});
|
|
|
|
assert.equal(parsed.mentionPostId, "m1");
|
|
});
|
|
|
|
test("validates Polar webhook payload with numeric coercion", () => {
|
|
const parsed = parseOrThrow(PolarWebhookPayloadSchema, {
|
|
userId: "u1",
|
|
credits: "12",
|
|
eventId: "evt-1",
|
|
});
|
|
|
|
assert.equal(parsed.credits, 12);
|
|
});
|
|
|
|
test("rejects invalid email sign-in payload", () => {
|
|
assert.throws(
|
|
() => parseOrThrow(EmailSignInFormSchema, { email: "not-an-email", password: "12345678" }),
|
|
/Enter a valid email address/,
|
|
);
|
|
});
|
|
|
|
test("validates email sign-up payload", () => {
|
|
const parsed = parseOrThrow(EmailSignUpFormSchema, {
|
|
name: "Alice",
|
|
email: "alice@example.com",
|
|
password: "password123",
|
|
});
|
|
|
|
assert.equal(parsed.name, "Alice");
|
|
assert.equal(parsed.email, "alice@example.com");
|
|
});
|
|
|
|
test("validates topup amount range", () => {
|
|
assert.throws(() => parseOrThrow(TopUpFormSchema, { amount: "999" }), /Too big/);
|
|
|
|
const parsed = parseOrThrow(TopUpFormSchema, { amount: "20" });
|
|
assert.equal(parsed.amount, 20);
|
|
});
|
|
|
|
test("validates simulate mention form", () => {
|
|
const parsed = parseOrThrow(SimulateMentionFormSchema, {
|
|
title: "Hello",
|
|
body: "World",
|
|
});
|
|
|
|
assert.equal(parsed.title, "Hello");
|
|
assert.equal(parsed.body, "World");
|
|
});
|