Files
cozsweet-frontend-nextjs/src/data/schemas/auth/__tests__/facebook_identity.test.ts
T

92 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
FacebookIdentityResponseSchema,
FacebookPsidLoginResponseSchema,
LoginRequestSchema,
} from "@/data/schemas/auth";
import { UserSchema } from "@/data/schemas/user/user";
describe("facebook identity schema models", () => {
it("parses facebook identity binding responses", () => {
const response = FacebookIdentityResponseSchema.parse({
fbAsid: "asid-1",
fbPsid: "psid-1",
facebookBinding: {
conflicts: [],
bound: [{ field: "psid" }],
},
});
expect(response).toMatchObject({
fbAsid: "asid-1",
fbPsid: "psid-1",
facebookBinding: {
conflicts: [],
bound: [{ field: "psid" }],
},
});
});
it("parses facebook psid login responses for real users and guests", () => {
expect(
FacebookPsidLoginResponseSchema.parse({
token: "login-token",
refreshToken: "refresh-token",
matchedBy: "psid",
fbAsid: "asid-1",
fbPsid: "psid-1",
hasCompleteFacebookIdentity: true,
isGuest: false,
user: { id: "user-1", username: "Elio" },
}),
).toMatchObject({
isGuest: false,
hasCompleteFacebookIdentity: true,
user: { id: "user-1" },
});
expect(
FacebookPsidLoginResponseSchema.parse({
token: "guest-token",
matchedBy: "guest",
fbPsid: "psid-1",
hasCompleteFacebookIdentity: false,
isGuest: true,
userId: "guest-1",
}),
).toMatchObject({
refreshToken: "",
isGuest: true,
userId: "guest-1",
user: null,
});
});
it("keeps psid in request serialization without a public field declaration", () => {
const request = LoginRequestSchema.parse({
email: "user@example.com",
password: "password",
platform: "web",
guestId: "",
psid: "psid-1",
});
expect(request).toMatchObject({ psid: "psid-1" });
});
it("accepts facebook identity fields in user schema", () => {
expect(
UserSchema.parse({
id: "user-1",
username: "Elio",
fbAsid: "asid-1",
fbPsid: "psid-1",
}),
).toMatchObject({
fbAsid: "asid-1",
fbPsid: "psid-1",
});
});
});