Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/meteor/client/views/modal/uikit/ModalBlock.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,10 @@ const ModalBlock = ({ view, errors, onSubmit, onClose, onCancel }: ModalBlockPar
return (
<AnimatedVisibility visibility={AnimatedVisibility.UNHIDING}>
<FocusScope contain restoreFocus autoFocus>
<Modal open id={id} ref={ref}>
<Modal aria-labelledby={`${id}-title`} open id={id} ref={ref}>
<ModalHeader>
{view.showIcon ? <ModalThumb url={getURL(`/api/apps/${view.appId}/icon`)} /> : null}
<ModalTitle>{modalParser.text(view.title, UiKit.BlockContext.NONE, 0)}</ModalTitle>
<ModalTitle id={`${id}-title`}>{modalParser.text(view.title, UiKit.BlockContext.NONE, 0)}</ModalTitle>
<ModalClose tabIndex={-1} onClick={onClose} />
</ModalHeader>
<ModalContent>
Expand Down
24 changes: 9 additions & 15 deletions apps/meteor/tests/e2e/apps/apps-modal.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,23 @@ import type { Page } from '@playwright/test';
import { IS_EE } from '../config/constants';
import { Users } from '../fixtures/userStates';
import { HomeChannel } from '../page-objects';
import { Modal } from '../page-objects/modal';
import { AppsModal } from '../page-objects/fragments/apps-modal';
import { expect, test } from '../utils/test';

test.use({ storageState: Users.user1.state });

test.describe.serial('Apps > Modal', () => {
test.skip(!IS_EE, 'Premium Only');
let poHomeChannel: HomeChannel;
let poModal: Modal;
let poModal: AppsModal;

let page: Page;

test.beforeAll(async ({ browser }) => {
page = await browser.newPage();

poHomeChannel = new HomeChannel(page);
poModal = new Modal(page);
poModal = new AppsModal(page);

await page.goto('/home');
await poHomeChannel.sidenav.openChat('general');
Expand All @@ -29,23 +29,17 @@ test.describe.serial('Apps > Modal', () => {
await page.close();
});

test('expect allow user open app modal', async () => {
test('should allow user open app modal', async () => {
await poHomeChannel.content.dispatchSlashCommand('/modal');
await expect(poModal.btnModalSubmit).toBeVisible();
await poModal.waitForDisplay();
});

test('expect validation error message appears in app modal', async () => {
await expect(poModal.textInput).toBeVisible();

await poModal.btnModalSubmit.click();

test('should display validation error message in app modal', async () => {
await poModal.btnSubmit.click();
await expect(poModal.textInputErrorMessage).toBeVisible();
});

test("expect validation error message don't appears in app modal", async () => {
await poModal.textInput.fill('something');
await poModal.btnModalSubmit.click();

await expect(poModal.textInputErrorMessage).not.toBeVisible();
test('should not display validation error message in app modal', async () => {
await poModal.submit('something');
});
});
29 changes: 29 additions & 0 deletions apps/meteor/tests/e2e/page-objects/fragments/apps-modal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import type { Locator, Page } from 'playwright-core';

import { Modal } from './modal';

export class AppsModal extends Modal {
protected readonly page: Page;

constructor(page: Page) {
super(page.getByRole('dialog', { name: 'Modal Example' }));
}

get textInput(): Locator {
return this.root.locator('[name="modal_input"]');
}
Comment thread
dougfabris marked this conversation as resolved.

get textInputErrorMessage(): Locator {
return this.root.getByText('Validation failed');
}

get btnSubmit(): Locator {
return this.root.getByRole('button', { name: 'Submit' });
}

async submit(inputText: string) {
await this.textInput.fill(inputText);
await this.btnSubmit.click();
await this.waitForDismissal();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { Page } from 'playwright-core';

import { Modal } from './modal';

export class EditStatusModal extends Modal {
protected readonly page: Page;

constructor(page: Page) {
super(page.getByRole('dialog', { name: 'Edit Status' }));
}

private get statusMessageInput() {
return this.root.getByRole('textbox', { name: 'Status message' });
}

async changeStatusMessage(statusMessage: string): Promise<void> {
await this.statusMessageInput.fill(statusMessage);
await this.save();
}
}
13 changes: 13 additions & 0 deletions apps/meteor/tests/e2e/page-objects/fragments/modal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,20 @@ import { expect } from '../../utils/test';
export abstract class Modal {
constructor(protected root: Locator) {}

waitForDisplay() {
return expect(this.root).toBeVisible();
}

waitForDismissal() {
return expect(this.root).not.toBeVisible();
}

private get btnSave() {
return this.root.getByRole('button', { name: 'Save' });
}

async save() {
await this.btnSave.click();
await this.waitForDismissal();
}
}
1 change: 0 additions & 1 deletion apps/meteor/tests/e2e/page-objects/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,5 @@ export * from './omnichannel-settings';
export * from './omnichannel-business-hours';
export * from './omnichannel-tags';
export * from './utils';
export * from './modal';
export * from './marketplace';
export * from './toastBar';
28 changes: 0 additions & 28 deletions apps/meteor/tests/e2e/page-objects/modal.ts

This file was deleted.

7 changes: 3 additions & 4 deletions apps/meteor/tests/e2e/presence.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { DEFAULT_USER_CREDENTIALS, IS_EE } from './config/constants';
import { Users } from './fixtures/userStates';
import { Registration, HomeChannel } from './page-objects';
import { Modal } from './page-objects/modal';
import { EditStatusModal } from './page-objects/fragments/edit-status-modal';
import { setSettingValueById } from './utils/setSettingValueById';
import { test, expect } from './utils/test';

Expand Down Expand Up @@ -48,12 +48,11 @@ test.describe.serial('Presence', () => {
const user1Page = await browser.newPage({ storageState: Users.user1.state });
await user1Page.goto('/home');
const user1Channel = new HomeChannel(user1Page);
const user1Modal = new Modal(user1Page);
const user1Modal = new EditStatusModal(user1Page);

await user1Channel.sidenav.btnUserProfileMenu.click();
await user1Channel.sidenav.getUserProfileMenuOption('Custom Status').click();
await user1Modal.getModalByName('Edit Status').getByRole('textbox', { name: 'Status message' }).fill('new status');
await user1Modal.getModalByName('Edit Status').getByRole('button', { name: 'Save' }).click();
await user1Modal.changeStatusMessage('new status');

await user1Page.close();
});
Expand Down
Loading