This commit is contained in:
Jannis Mattheis 2021-06-17 19:31:52 +02:00
parent 819a881557
commit a2d44968e5
5 changed files with 91 additions and 88 deletions

View File

@ -23,13 +23,15 @@ export interface StoreMapping {
export type AllStores = Extract<keyof StoreMapping, string>;
export type Stores<T extends AllStores> = Pick<StoreMapping, T>;
// eslint-disable-next-line @typescript-eslint/ban-types
export const inject = <I extends AllStores>(...stores: I[]) => <P extends {}>(
node: React.ComponentType<P>
): React.ComponentType<Pick<P, Exclude<keyof P, I>>> =>
// eslint-disable-next-line @typescript-eslint/no-explicit-any
mobxInject(...stores)(node) as any;
export const inject =
<I extends AllStores>(...stores: I[]) =>
// eslint-disable-next-line @typescript-eslint/ban-types
<P extends {}>(
node: React.ComponentType<P>
): React.ComponentType<Pick<P, Exclude<keyof P, I>>> =>
// eslint-disable-next-line @typescript-eslint/no-explicit-any
mobxInject(...stores)(node) as any;
export const InjectProvider: React.SFC<{stores: StoreMapping}> = ({children, stores}) => (
export const InjectProvider: React.FC<{stores: StoreMapping}> = ({children, stores}) => (
<Provider {...stores}>{children}</Provider>
);

View File

@ -26,43 +26,42 @@ const hiddenToken = '•••••••••••••••';
const $table = selector.table('#app-table');
const $dialog = selector.form('#app-dialog');
const hasApp = (
name: string,
description: string,
row: number
): (() => Promise<void>) => async () => {
expect(await innerText(page, $table.cell(row, Col.Name))).toBe(name);
expect(await innerText(page, $table.cell(row, Col.Token))).toBe(hiddenToken);
expect(await innerText(page, $table.cell(row, Col.Description))).toBe(description);
};
const hasApp =
(name: string, description: string, row: number): (() => Promise<void>) =>
async () => {
expect(await innerText(page, $table.cell(row, Col.Name))).toBe(name);
expect(await innerText(page, $table.cell(row, Col.Token))).toBe(hiddenToken);
expect(await innerText(page, $table.cell(row, Col.Description))).toBe(description);
};
const updateApp = (
id: number,
data: {name?: string; description?: string}
): (() => Promise<void>) => async () => {
await page.click($table.cell(id, Col.EditUpdate, '.edit'));
await page.waitForSelector($dialog.selector());
if (data.name) {
const nameSelector = $dialog.input('.name');
await clearField(page, nameSelector);
await page.type(nameSelector, data.name);
}
if (data.description) {
const descSelector = $dialog.textarea('.description');
await clearField(page, descSelector);
await page.type(descSelector, data.description);
}
await page.click($dialog.button('.update'));
await waitToDisappear(page, $dialog.selector());
};
const updateApp =
(id: number, data: {name?: string; description?: string}): (() => Promise<void>) =>
async () => {
await page.click($table.cell(id, Col.EditUpdate, '.edit'));
await page.waitForSelector($dialog.selector());
if (data.name) {
const nameSelector = $dialog.input('.name');
await clearField(page, nameSelector);
await page.type(nameSelector, data.name);
}
if (data.description) {
const descSelector = $dialog.textarea('.description');
await clearField(page, descSelector);
await page.type(descSelector, data.description);
}
await page.click($dialog.button('.update'));
await waitToDisappear(page, $dialog.selector());
};
const createApp = (name: string, description: string): (() => Promise<void>) => async () => {
await page.click('#create-app');
await page.waitForSelector($dialog.selector());
await page.type($dialog.input('.name'), name);
await page.type($dialog.textarea('.description'), description);
await page.click($dialog.button('.create'));
};
const createApp =
(name: string, description: string): (() => Promise<void>) =>
async () => {
await page.click('#create-app');
await page.waitForSelector($dialog.selector());
await page.type($dialog.input('.name'), name);
await page.type($dialog.textarea('.description'), description);
await page.click($dialog.button('.create'));
};
describe('Application', () => {
it('does login', async () => await auth.login(page));

View File

@ -21,21 +21,25 @@ enum Col {
Delete = 4,
}
const hasClient = (name: string, row: number): (() => Promise<void>) => async () => {
expect(await innerText(page, $table.cell(row, Col.Name))).toBe(name);
};
const hasClient =
(name: string, row: number): (() => Promise<void>) =>
async () => {
expect(await innerText(page, $table.cell(row, Col.Name))).toBe(name);
};
const updateClient = (id: number, data: {name?: string}): (() => Promise<void>) => async () => {
await page.click($table.cell(id, Col.Edit, '.edit'));
await page.waitForSelector($dialog.selector());
if (data.name) {
const nameSelector = $dialog.input('.name');
await clearField(page, nameSelector);
await page.type(nameSelector, data.name);
}
await page.click($dialog.button('.update'));
await waitToDisappear(page, $dialog.selector());
};
const updateClient =
(id: number, data: {name?: string}): (() => Promise<void>) =>
async () => {
await page.click($table.cell(id, Col.Edit, '.edit'));
await page.waitForSelector($dialog.selector());
if (data.name) {
const nameSelector = $dialog.input('.name');
await clearField(page, nameSelector);
await page.type(nameSelector, data.name);
}
await page.click($dialog.button('.update'));
await waitToDisappear(page, $dialog.selector());
};
const $table = selector.table('#client-table');
const $dialog = selector.form('#client-dialog');
@ -53,12 +57,14 @@ describe('Client', () => {
expect(await count(page, $table.rows())).toBe(1);
});
describe('create clients', () => {
const createClient = (name: string): (() => Promise<void>) => async () => {
await page.click('#create-client');
await page.waitForSelector($dialog.selector());
await page.type($dialog.input('.name'), name);
await page.click($dialog.button('.create'));
};
const createClient =
(name: string): (() => Promise<void>) =>
async () => {
await page.click('#create-client');
await page.waitForSelector($dialog.selector());
await page.type($dialog.input('.name'), name);
await page.click($dialog.button('.create'));
};
it('phone', createClient('phone'));
it('desktop app', createClient('desktop app'));
});

View File

@ -205,9 +205,9 @@ describe('Messages', () => {
it('deletes a windows message', async () => {
await navigate('Windows');
await page.evaluate(() =>
(document.querySelectorAll(
'#messages .message .delete'
)[1] as HTMLButtonElement).click()
(
document.querySelectorAll('#messages .message .delete')[1] as HTMLButtonElement
).click()
);
await expectMessages({
all: [linux2, windows3, backup1, linux1, windows1],

View File

@ -35,33 +35,29 @@ describe('User', () => {
expect(await count(page, $table.rows())).toBe(1);
});
describe('create users', () => {
const createUser = (
name: string,
password: string,
isAdmin: boolean
): (() => Promise<void>) => async () => {
await page.click('#create-user');
await page.waitForSelector($dialog.selector());
await page.type($dialog.input('.name'), name);
await page.type($dialog.input('.password'), password);
if (isAdmin) {
await page.click($dialog.input('.admin-rights'));
}
await page.click($dialog.button('.save-create'));
await waitToDisappear(page, $dialog.selector());
};
const createUser =
(name: string, password: string, isAdmin: boolean): (() => Promise<void>) =>
async () => {
await page.click('#create-user');
await page.waitForSelector($dialog.selector());
await page.type($dialog.input('.name'), name);
await page.type($dialog.input('.password'), password);
if (isAdmin) {
await page.click($dialog.input('.admin-rights'));
}
await page.click($dialog.button('.save-create'));
await waitToDisappear(page, $dialog.selector());
};
it('nicories', createUser('nicories', '123', false));
it('jmattheis', createUser('jmattheis', 'noice', true));
it('dude', createUser('dude', '1', false));
});
const hasUser = (
name: string,
isAdmin: boolean,
row: number
): (() => Promise<void>) => async () => {
expect(await innerText(page, $table.cell(row, Col.Name))).toBe(name);
expect(await innerText(page, $table.cell(row, Col.Admin))).toBe(isAdmin ? 'Yes' : 'No');
};
const hasUser =
(name: string, isAdmin: boolean, row: number): (() => Promise<void>) =>
async () => {
expect(await innerText(page, $table.cell(row, Col.Name))).toBe(name);
expect(await innerText(page, $table.cell(row, Col.Admin))).toBe(isAdmin ? 'Yes' : 'No');
};
describe('has created users', () => {
it('has four users', async () => {