mirror of
https://github.com/teamhanko/hanko.git
synced 2025-10-28 06:37:57 +08:00
192 lines
5.7 KiB
TypeScript
192 lines
5.7 KiB
TypeScript
import { EmailClient } from "../../../src";
|
|
import { Response } from "../../../src/lib/client/HttpClient";
|
|
|
|
const emailID = "test-email-1";
|
|
const emailAddress = "test-email-1@test";
|
|
|
|
let emailClient: EmailClient;
|
|
|
|
beforeEach(() => {
|
|
emailClient = new EmailClient("http://test.api");
|
|
});
|
|
|
|
describe("EmailClient.list()", () => {
|
|
it("should list email addresses", async () => {
|
|
const response = new Response(new XMLHttpRequest());
|
|
response.ok = true;
|
|
response._decodedJSON = [
|
|
{
|
|
id: emailID,
|
|
address: emailAddress,
|
|
is_verified: false,
|
|
is_primary: true,
|
|
},
|
|
];
|
|
|
|
jest.spyOn(emailClient.client, "get").mockResolvedValue(response);
|
|
const list = await emailClient.list();
|
|
expect(emailClient.client.get).toHaveBeenCalledWith("/emails");
|
|
expect(list).toEqual(response._decodedJSON);
|
|
});
|
|
|
|
it.each`
|
|
status | error
|
|
${401} | ${"Unauthorized error"}
|
|
${500} | ${"Technical error"}
|
|
`(
|
|
"should throw error if API returns an error status",
|
|
async ({ status, error }) => {
|
|
const response = new Response(new XMLHttpRequest());
|
|
response.status = status;
|
|
response.ok = status >= 200 && status <= 299;
|
|
|
|
jest.spyOn(emailClient.client, "get").mockResolvedValueOnce(response);
|
|
|
|
const email = emailClient.list();
|
|
await expect(email).rejects.toThrow(error);
|
|
}
|
|
);
|
|
|
|
it("should throw error on API communication failure", async () => {
|
|
emailClient.client.get = jest
|
|
.fn()
|
|
.mockRejectedValue(new Error("Test error"));
|
|
|
|
const user = emailClient.list();
|
|
await expect(user).rejects.toThrowError("Test error");
|
|
});
|
|
});
|
|
|
|
describe("EmailClient.create()", () => {
|
|
it("should create a email address", async () => {
|
|
const response = new Response(new XMLHttpRequest());
|
|
response.ok = true;
|
|
response._decodedJSON = {
|
|
id: "",
|
|
address: "",
|
|
is_verified: false,
|
|
is_primary: true,
|
|
};
|
|
|
|
jest.spyOn(emailClient.client, "post").mockResolvedValue(response);
|
|
|
|
const createResponse = emailClient.create(emailAddress);
|
|
await expect(createResponse).resolves.toBe(response._decodedJSON);
|
|
|
|
expect(emailClient.client.post).toHaveBeenCalledWith(`/emails`, {
|
|
address: emailAddress,
|
|
});
|
|
});
|
|
|
|
it.each`
|
|
status | error
|
|
${400} | ${"The email address already exists"}
|
|
${401} | ${"Unauthorized error"}
|
|
${409} | ${"Maximum number of email addresses reached error"}
|
|
${500} | ${"Technical error"}
|
|
`(
|
|
"should throw error if API returns an error status",
|
|
async ({ status, error }) => {
|
|
const response = new Response(new XMLHttpRequest());
|
|
response.status = status;
|
|
response.ok = status >= 200 && status <= 299;
|
|
|
|
jest.spyOn(emailClient.client, "post").mockResolvedValueOnce(response);
|
|
|
|
const email = emailClient.create(emailAddress);
|
|
await expect(email).rejects.toThrow(error);
|
|
}
|
|
);
|
|
|
|
it("should throw error on API communication failure", async () => {
|
|
emailClient.client.post = jest
|
|
.fn()
|
|
.mockRejectedValue(new Error("Test error"));
|
|
|
|
const user = emailClient.create(emailAddress);
|
|
await expect(user).rejects.toThrowError("Test error");
|
|
});
|
|
});
|
|
|
|
describe("EmailClient.setPrimaryEmail()", () => {
|
|
it("should set a primary email address", async () => {
|
|
const response = new Response(new XMLHttpRequest());
|
|
response.ok = true;
|
|
|
|
jest.spyOn(emailClient.client, "post").mockResolvedValue(response);
|
|
const update = await emailClient.setPrimaryEmail(emailID);
|
|
expect(emailClient.client.post).toHaveBeenCalledWith(
|
|
`/emails/${emailID}/set_primary`
|
|
);
|
|
expect(update).toEqual(undefined);
|
|
});
|
|
|
|
it.each`
|
|
status | error
|
|
${401} | ${"Unauthorized error"}
|
|
${500} | ${"Technical error"}
|
|
`(
|
|
"should throw error if API returns an error status",
|
|
async ({ status, error }) => {
|
|
const response = new Response(new XMLHttpRequest());
|
|
response.status = status;
|
|
response.ok = status >= 200 && status <= 299;
|
|
|
|
jest.spyOn(emailClient.client, "post").mockResolvedValueOnce(response);
|
|
|
|
const email = emailClient.setPrimaryEmail(emailID);
|
|
await expect(email).rejects.toThrow(error);
|
|
}
|
|
);
|
|
|
|
it("should throw error on API communication failure", async () => {
|
|
emailClient.client.post = jest
|
|
.fn()
|
|
.mockRejectedValue(new Error("Test error"));
|
|
|
|
const user = emailClient.setPrimaryEmail(emailID);
|
|
await expect(user).rejects.toThrowError("Test error");
|
|
});
|
|
});
|
|
|
|
describe("EmailClient.delete()", () => {
|
|
it("should delete email addresses", async () => {
|
|
const response = new Response(new XMLHttpRequest());
|
|
response.ok = true;
|
|
|
|
jest.spyOn(emailClient.client, "delete").mockResolvedValue(response);
|
|
const deleteResponse = await emailClient.delete(emailID);
|
|
expect(emailClient.client.delete).toHaveBeenCalledWith(
|
|
`/emails/${emailID}`
|
|
);
|
|
expect(deleteResponse).toEqual(undefined);
|
|
});
|
|
|
|
it.each`
|
|
status | error
|
|
${401} | ${"Unauthorized error"}
|
|
${500} | ${"Technical error"}
|
|
`(
|
|
"should throw error if API returns an error status",
|
|
async ({ status, error }) => {
|
|
const response = new Response(new XMLHttpRequest());
|
|
response.status = status;
|
|
response.ok = status >= 200 && status <= 299;
|
|
|
|
jest.spyOn(emailClient.client, "delete").mockResolvedValueOnce(response);
|
|
|
|
const deleteResponse = emailClient.delete(emailID);
|
|
await expect(deleteResponse).rejects.toThrow(error);
|
|
}
|
|
);
|
|
|
|
it("should throw error on API communication failure", async () => {
|
|
emailClient.client.delete = jest
|
|
.fn()
|
|
.mockRejectedValue(new Error("Test error"));
|
|
|
|
const user = emailClient.delete(emailID);
|
|
await expect(user).rejects.toThrowError("Test error");
|
|
});
|
|
});
|