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 AllStores = Extract<keyof StoreMapping, string>;
export type Stores<T extends AllStores> = Pick<StoreMapping, T>; export type Stores<T extends AllStores> = Pick<StoreMapping, T>;
// eslint-disable-next-line @typescript-eslint/ban-types export const inject =
export const inject = <I extends AllStores>(...stores: I[]) => <P extends {}>( <I extends AllStores>(...stores: I[]) =>
node: React.ComponentType<P> // eslint-disable-next-line @typescript-eslint/ban-types
): React.ComponentType<Pick<P, Exclude<keyof P, I>>> => <P extends {}>(
// eslint-disable-next-line @typescript-eslint/no-explicit-any node: React.ComponentType<P>
mobxInject(...stores)(node) as any; ): 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> <Provider {...stores}>{children}</Provider>
); );

View File

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

View File

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

View File

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

View File

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