mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
147 lines
3.7 KiB
TypeScript
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);
|
|
});
|
|
});
|