93 lines
2.8 KiB
TypeScript
93 lines
2.8 KiB
TypeScript
import prismaMock from "../../../tests/libs/__mocks__/prismaMock";
|
|
|
|
import { describe, expect, it, beforeEach } from "vitest";
|
|
|
|
import { usernameCheckForSignup } from "./username";
|
|
|
|
describe("usernameCheckForSignup ", async () => {
|
|
beforeEach(() => {
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
//@ts-ignore
|
|
prismaMock.user.findUnique.mockImplementation(() => {
|
|
return null;
|
|
});
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
//@ts-ignore
|
|
prismaMock.user.findMany.mockImplementation(() => {
|
|
return [];
|
|
});
|
|
});
|
|
|
|
it("should return available true for an email that doesn't exist", async () => {
|
|
const res = await usernameCheckForSignup({ username: "johnny", email: "johnny@example.com" });
|
|
expect(res).toEqual({
|
|
available: true,
|
|
premium: false,
|
|
suggestedUsername: "",
|
|
});
|
|
});
|
|
|
|
it("should return available false for an email that exists and a different username is provided", async () => {
|
|
mockUserInDB({
|
|
id: 1,
|
|
email: "john@example.com",
|
|
username: "john",
|
|
});
|
|
const res = await usernameCheckForSignup({ username: "johnny", email: "john@example.com" });
|
|
expect(res).toEqual({
|
|
available: false,
|
|
premium: false,
|
|
suggestedUsername: "johnny001",
|
|
});
|
|
});
|
|
|
|
it("should return available true for an email that exists but the user is signing up for an organization", async () => {
|
|
const userId = 1;
|
|
mockUserInDB({
|
|
id: userId,
|
|
email: "john@example.com",
|
|
username: "john",
|
|
});
|
|
mockMembership({ userId });
|
|
const res = await usernameCheckForSignup({ username: "john", email: "john@example.com" });
|
|
expect(res).toEqual({
|
|
available: true,
|
|
// An organization can't have premium username
|
|
premium: false,
|
|
suggestedUsername: "",
|
|
});
|
|
});
|
|
});
|
|
|
|
function mockUserInDB({ id, email, username }: { id: number; email: string; username: string }) {
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
//@ts-ignore
|
|
prismaMock.user.findUnique.mockImplementation((arg) => {
|
|
if (arg.where.email === email) {
|
|
return {
|
|
id,
|
|
email,
|
|
username,
|
|
};
|
|
}
|
|
return null;
|
|
});
|
|
}
|
|
|
|
function mockMembership({ userId }: { userId: number }) {
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
//@ts-ignore
|
|
prismaMock.membership.findFirst.mockImplementation((arg) => {
|
|
const isOrganizationWhereClause =
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
//@ts-ignore
|
|
arg?.where?.team?.metadata?.path[0] === "isOrganization" && arg?.where?.team?.metadata?.equals === true;
|
|
if (arg?.where?.userId === userId && isOrganizationWhereClause) {
|
|
return {
|
|
userId,
|
|
teamId: 1,
|
|
};
|
|
}
|
|
});
|
|
}
|