test(fe): add jest mocked clients

This commit is contained in:
hexxa 2022-01-20 10:55:19 +08:00 committed by Hexxa
parent 81d375eafe
commit 40c1d81d58
5 changed files with 147 additions and 35 deletions

View file

@ -6,8 +6,10 @@ import {
ListSharingsResp, ListSharingsResp,
ListSharingIDsResp, ListSharingIDsResp,
GetSharingDirResp, GetSharingDirResp,
IFilesClient,
} from "./"; } from "./";
import { makePromise } from "../test/helpers";
export interface FilesClientResps { export interface FilesClientResps {
createMockRespID?: number; createMockRespID?: number;
createMockResp?: Response; createMockResp?: Response;
@ -34,8 +36,8 @@ export interface FilesClientResps {
} }
const sharingIDs = new Map<string, string>(); const sharingIDs = new Map<string, string>();
sharingIDs.set("/admin/f1", "e123456"); sharingIDs.set("/defaultmock/f1", "e123456");
sharingIDs.set("/admin/f1", "f123456"); sharingIDs.set("/defaultmock/f2", "f123456");
export const resps = { export const resps = {
createMockResp: { status: 200, statusText: "", data: {} }, createMockResp: { status: 200, statusText: "", data: {} },
@ -247,7 +249,7 @@ export class MockFilesClient {
getSharingDir = (): Promise<Response<GetSharingDirResp>> => { getSharingDir = (): Promise<Response<GetSharingDirResp>> => {
return this.wrapPromise(this.resps.getSharingDirMockResp); return this.wrapPromise(this.resps.getSharingDirMockResp);
} };
isSharing = (dirPath: string): Promise<Response> => { isSharing = (dirPath: string): Promise<Response> => {
return this.wrapPromise(this.resps.isSharingMockResp); return this.wrapPromise(this.resps.isSharingMockResp);
@ -261,3 +263,57 @@ export class MockFilesClient {
return this.wrapPromise(this.resps.downloadMockResp); return this.wrapPromise(this.resps.downloadMockResp);
}; };
} }
// JestFilesClient supports jest function mockings
export class JestFilesClient {
private url: string;
constructor(url: string) {
this.url = url;
}
create = jest.fn().mockReturnValueOnce(makePromise(resps.createMockResp));
delete = jest.fn().mockReturnValueOnce(makePromise(resps.deleteMockResp));
metadata = jest.fn().mockReturnValueOnce(makePromise(resps.metadataMockResp));
mkdir = jest.fn().mockReturnValueOnce(makePromise(resps.mkdirMockResp));
move = jest.fn().mockReturnValueOnce(makePromise(resps.moveMockResp));
uploadChunk = jest
.fn()
.mockReturnValueOnce(makePromise(resps.uploadChunkMockResp));
uploadStatus = jest
.fn()
.mockReturnValueOnce(makePromise(resps.uploadStatusMockResp));
list = jest.fn().mockReturnValueOnce(makePromise(resps.listMockResp));
listHome = jest.fn().mockReturnValueOnce(makePromise(resps.listHomeMockResp));
listUploadings = jest
.fn()
.mockReturnValueOnce(makePromise(resps.listUploadingsMockResp));
deleteUploading = jest
.fn()
.mockReturnValueOnce(makePromise(resps.deleteUploadingMockResp));
addSharing = jest
.fn()
.mockReturnValueOnce(makePromise(resps.addSharingMockResp));
deleteSharing = jest
.fn()
.mockReturnValueOnce(makePromise(resps.deleteSharingMockResp));
isSharing = jest
.fn()
.mockReturnValueOnce(makePromise(resps.isSharingMockResp));
listSharings = jest
.fn()
.mockReturnValueOnce(makePromise(resps.listSharingsMockResp));
listSharingIDs = jest
.fn()
.mockReturnValueOnce(makePromise(resps.listSharingIDsMockResp));
getSharingDir = jest
.fn()
.mockReturnValueOnce(makePromise(resps.getSharingDirMockResp));
generateHash = jest
.fn()
.mockReturnValueOnce(makePromise(resps.generateHashMockResp));
download = jest.fn().mockReturnValueOnce(makePromise(resps.downloadMockResp));
}
export const NewMockFilesClient = (url: string): IFilesClient => {
return new JestFilesClient(url);
};

View file

@ -1,13 +1,11 @@
// TODO: replace this with jest mocks import { Response, ISettingsClient, ClientConfigMsg } from "./";
import { Response } from "."; import { makePromise } from "../test/helpers";
import { ClientConfigMsg } from "./";
export interface SettingsClientResps { export interface SettingsClientResps {
healthMockResp?: Response; healthMockResp?: Response;
setClientCfgMockResp?: Response; setClientCfgMockResp?: Response;
getClientCfgMockResp?: Response<ClientConfigMsg>; getClientCfgMockResp?: Response<ClientConfigMsg>;
reportErrorsResp?: Response; reportErrorsMockResp?: Response;
} }
export const resps = { export const resps = {
@ -29,7 +27,7 @@ export const resps = {
}, },
}, },
}, },
reportErrorsResp: { reportErrorsMockResp: {
status: 200, status: 200,
statusText: "", statusText: "",
data: {}, data: {},
@ -67,6 +65,28 @@ export class MockSettingsClient {
}; };
reportErrors = (): Promise<Response> => { reportErrors = (): Promise<Response> => {
return this.wrapPromise(this.resps.reportErrorsResp); return this.wrapPromise(this.resps.reportErrorsMockResp);
}; };
} }
export class JestSettingsClient {
url: string = "";
constructor(url: string) {
this.url = url;
}
health = jest.fn().mockReturnValueOnce(makePromise(resps.healthMockResp));
getClientCfg = jest
.fn()
.mockReturnValueOnce(makePromise(resps.getClientCfgMockResp));
setClientCfg = jest
.fn()
.mockReturnValueOnce(makePromise(resps.setClientCfgMockResp));
reportErrors = jest
.fn()
.mockReturnValueOnce(makePromise(resps.reportErrorsMockResp));
}
export const NewMockSettingsClient = (url: string): ISettingsClient => {
return new JestSettingsClient(url);
};

