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

92 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
FacebookIdentityResponse,
FacebookPsidLoginResponse,
LoginRequest,
} from "@/data/dto/auth";
import { UserSchema } from "@/data/schemas/user/user";
describe("facebook identity DTO/schema", () => {
it("parses facebook identity binding responses", () => {
const response = FacebookIdentityResponse.fromJson({
fbAsid: "asid-1",
fbPsid: "psid-1",
facebookBinding: {
conflicts: [],
bound: [{ field: "psid" }],
},
});
expect(response.toJson()).toMatchObject({
fbAsid: "asid-1",
fbPsid: "psid-1",
facebookBinding: {
conflicts: [],
bound: [{ field: "psid" }],
},
});
});
it("parses facebook psid login responses for real users and guests", () => {
expect(
FacebookPsidLoginResponse.fromJson({
token: "login-token",
refreshToken: "refresh-token",
matchedBy: "psid",
fbAsid: "asid-1",
fbPsid: "psid-1",
hasCompleteFacebookIdentity: true,
isGuest: false,
user: { id: "user-1", username: "Elio" },
}).toJson(),
).toMatchObject({
isGuest: false,
hasCompleteFacebookIdentity: true,
user: { id: "user-1" },
});
expect(
FacebookPsidLoginResponse.fromJson({
token: "guest-token",
matchedBy: "guest",
fbPsid: "psid-1",
hasCompleteFacebookIdentity: false,
isGuest: true,
userId: "guest-1",
}).toJson(),
).toMatchObject({
refreshToken: "",
isGuest: true,
userId: "guest-1",
user: null,
});
});
it("keeps psid in request serialization without requiring DTO field declarations", () => {
const request = LoginRequest.from({
email: "user@example.com",
password: "password",
platform: "web",
guestId: "",
psid: "psid-1",
});
expect(request.toJson()).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",
});
});
});