From ed17496a9000c3bce09252c87720c97f02dc9453 Mon Sep 17 00:00:00 2001 From: hexxa Date: Sat, 25 Sep 2021 21:57:23 +0800 Subject: [PATCH] test(fe): add tests for log in/out --- src/client/web/src/client/index.ts | 1 + .../components/__test__/pane_login.test.tsx | 45 +++++++++++++++++-- .../components/__test__/state_mgr.test.tsx | 2 +- src/client/web/src/components/state_mgr.tsx | 5 +-- .../web/src/components/state_updater.ts | 16 ++++++- 5 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/client/web/src/client/index.ts b/src/client/web/src/client/index.ts index 14b701a..d1b994c 100644 --- a/src/client/web/src/client/index.ts +++ b/src/client/web/src/client/index.ts @@ -6,6 +6,7 @@ export const userIDParam = "uid"; export const roleAdmin = "admin"; export const roleUser = "user"; export const roleVisitor = "visitor"; +export const visitorID = "1"; export interface Quota { spaceLimit: string; diff --git a/src/client/web/src/components/__test__/pane_login.test.tsx b/src/client/web/src/components/__test__/pane_login.test.tsx index db2a0a4..0c59471 100644 --- a/src/client/web/src/components/__test__/pane_login.test.tsx +++ b/src/client/web/src/components/__test__/pane_login.test.tsx @@ -1,11 +1,11 @@ import { List, Set, Map } from "immutable"; import { mock, instance } from "ts-mockito"; -import { User } from "../../client"; +import { User, UploadInfo } from "../../client"; import { AuthPane } from "../pane_login"; import { ICoreState, newWithWorker } from "../core_state"; 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 { MockFilesClient, resps as filesResps } from "../../client/files_mock"; @@ -18,7 +18,7 @@ describe("Login", () => { const pane = new AuthPane({ login: coreState.login, msg: coreState.msg, - update: (updater: (prevState: ICoreState) => ICoreState) => {}, + update: (updater: (prevState: ICoreState) => ICoreState) => { }, }); const usersCl = new MockUsersClient(""); @@ -30,6 +30,29 @@ describe("Login", () => { // 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( + filesResps.listUploadingsMockResp.data.uploadInfos.map( + (info: UploadInfo) => { + return { + file: undefined, + filePath: info.realFilePath, + size: info.size, + uploaded: info.uploaded, + state: UploadState.Ready, + err: "", + }; + } + ) + ) + ); + // login expect(updater().props.login).toEqual({ userID: "0", @@ -50,5 +73,21 @@ describe("Login", () => { displaying: "", 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(); + Object.keys(usersResps.listRolesMockResp.data.roles).forEach( + (role: string) => { + roles = roles.add(role); + } + ); + expect(coreState.admin).toEqual({ + users: usersMap, + roles: roles, + }); }); }); diff --git a/src/client/web/src/components/__test__/state_mgr.test.tsx b/src/client/web/src/components/__test__/state_mgr.test.tsx index c510e15..b329440 100644 --- a/src/client/web/src/components/__test__/state_mgr.test.tsx +++ b/src/client/web/src/components/__test__/state_mgr.test.tsx @@ -145,7 +145,7 @@ describe("State Manager", () => { // panes expect(coreState.panes).toEqual({ displaying: "", - paneNames: Set(["settings", "login", "admin"]), + paneNames: Set(["login"]), }); // login diff --git a/src/client/web/src/components/state_mgr.tsx b/src/client/web/src/components/state_mgr.tsx index d06d737..b44acc7 100644 --- a/src/client/web/src/components/state_mgr.tsx +++ b/src/client/web/src/components/state_mgr.tsx @@ -1,13 +1,11 @@ import * as React from "react"; -import { List, Set } from "immutable"; import { updater } from "./state_updater"; import { ICoreState, newState } from "./core_state"; import { RootFrame } from "./root_frame"; import { FilesClient } from "../client/files"; import { UsersClient } from "../client/users"; -import { IUsersClient, IFilesClient, roleAdmin, roleVisitor } from "../client"; -import { alertMsg } from "../common/env"; +import { IUsersClient, IFilesClient } from "../client"; export interface Props { } export interface State extends ICoreState { } @@ -39,7 +37,6 @@ export class StateMgr extends React.Component { updater().setClients(this.usersClient, this.filesClient); const params = new URLSearchParams(document.location.search.substring(1)); - return updater() .initAll(params) .then(() => { diff --git a/src/client/web/src/components/state_updater.ts b/src/client/web/src/components/state_updater.ts index 1b13ac8..ec9ae83 100644 --- a/src/client/web/src/components/state_updater.ts +++ b/src/client/web/src/components/state_updater.ts @@ -14,6 +14,7 @@ import { Response, roleVisitor, roleAdmin, + visitorID, } from "../client"; import { FilesClient } from "../client/files"; 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 => { const resp = await this.usersClient.self(); if (resp.status === 200) { @@ -364,7 +377,7 @@ export class Updater { this.props.login.quota = resp.data.quota; return true; } - this.props.login.userRole = roleVisitor; + this.resetUser() return false; }; @@ -460,6 +473,7 @@ export class Updater { logout = async (): Promise => { const resp = await this.usersClient.logout(); updater().setAuthed(false); + this.resetUser(); return resp.status === 200; };