View file

@ -1,22 +1,22 @@
// TODO: replace this with jest mocks import { makePromise } from "../test/helpers";
import { Response, Quota, Preferences } from "./"; import { IUsersClient, Response, Quota, Preferences } from "./";
export interface UsersClientResps { export interface UsersClientResps {
loginMockResp: Response; loginMockResp?: Response;
logoutMockResp: Response; logoutMockResp?: Response;
isAuthedMockResp: Response; isAuthedMockResp?: Response;
setPwdMockResp: Response; setPwdMockResp?: Response;
setUserMockResp: Response; setUserMockResp?: Response;
forceSetPwdMockResp: Response; forceSetPwdMockResp?: Response;
addUserMockResp: Response; addUserMockResp?: Response;
delUserMockResp: Response; delUserMockResp?: Response;
listUsersMockResp: Response; listUsersMockResp?: Response;
addRoleMockResp: Response; addRoleMockResp?: Response;
delRoleMockResp: Response; delRoleMockResp?: Response;
listRolesMockResp: Response; listRolesMockResp?: Response;
selfMockResp: Response; selfMockResp?: Response;
getCaptchaIDMockResp: Response; getCaptchaIDMockResp?: Response;
setPreferencesMockResp: Response; setPreferencesMockResp?: Response;
} }
export const resps = { export const resps = {
@ -187,3 +187,36 @@ export class MockUsersClient {
return this.wrapPromise(this.resps.setPreferencesMockResp); return this.wrapPromise(this.resps.setPreferencesMockResp);
}; };
} }
export class JestUsersClient {
url: string = "";
constructor(url: string) {
this.url = url;
}
login = jest.fn().mockReturnValue(makePromise(resps.loginMockResp));
logout = jest.fn().mockReturnValue(makePromise(resps.logoutMockResp));
isAuthed = jest.fn().mockReturnValue(makePromise(resps.isAuthedMockResp));
self = jest.fn().mockReturnValue(makePromise(resps.selfMockResp));
setPwd = jest.fn().mockReturnValue(makePromise(resps.setPwdMockResp));
setUser = jest.fn().mockReturnValue(makePromise(resps.setUserMockResp));
forceSetPwd = jest
.fn()
.mockReturnValue(makePromise(resps.forceSetPwdMockResp));
addUser = jest.fn().mockReturnValue(makePromise(resps.addUserMockResp));
delUser = jest.fn().mockReturnValue(makePromise(resps.delUserMockResp));
listUsers = jest.fn().mockReturnValue(makePromise(resps.listUsersMockResp));
addRole = jest.fn().mockReturnValue(makePromise(resps.addRoleMockResp));
delRole = jest.fn().mockReturnValue(makePromise(resps.delRoleMockResp));
listRoles = jest.fn().mockReturnValue(makePromise(resps.listRolesMockResp));
getCaptchaID = jest
.fn()
.mockReturnValue(makePromise(resps.getCaptchaIDMockResp));
setPreferences = jest
.fn()
.mockReturnValue(makePromise(resps.setPreferencesMockResp));
}
export const NewMockUsersClient = (url: string): IUsersClient => {
return new JestUsersClient(url);
};

