Files

147 lines
3.7 KiB
TypeScript

import { faker } from "@faker-js/faker";
import { UserRole } from "@shared/types";
import { buildTeam, buildUser } from "@server/test/factories";
import userInviter from "./userInviter";
import { withAPIContext } from "@server/test/support";
import { TeamDomain } from "@server/models";
describe("userInviter", () => {
it("should return sent invites", async () => {
const user = await buildUser();
const response = await withAPIContext(user, (ctx) =>
userInviter(ctx, {
invites: [
{
role: UserRole.Member,
email: faker.internet.email(),
name: "Test",
},
],
})
);
expect(response.sent.length).toEqual(1);
});
it("should filter empty invites", async () => {
const user = await buildUser();
const response = await withAPIContext(user, (ctx) =>
userInviter(ctx, {
invites: [
{
role: UserRole.Member,
email: " ",
name: "Test",
},
],
})
);
expect(response.sent.length).toEqual(0);
});
it("should error on non allowed domains", async () => {
const team = await buildTeam();
const user = await buildUser({ teamId: team.id });
await TeamDomain.create({
teamId: team.id,
name: faker.internet.domainName(),
createdById: user.id,
});
await withAPIContext(user, (ctx) =>
expect(
userInviter(ctx, {
invites: [
{
role: UserRole.Member,
email: "test@example.com",
name: "Test",
},
],
})
).rejects.toThrow("The domain is not allowed for this workspace")
);
});
it("should allow invites for allowed domains", async () => {
const team = await buildTeam();
const user = await buildUser({ teamId: team.id });
const allowedDomain = "google.com";
await TeamDomain.create({
teamId: team.id,
name: allowedDomain,
createdById: user.id,
});
const response = await withAPIContext(user, (ctx) =>
userInviter(ctx, {
invites: [
{
role: UserRole.Member,
email: `test@${allowedDomain}`,
name: "Test User",
},
],
})
);
expect(response.sent.length).toEqual(1);
expect(response.sent[0].email).toEqual(`test@${allowedDomain}`);
});
it("should filter obviously bunk emails", async () => {
const user = await buildUser();
const response = await withAPIContext(user, (ctx) =>
userInviter(ctx, {
invites: [
{
role: UserRole.Member,
email: "notanemail",
name: "Test",
},
],
})
);
expect(response.sent.length).toEqual(0);
});
it("should not send duplicates", async () => {
const user = await buildUser();
const response = await withAPIContext(user, (ctx) =>
userInviter(ctx, {
invites: [
{
role: UserRole.Member,
email: "the@same.com",
name: "Test",
},
{
role: UserRole.Member,
email: "the@SAME.COM",
name: "Test",
},
],
})
);
expect(response.sent.length).toEqual(1);
});
it("should not send invites to existing team members", async () => {
const email = faker.internet.email().toLowerCase();
const user = await buildUser({ email });
const response = await withAPIContext(user, (ctx) =>
userInviter(ctx, {
invites: [
{
role: UserRole.Member,
email,
name: user.name,
},
],
})
);
expect(response.sent.length).toEqual(0);
});
});