test(fe): add tests for log in/out

This commit is contained in:
hexxa 2021-09-25 21:57:23 +08:00 committed by Hexxa
parent 1f5dd061d6
commit ed17496a90
5 changed files with 60 additions and 9 deletions

View file

@ -6,6 +6,7 @@ export const userIDParam = "uid";
export const roleAdmin = "admin"; export const roleAdmin = "admin";
export const roleUser = "user"; export const roleUser = "user";
export const roleVisitor = "visitor"; export const roleVisitor = "visitor";
export const visitorID = "1";
export interface Quota { export interface Quota {
spaceLimit: string; spaceLimit: string;

View file

@ -1,11 +1,11 @@
import { List, Set, Map } from "immutable"; import { List, Set, Map } from "immutable";
import { mock, instance } from "ts-mockito"; import { mock, instance } from "ts-mockito";
import { User } from "../../client"; import { User, UploadInfo } from "../../client";
import { AuthPane } from "../pane_login"; import { AuthPane } from "../pane_login";
import { ICoreState, newWithWorker } from "../core_state"; import { ICoreState, newWithWorker } from "../core_state";
import { updater } from "../state_updater"; import { updater } from "../state_updater";
import { MockWorker } from "../../worker/interface"; import { MockWorker, UploadState, UploadEntry } from "../../worker/interface";
import { MockUsersClient, resps as usersResps } from "../../client/users_mock"; import { MockUsersClient, resps as usersResps } from "../../client/users_mock";
import { MockFilesClient, resps as filesResps } from "../../client/files_mock"; import { MockFilesClient, resps as filesResps } from "../../client/files_mock";
@ -18,7 +18,7 @@ describe("Login", () => {
const pane = new AuthPane({ const pane = new AuthPane({
login: coreState.login, login: coreState.login,
msg: coreState.msg, msg: coreState.msg,
update: (updater: (prevState: ICoreState) => ICoreState) => {}, update: (updater: (prevState: ICoreState) => ICoreState) => { },
}); });
const usersCl = new MockUsersClient(""); const usersCl = new MockUsersClient("");
@ -30,6 +30,29 @@ describe("Login", () => {
// TODO: state is not checked // TODO: state is not checked
// browser
expect(coreState.browser.dirPath.join("/")).toEqual("mock_home/files");
expect(coreState.browser.isSharing).toEqual(true);
expect(coreState.browser.sharings).toEqual(
List(filesResps.listSharingsMockResp.data.sharingDirs)
);
expect(coreState.browser.uploadings).toEqual(
List<UploadEntry>(
filesResps.listUploadingsMockResp.data.uploadInfos.map(
(info: UploadInfo) => {
return {
file: undefined,
filePath: info.realFilePath,
size: info.size,
uploaded: info.uploaded,
state: UploadState.Ready,
err: "",
};
}
)
)
);
// login // login
expect(updater().props.login).toEqual({ expect(updater().props.login).toEqual({
userID: "0", userID: "0",
@ -50,5 +73,21 @@ describe("Login", () => {
displaying: "", displaying: "",
paneNames: Set(["settings", "login", "admin"]), paneNames: Set(["settings", "login", "admin"]),
}); });
// admin
let usersMap = Map({});
usersResps.listUsersMockResp.data.users.forEach((user: User) => {
usersMap = usersMap.set(user.name, user);
});
let roles = Set<string>();
Object.keys(usersResps.listRolesMockResp.data.roles).forEach(
(role: string) => {
roles = roles.add(role);
}
);
expect(coreState.admin).toEqual({
users: usersMap,
roles: roles,
});
}); });
}); });

View file

@ -145,7 +145,7 @@ describe("State Manager", () => {
// panes // panes
expect(coreState.panes).toEqual({ expect(coreState.panes).toEqual({
displaying: "", displaying: "",
paneNames: Set(["settings", "login", "admin"]), paneNames: Set(["login"]),
}); });
// login // login

View file

@ -1,13 +1,11 @@
import * as React from "react"; import * as React from "react";
import { List, Set } from "immutable";
import { updater } from "./state_updater"; import { updater } from "./state_updater";
import { ICoreState, newState } from "./core_state"; import { ICoreState, newState } from "./core_state";
import { RootFrame } from "./root_frame"; import { RootFrame } from "./root_frame";
import { FilesClient } from "../client/files"; import { FilesClient } from "../client/files";
import { UsersClient } from "../client/users"; import { UsersClient } from "../client/users";
import { IUsersClient, IFilesClient, roleAdmin, roleVisitor } from "../client"; import { IUsersClient, IFilesClient } from "../client";
import { alertMsg } from "../common/env";
export interface Props { } export interface Props { }
export interface State extends ICoreState { } export interface State extends ICoreState { }
@ -39,7 +37,6 @@ export class StateMgr extends React.Component<Props, State, {}> {
updater().setClients(this.usersClient, this.filesClient); updater().setClients(this.usersClient, this.filesClient);
const params = new URLSearchParams(document.location.search.substring(1)); const params = new URLSearchParams(document.location.search.substring(1));
return updater() return updater()
.initAll(params) .initAll(params)
.then(() => { .then(() => {

View file

@ -14,6 +14,7 @@ import {
Response, Response,
roleVisitor, roleVisitor,
roleAdmin, roleAdmin,
visitorID,
} from "../client"; } from "../client";
import { FilesClient } from "../client/files"; import { FilesClient } from "../client/files";
import { UsersClient } from "../client/users"; import { UsersClient } from "../client/users";
@ -354,6 +355,18 @@ export class Updater {
}) })
}; };
resetUser = () => {
this.props.login.userID = visitorID;
this.props.login.userName = "visitor";
this.props.login.userRole = roleVisitor;
this.props.login.usedSpace = "0";
this.props.login.quota = {
uploadSpeedLimit: 0,
downloadSpeedLimit: 0,
spaceLimit: "0",
};
}
self = async (): Promise<boolean> => { self = async (): Promise<boolean> => {
const resp = await this.usersClient.self(); const resp = await this.usersClient.self();
if (resp.status === 200) { if (resp.status === 200) {
@ -364,7 +377,7 @@ export class Updater {
this.props.login.quota = resp.data.quota; this.props.login.quota = resp.data.quota;
return true; return true;
} }
this.props.login.userRole = roleVisitor; this.resetUser()
return false; return false;
}; };
@ -460,6 +473,7 @@ export class Updater {
logout = async (): Promise<boolean> => { logout = async (): Promise<boolean> => {
const resp = await this.usersClient.logout(); const resp = await this.usersClient.logout();
updater().setAuthed(false); updater().setAuthed(false);
this.resetUser();
return resp.status === 200; return resp.status === 200;
}; };