View file

@ -6,8 +6,12 @@ import { FilesPanel } from "../panel_files";
import { ICoreState, newState } from "../core_state"; import { ICoreState, newState } from "../core_state";
import { updater } from "../state_updater"; import { updater } from "../state_updater";
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 {
NewMockFilesClient,
resps as filesResps,
} from "../../client/files_mock";
import { MockSettingsClient } from "../../client/settings_mock"; import { MockSettingsClient } from "../../client/settings_mock";
import { makePromise } from "../../test/helpers";
describe("FilesPanel", () => { describe("FilesPanel", () => {
const initFilesPanel = (): any => { const initFilesPanel = (): any => {
@ -15,7 +19,7 @@ describe("FilesPanel", () => {
const coreState = newState(); const coreState = newState();
const usersCl = new MockUsersClient(""); const usersCl = new MockUsersClient("");
const filesCl = new MockFilesClient(""); const filesCl = NewMockFilesClient("");
const settingsCl = new MockSettingsClient(""); const settingsCl = new MockSettingsClient("");
updater().init(coreState); updater().init(coreState);
@ -61,16 +65,15 @@ describe("FilesPanel", () => {
const newSharingsResp = new Map<string, string>(); const newSharingsResp = new Map<string, string>();
newSharingsResp.set(sharingDir, "f123456"); newSharingsResp.set(sharingDir, "f123456");
filesCl.setMock({ filesCl.listSharingIDs = jest.fn().mockReturnValueOnce(
...filesResps, makePromise({
listSharingIDsMockResp: {
status: 200, status: 200,
statusText: "", statusText: "",
data: { data: {
IDs: newSharingsResp, IDs: newSharingsResp,
}, },
}, })
}); );
await filesPanel.addSharing(newSharingPath); await filesPanel.addSharing(newSharingPath);

View file

@ -14,8 +14,8 @@ import (
"github.com/ihexxa/gocfg" "github.com/ihexxa/gocfg"
"github.com/ihexxa/quickshare/src/client" "github.com/ihexxa/quickshare/src/client"
fspkg "github.com/ihexxa/quickshare/src/fs"
"github.com/ihexxa/quickshare/src/db/userstore" "github.com/ihexxa/quickshare/src/db/userstore"
fspkg "github.com/ihexxa/quickshare/src/fs"
) )
func startTestServer(config string) *Server { func startTestServer(config string) *Server {