From e4e53b15f2c787ac50dbd1d317643a951f59b004 Mon Sep 17 00:00:00 2001 From: hexxa Date: Sun, 14 Nov 2021 22:42:37 +0800 Subject: [PATCH] test(topbar): add test for topbar --- src/client/web/src/common/env.ts | 7 +- .../src/components/__test__/topbar.test.tsx | 139 ++++++++++++++++++ src/client/web/src/components/core_state.ts | 2 +- .../web/src/components/state_updater.ts | 2 + src/handlers/multiusers/handlers.go | 1 - 5 files changed, 148 insertions(+), 3 deletions(-) create mode 100644 src/client/web/src/components/__test__/topbar.test.tsx diff --git a/src/client/web/src/common/env.ts b/src/client/web/src/common/env.ts index d2211e3..e3804ca 100644 --- a/src/client/web/src/common/env.ts +++ b/src/client/web/src/common/env.ts @@ -7,5 +7,10 @@ export function alertMsg(msg: string) { } export function confirmMsg(msg: string): boolean { - return confirm(msg); + try { + return confirm(msg); + } catch (e) { + console.log(`${msg}: yes (confirm is not implemented)`); + return true; + } } diff --git a/src/client/web/src/components/__test__/topbar.test.tsx b/src/client/web/src/components/__test__/topbar.test.tsx new file mode 100644 index 0000000..d3124c5 --- /dev/null +++ b/src/client/web/src/components/__test__/topbar.test.tsx @@ -0,0 +1,139 @@ +import { List, Set, Map } from "immutable"; +import { mock, instance } from "ts-mockito"; + +import { TopBar } from "../topbar"; +import { initUploadMgr } from "../../worker/upload_mgr"; +import { ICoreState, newState } from "../core_state"; +import { updater } from "../state_updater"; +import { MockWorker } from "../../worker/interface"; +import { MockUsersClient, resps as usersResps } from "../../client/users_mock"; +import { MockFilesClient, resps as filesResps } from "../../client/files_mock"; +import { MockSettingsClient } from "../../client/settings_mock"; + +import { UploadInfo, visitorID, roleVisitor, MetadataResp } from "../../client"; +import { UploadEntry, UploadState } from "../../worker/interface"; + + + +describe("TopBar", () => { + test("logout as visitor without sharing", async () => { + const mockWorkerClass = mock(MockWorker); + const mockWorker = instance(mockWorkerClass); + initUploadMgr(mockWorker); + + const coreState = newState(); + + const isSharingMockResp = { status: 404, statusText: "", data: {} }; + const listSharingsMockResp = { + status: 401, + statusText: "", + data: { + sharingDirs: new Array(), + }, + }; + const listUploadingsMockResp = { + status: 401, + statusText: "", + data: { uploadInfos: new Array() }, + }; + const listHomeMockResp = { + status: 401, + statusText: "", + data: { cwd: "", metadatas: new Array() } + }; + const mockFileResps = { + ...filesResps, + listHomeMockResp, + isSharingMockResp, + listSharingsMockResp, + listUploadingsMockResp, + } + + const selfMockResp = { + status: 401, + statusText: "", + data: { + id: visitorID, + name: "visitor", + role: roleVisitor, + usedSpace: "0", + quota: { + spaceLimit: "0", + uploadSpeedLimit: 0, + downloadSpeedLimit: 0, + }, + }, + } + const isAuthedMockResp = { status: 401, statusText: "", data: {} }; + const mockUserResps = { + ...usersResps, + selfMockResp, + isAuthedMockResp, + }; + + const filesCl = new MockFilesClient(""); + filesCl.setMock(mockFileResps); + const usersCl = new MockUsersClient(""); + usersCl.setMock(mockUserResps); + const settingsCl = new MockSettingsClient(""); + + updater().init(coreState); + updater().setClients(usersCl, filesCl, settingsCl); + + const topbar = new TopBar({ + login: coreState.login, + panes: coreState.panes, + msg: coreState.msg, + update: (updater: (prevState: ICoreState) => ICoreState) => { }, + }); + + await topbar.logout(); + + // browser + expect(coreState.browser.dirPath.join("/")).toEqual(mockFileResps.listHomeMockResp.data.cwd); + expect(coreState.browser.isSharing).toEqual(false); + expect(coreState.browser.sharings).toEqual(List()); + expect(coreState.browser.uploadings).toEqual(List()); + expect(coreState.browser.items).toEqual(List()); + + // panes + expect(coreState.panes).toEqual({ + displaying: "login", + paneNames: Set(["login"]), + }); + + // login + expect(coreState.login).toEqual({ + userID: visitorID, + userName: "visitor", + userRole: roleVisitor, + usedSpace: "0", + quota: { + spaceLimit: "0", + uploadSpeedLimit: 0, + downloadSpeedLimit: 0, + }, + authed: false, + captchaID: "mockCaptchaID", + preferences: { + bg: { + url: "", + repeat: "", + position: "", + align: "", + }, + cssURL: "", + lanPackURL: "", + lan: "en_US", + } + }); + + // admin + let usersMap = Map({}); + let roles = Set(); + expect(coreState.admin).toEqual({ + users: usersMap, + roles: roles, + }); + }); +}); diff --git a/src/client/web/src/components/core_state.ts b/src/client/web/src/components/core_state.ts index 15420c5..774da28 100644 --- a/src/client/web/src/components/core_state.ts +++ b/src/client/web/src/components/core_state.ts @@ -41,7 +41,7 @@ export function newState(): ICoreState { export function initState(): ICoreState { return { browser: { - dirPath: List(["."]), + dirPath: List([]), items: List([]), sharings: List([]), isSharing: false, diff --git a/src/client/web/src/components/state_updater.ts b/src/client/web/src/components/state_updater.ts index c1398a4..20494b5 100644 --- a/src/client/web/src/components/state_updater.ts +++ b/src/client/web/src/components/state_updater.ts @@ -314,12 +314,14 @@ export class Updater { return Promise.all([]); } + // redirect to login this.setPanes(Set(["login"])); this.displayPane("login"); return Promise.all([this.getCaptchaID()]); } + if (this.props.login.userRole === roleAdmin) { this.setPanes(Set(["login", "settings", "admin"])); } else { diff --git a/src/handlers/multiusers/handlers.go b/src/handlers/multiusers/handlers.go index 46ef26a..eded733 100644 --- a/src/handlers/multiusers/handlers.go +++ b/src/handlers/multiusers/handlers.go @@ -646,7 +646,6 @@ func (h *MultiUsersSvc) Self(c *gin.Context) { c.JSON(q.ErrResp(c, 500, err)) return } - fmt.Println(user.Preferences) c.JSON(200, &SelfResp{ ID: claims[q.UserIDParam],