test(topbar): add test for topbar

This commit is contained in:
hexxa 2021-11-14 22:42:37 +08:00 committed by Hexxa
parent 9a526736bb
commit e4e53b15f2
5 changed files with 148 additions and 3 deletions

View file

@ -7,5 +7,10 @@ export function alertMsg(msg: string) {
}
export function confirmMsg(msg: string): boolean {
try {
return confirm(msg);
} catch (e) {
console.log(`${msg}: yes (confirm is not implemented)`);
return true;
}
}

View file

@ -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<string>(),
},
};
const listUploadingsMockResp = {
status: 401,
statusText: "",
data: { uploadInfos: new Array<UploadInfo>() },
};
const listHomeMockResp = {
status: 401,
statusText: "",
data: { cwd: "", metadatas: new Array<MetadataResp>() }
};
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<UploadEntry>());
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<string>();
expect(coreState.admin).toEqual({
users: usersMap,
roles: roles,
});
});
});

View file

@ -41,7 +41,7 @@ export function newState(): ICoreState {
export function initState(): ICoreState {
return {
browser: {
dirPath: List<string>(["."]),
dirPath: List<string>([]),
items: List<MetadataResp>([]),
sharings: List<string>([]),
isSharing: false,

View file

@ -314,12 +314,14 @@ export class Updater {
return Promise.all([]);
}
// redirect to login
this.setPanes(Set<string>(["login"]));
this.displayPane("login");
return Promise.all([this.getCaptchaID()]);
}
if (this.props.login.userRole === roleAdmin) {
this.setPanes(Set<string>(["login", "settings", "admin"]));
} else {

View file

@ -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],