test(fe): add tests for log in/out
This commit is contained in:
parent
1f5dd061d6
commit
ed17496a90
5 changed files with 60 additions and 9 deletions
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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(() => {
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue