mirror of
https://github.com/UA-Fediland/synapse-admin.git
synced 2025-04-19 00:44:55 +00:00
128 lines
4.1 KiB
TypeScript
128 lines
4.1 KiB
TypeScript
import fetchMock from "jest-fetch-mock";
|
|
|
|
import authProvider from "./authProvider";
|
|
import storage from "../storage";
|
|
|
|
fetchMock.enableMocks();
|
|
|
|
describe("authProvider", () => {
|
|
beforeEach(() => {
|
|
fetchMock.resetMocks();
|
|
storage.clear();
|
|
});
|
|
|
|
describe("login", () => {
|
|
it("should successfully login with username and password", async () => {
|
|
fetchMock.once(
|
|
JSON.stringify({
|
|
home_server: "example.com",
|
|
user_id: "@user:example.com",
|
|
access_token: "foobar",
|
|
device_id: "some_device",
|
|
})
|
|
);
|
|
|
|
const ret: undefined = await authProvider.login({
|
|
base_url: "http://example.com",
|
|
username: "@user:example.com",
|
|
password: "secret",
|
|
});
|
|
|
|
expect(ret).toBe(undefined);
|
|
expect(fetch).toBeCalledWith("http://example.com/_matrix/client/r0/login", {
|
|
body: '{"device_id":null,"initial_device_display_name":"Synapse Admin","type":"m.login.password","user":"@user:example.com","password":"secret"}',
|
|
headers: new Headers({
|
|
Accept: "application/json",
|
|
"Content-Type": "application/json",
|
|
}),
|
|
method: "POST",
|
|
});
|
|
expect(storage.getItem("base_url")).toEqual("http://example.com");
|
|
expect(storage.getItem("user_id")).toEqual("@user:example.com");
|
|
expect(storage.getItem("access_token")).toEqual("foobar");
|
|
expect(storage.getItem("device_id")).toEqual("some_device");
|
|
});
|
|
});
|
|
|
|
it("should successfully login with token", async () => {
|
|
fetchMock.once(
|
|
JSON.stringify({
|
|
home_server: "example.com",
|
|
user_id: "@user:example.com",
|
|
access_token: "foobar",
|
|
device_id: "some_device",
|
|
})
|
|
);
|
|
|
|
const ret: undefined = await authProvider.login({
|
|
base_url: "https://example.com/",
|
|
loginToken: "login_token",
|
|
});
|
|
|
|
expect(ret).toBe(undefined);
|
|
expect(fetch).toHaveBeenCalledWith("https://example.com/_matrix/client/r0/login", {
|
|
body: '{"device_id":null,"initial_device_display_name":"Synapse Admin","type":"m.login.token","token":"login_token"}',
|
|
headers: new Headers({
|
|
Accept: "application/json",
|
|
"Content-Type": "application/json",
|
|
}),
|
|
method: "POST",
|
|
});
|
|
expect(storage.getItem("base_url")).toEqual("https://example.com");
|
|
expect(storage.getItem("user_id")).toEqual("@user:example.com");
|
|
expect(storage.getItem("access_token")).toEqual("foobar");
|
|
expect(storage.getItem("device_id")).toEqual("some_device");
|
|
});
|
|
|
|
describe("logout", () => {
|
|
it("should remove the access_token from storage", async () => {
|
|
storage.setItem("base_url", "example.com");
|
|
storage.setItem("access_token", "foo");
|
|
fetchMock.mockResponse(JSON.stringify({}));
|
|
|
|
await authProvider.logout(null);
|
|
|
|
expect(fetch).toBeCalledWith("example.com/_matrix/client/r0/logout", {
|
|
headers: new Headers({
|
|
Accept: "application/json",
|
|
Authorization: "Bearer foo",
|
|
}),
|
|
method: "POST",
|
|
user: { authenticated: true, token: "Bearer foo" },
|
|
});
|
|
expect(storage.getItem("access_token")).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe("checkError", () => {
|
|
it("should resolve if error.status is not 401 or 403", async () => {
|
|
await expect(authProvider.checkError({ status: 200 })).resolves.toBeUndefined();
|
|
});
|
|
|
|
it("should reject if error.status is 401", async () => {
|
|
await expect(authProvider.checkError({ status: 401 })).rejects.toBeUndefined();
|
|
});
|
|
|
|
it("should reject if error.status is 403", async () => {
|
|
await expect(authProvider.checkError({ status: 403 })).rejects.toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe("checkAuth", () => {
|
|
it("should reject when not logged in", async () => {
|
|
await expect(authProvider.checkAuth({})).rejects.toBeUndefined();
|
|
});
|
|
|
|
it("should resolve when logged in", async () => {
|
|
storage.setItem("access_token", "foobar");
|
|
|
|
await expect(authProvider.checkAuth({})).resolves.toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe("getPermissions", () => {
|
|
it("should do nothing", async () => {
|
|
await expect(authProvider.getPermissions(null)).resolves.toBeUndefined();
|
|
});
|
|
});
|
|
});
|