173 lines
5.3 KiB
TypeScript
173 lines
5.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { authSessionSchema, currentUserProfileSchema } from "./access.js";
|
|
|
|
describe("currentUserProfileSchema", () => {
|
|
it("coerces empty-string name to null", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: "a@b.com",
|
|
name: "",
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.name).toBe(null);
|
|
});
|
|
|
|
it("coerces whitespace-only name to null", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: "a@b.com",
|
|
name: " ",
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.name).toBe(null);
|
|
});
|
|
|
|
it("preserves a real name unchanged", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: "a@b.com",
|
|
name: "Jane",
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.name).toBe("Jane");
|
|
});
|
|
|
|
it("preserves null name as null", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: "a@b.com",
|
|
name: null,
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.name).toBe(null);
|
|
});
|
|
|
|
it("coerces empty-string email to null", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: "",
|
|
name: "Jane",
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.email).toBe(null);
|
|
});
|
|
|
|
it("coerces whitespace-only email to null", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: " ",
|
|
name: "Jane",
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.email).toBe(null);
|
|
});
|
|
|
|
it("preserves a real email unchanged", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: "a@b.com",
|
|
name: "Jane",
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.email).toBe("a@b.com");
|
|
});
|
|
|
|
it("preserves null email as null", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: null,
|
|
name: "Jane",
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.email).toBe(null);
|
|
});
|
|
|
|
it("still rejects a malformed non-empty email", () => {
|
|
const result = currentUserProfileSchema.safeParse({
|
|
id: "u1",
|
|
email: "not-an-email",
|
|
name: "Jane",
|
|
image: null,
|
|
});
|
|
expect(result.success).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("authSessionSchema", () => {
|
|
it("parses a session where user name is empty string (identity provider without a name)", () => {
|
|
const result = authSessionSchema.safeParse({
|
|
session: { id: "s1", userId: "u1" },
|
|
user: { id: "u1", email: "a@b.com", name: "", image: null },
|
|
sentryDsn: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.user.name).toBe(null);
|
|
});
|
|
|
|
it("parses a session where user has a real name", () => {
|
|
const result = authSessionSchema.safeParse({
|
|
session: { id: "s1", userId: "u1" },
|
|
user: { id: "u1", email: "a@b.com", name: "Jane", image: null },
|
|
sentryDsn: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.user.name).toBe("Jane");
|
|
});
|
|
|
|
it("parses a session where user name is null", () => {
|
|
const result = authSessionSchema.safeParse({
|
|
session: { id: "s1", userId: "u1" },
|
|
user: { id: "u1", email: "a@b.com", name: null, image: null },
|
|
sentryDsn: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.user.name).toBe(null);
|
|
});
|
|
|
|
it("parses a session where user email is empty string (identity provider without an email)", () => {
|
|
const result = authSessionSchema.safeParse({
|
|
session: { id: "s1", userId: "u1" },
|
|
user: { id: "u1", email: "", name: "Jane", image: null },
|
|
sentryDsn: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.user.email).toBe(null);
|
|
});
|
|
|
|
it("rejects a payload with no sentryDsn field", () => {
|
|
const result = authSessionSchema.safeParse({
|
|
session: { id: "s1", userId: "u1" },
|
|
user: { id: "u1", email: "a@b.com", name: "Jane", image: null },
|
|
});
|
|
expect(result.success).toBe(false);
|
|
});
|
|
|
|
it("accepts a null sentryDsn", () => {
|
|
const result = authSessionSchema.safeParse({
|
|
session: { id: "s1", userId: "u1" },
|
|
user: { id: "u1", email: "a@b.com", name: "Jane", image: null },
|
|
sentryDsn: null,
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.sentryDsn).toBe(null);
|
|
});
|
|
|
|
it("accepts a real sentryDsn value", () => {
|
|
const result = authSessionSchema.safeParse({
|
|
session: { id: "s1", userId: "u1" },
|
|
user: { id: "u1", email: "a@b.com", name: "Jane", image: null },
|
|
sentryDsn: "https://public@o0.ingest.sentry.io/1",
|
|
});
|
|
expect(result.success).toBe(true);
|
|
expect(result.success && result.data.sentryDsn).toBe("https://public@o0.ingest.sentry.io/1");
|
|
});
|
|
});
|