Skip to content

Commit

Permalink
feat(chat-e2e): new conversation tests (#3114)
Browse files Browse the repository at this point in the history
Co-authored-by: Irina_Kartun <[email protected]>
  • Loading branch information
nartovm and irinakartun authored Feb 14, 2025
1 parent ee9247b commit 0c78b1c
Show file tree
Hide file tree
Showing 21 changed files with 790 additions and 46 deletions.
14 changes: 7 additions & 7 deletions apps/chat-e2e/src/assertions/base/baseAssertion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,22 +202,22 @@ export class BaseAssertion {
public async assertElementsCount(
element: BaseElement | Locator,
expectedCount: number,
expectedMessage?: string,
) {
const elementsCount =
element instanceof BaseElement
? await element.getElementsCount()
: await element.count();
expect
.soft(elementsCount, ExpectedMessages.elementsCountIsValid)
.toBe(expectedCount);
}
public async assertCount(expectedCount: number, actualCount: number) {
expect
.soft(actualCount, ExpectedMessages.elementsCountIsValid)
.soft(
elementsCount,
expectedMessage ?? ExpectedMessages.elementsCountIsValid,
)
.toBe(expectedCount);
}

public assertValue(
actualValue: string | number | undefined,
actualValue: string | number | undefined | null,
expectedValue: string | number,
expectedMessage?: string,
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { SideBarEntityAssertion } from '@/src/assertions/sideBarEntityAssertion';
import { SharedWithMeConversationsTree } from '@/src/ui/webElements/entityTree';

export class SharedWithMeConversationAssertion extends SideBarEntityAssertion<SharedWithMeConversationsTree> {}
22 changes: 21 additions & 1 deletion apps/chat-e2e/src/assertions/sideBarAssertion.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { BaseAssertion } from '@/src/assertions/base/baseAssertion';
import { ElementState, ExpectedMessages } from '@/src/testData';
import { SideBar } from '@/src/ui/webElements';
import { expect } from '@playwright/test';

export class SideBarAssertion {
export class SideBarAssertion extends BaseAssertion {
readonly sideBar: SideBar;

constructor(sideBar: SideBar) {
super();
this.sideBar = sideBar;
}

Expand All @@ -19,4 +21,22 @@ export class SideBarAssertion {
.soft(buttonLocator, ExpectedMessages.buttonIsNotVisible)
.toBeHidden();
}

public async assertNoDataInConversations() {
await this.assertElementState(
this.sideBar.noDataIcon,
'visible',
ExpectedMessages.entityIsVisible,
);
await this.assertElementState(
this.sideBar.noDataPlaceholder,
'visible',
ExpectedMessages.entityIsVisible,
);
await this.assertElementText(
this.sideBar.noDataPlaceholder,
'No data',
ExpectedMessages.noData,
);
}
}
5 changes: 4 additions & 1 deletion apps/chat-e2e/src/assertions/sideBarEntityAssertion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ export class SideBarEntityAssertion<
actualCount?: number,
) {
if (actualCount === undefined) {
await this.assertElementsCount(this.sideBarEntitiesTree, expectedCount);
await this.assertElementsCount(
this.sideBarEntitiesTree.treeEntityNames,
expectedCount,
);
} else {
this.assertValue(
expectedCount,
Expand Down
45 changes: 43 additions & 2 deletions apps/chat-e2e/src/core/dialFixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ import { MessageTemplateModalAssertion } from '@/src/assertions/messageTemplateM
import { RenameConversationModalAssertion } from '@/src/assertions/renameConversationModalAssertion';
import { SelectFolderModalAssertion } from '@/src/assertions/selectFolderModalAssertion';
import { SettingsModalAssertion } from '@/src/assertions/settingsModalAssertion';
import { SharedWithMeConversationAssertion } from '@/src/assertions/sharedWithMeConversationAssertion';
import { SideBarEntityAssertion } from '@/src/assertions/sideBarEntityAssertion';
import test from '@/src/core/baseFixtures';
import { isApiStorageType } from '@/src/hooks/global-setup';
Expand Down Expand Up @@ -98,6 +99,8 @@ import {
PromptsToPublishTree,
PromptsTree,
PublishFolder,
SharedFolderConversations,
SharedWithMeConversationsTree,
} from '@/src/ui/webElements/entityTree';
import { OrganizationPromptsTree } from '@/src/ui/webElements/entityTree/sidebar/organizationPromptsTree';
import { ErrorPopup } from '@/src/ui/webElements/errorPopup';
Expand Down Expand Up @@ -219,6 +222,10 @@ const dialTest = test.extend<{
adminUserItemApiHelper: ItemApiHelper;
adminApplicationApiHelper: ApplicationApiHelper;
mainUserShareApiHelper: ShareApiHelper;
sharedWithMeConversations: SharedWithMeConversationsTree;
sharedWithMeConversationDropdownMenu: DropdownMenu;
sharedFolderConversations: SharedFolderConversations;
sharedWithMeFolderDropdownMenu: DropdownMenu;
additionalUserShareApiHelper: ShareApiHelper;
additionalUserItemApiHelper: ItemApiHelper;
additionalSecondUserShareApiHelper: ShareApiHelper;
Expand Down Expand Up @@ -290,6 +297,7 @@ const dialTest = test.extend<{
organizationFolderConversationAssertions: FolderAssertion<Folders>;
messageTemplateModalAssertion: MessageTemplateModalAssertion;
agentVersionsDropdownMenuAssertion: MenuAssertion;
sharedWithMeConversationAssertion: SharedWithMeConversationAssertion;
}>({
beforeTestCleanup: [
async ({ dataInjector, fileApiHelper }, use) => {
Expand All @@ -299,6 +307,39 @@ const dialTest = test.extend<{
},
{ scope: 'test', auto: true },
],
sharedWithMeConversationAssertion: async (
{ sharedWithMeConversations },
use,
) => {
const sharedWithMeConversationAssertion =
new SharedWithMeConversationAssertion(sharedWithMeConversations);
await use(sharedWithMeConversationAssertion);
},
sharedWithMeFolderDropdownMenu: async (
{ sharedFolderConversations },
use,
) => {
const sharedWithMeFolderDropdownMenu =
sharedFolderConversations.getDropdownMenu();
await use(sharedWithMeFolderDropdownMenu);
},
sharedFolderConversations: async ({ chatBar }, use) => {
const sharedFolderConversations = chatBar.getSharedFolderConversations();
await use(sharedFolderConversations);
},
sharedWithMeConversations: async ({ chatBar }, use) => {
const sharedWithMeConversations =
chatBar.getSharedWithMeConversationsTree();
await use(sharedWithMeConversations);
},
sharedWithMeConversationDropdownMenu: async (
{ sharedWithMeConversations },
use,
) => {
const sharedWithMeConversationDropdownMenu =
sharedWithMeConversations.getDropdownMenu();
await use(sharedWithMeConversationDropdownMenu);
},
// eslint-disable-next-line no-empty-pattern
storageState: async ({}, use) => {
await use(stateFilePath(+process.env.TEST_PARALLEL_INDEX!));
Expand Down Expand Up @@ -469,8 +510,8 @@ const dialTest = test.extend<{
chatBar.getOrganizationFolderConversations();
await use(organizationFolderConversations);
},
talkToAgentDialog: async ({ page }, use) => {
const talkToAgentDialog = new TalkToAgentDialog(page);
talkToAgentDialog: async ({ page, modelApiHelper }, use) => {
const talkToAgentDialog = new TalkToAgentDialog(page, modelApiHelper);
await use(talkToAgentDialog);
},
talkToAgents: async ({ talkToAgentDialog }, use) => {
Expand Down
12 changes: 11 additions & 1 deletion apps/chat-e2e/src/core/dialOverlayFixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import {
FileApiHelper,
IconApiHelper,
ItemApiHelper,
ModelApiHelper,
PublicationApiHelper,
ShareApiHelper,
} from '@/src/testData/api';
Expand Down Expand Up @@ -86,6 +87,7 @@ const dialOverlayTest = test.extend<{
overlayPublicationApiHelper: PublicationApiHelper;
overlayFileApiHelper: FileApiHelper;
overlayIconApiHelper: IconApiHelper;
overlayModelApiHelper: ModelApiHelper;
overlayApiInjector: ApiInjector;
overlayDataInjector: DataInjectorInterface;
overlayBaseAssertion: BaseAssertion;
Expand Down Expand Up @@ -208,6 +210,10 @@ const dialOverlayTest = test.extend<{
const overlayIconApiHelper = new IconApiHelper(request);
await use(overlayIconApiHelper);
},
overlayModelApiHelper: async ({ request }, use) => {
const overlayModelApiHelper = new ModelApiHelper(request);
await use(overlayModelApiHelper);
},
overlayApiInjector: async ({ overlayItemApiHelper }, use) => {
const overlayApiInjector = new ApiInjector(overlayItemApiHelper);
await use(overlayApiInjector);
Expand Down Expand Up @@ -235,9 +241,13 @@ const dialOverlayTest = test.extend<{
const overlayApiAssertion = new ApiAssertion();
await use(overlayApiAssertion);
},
overlayTalkToAgentDialog: async ({ page, overlayHomePage }, use) => {
overlayTalkToAgentDialog: async (
{ page, overlayHomePage, overlayModelApiHelper },
use,
) => {
const overlayTalkToAgentDialog = new TalkToAgentDialog(
page,
overlayModelApiHelper,
overlayHomePage.getOverlayContainer().getElementLocator(),
);
await use(overlayTalkToAgentDialog);
Expand Down
28 changes: 26 additions & 2 deletions apps/chat-e2e/src/core/dialSharedWithMeFixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,13 @@ import { PromptListAssertion } from '@/src/assertions/promptListAssertion';
import { PromptModalAssertion } from '@/src/assertions/promptModalAssertion';
import { SendMessageAssertion } from '@/src/assertions/sendMessageAssertion';
import { SharedPromptPreviewModalAssertion } from '@/src/assertions/sharedPromptPreviewModalAssertion';
import { SharedWithMeConversationAssertion } from '@/src/assertions/sharedWithMeConversationAssertion';
import { SharedWithMePromptsAssertion } from '@/src/assertions/sharedWithMePromptsAssertion';
import { VariableModalAssertion } from '@/src/assertions/variableModalAssertion';
import dialTest, { stateFilePath } from '@/src/core/dialFixtures';
import { LocalStorageManager } from '@/src/core/localStorageManager';
import { isApiStorageType } from '@/src/hooks/global-setup';
import { FileApiHelper } from '@/src/testData/api';
import { FileApiHelper, ModelApiHelper } from '@/src/testData/api';
import { ApiInjector } from '@/src/testData/injector/apiInjector';
import { BrowserStorageInjector } from '@/src/testData/injector/browserStorageInjector';
import { DataInjectorInterface } from '@/src/testData/injector/dataInjectorInterface';
Expand Down Expand Up @@ -79,6 +80,7 @@ const dialSharedWithMeTest = dialTest.extend<{
additionalShareUserConversationSettingsModal: ConversationSettingsModal;
additionalShareUserAgentSettings: AgentSettings;
additionalShareUserChatHeader: ChatHeader;
additionalShareUserModelApiHelper: ModelApiHelper;
additionalShareUserTalkToAgentDialog: TalkToAgentDialog;
additionalShareUserChatMessages: ChatMessages;
additionalShareUserSendMessage: SendMessage;
Expand Down Expand Up @@ -106,6 +108,7 @@ const dialSharedWithMeTest = dialTest.extend<{
additionalShareUserFileApiHelper: FileApiHelper;
additionalShareUserPromptModalDialog: PromptModalDialog;
additionalShareUserSharedWithMePromptAssertion: SharedWithMePromptsAssertion;
additionalShareUserSharedWithMeConversationAssertion: SharedWithMeConversationAssertion;
additionalShareUserSharedPromptPreviewModalAssertion: SharedPromptPreviewModalAssertion;
additionalShareUserSendMessageAssertion: SendMessageAssertion;
additionalShareUserVariableModalAssertion: VariableModalAssertion;
Expand Down Expand Up @@ -378,12 +381,23 @@ const dialSharedWithMeTest = dialTest.extend<{
additionalShareUserChat.getChatHeader();
await use(additionalShareUserChatHeader);
},
additionalShareUserModelApiHelper: async (
{ additionalShareUserRequestContext },
use,
) => {
const additionalShareUserModelApiHelper = new ModelApiHelper(
additionalShareUserRequestContext,
BucketUtil.getAdditionalShareUserBucket(),
);
await use(additionalShareUserModelApiHelper);
},
additionalShareUserTalkToAgentDialog: async (
{ additionalShareUserPage },
{ additionalShareUserPage, additionalShareUserModelApiHelper },
use,
) => {
const additionalShareUserTalkToAgentDialog = new TalkToAgentDialog(
additionalShareUserPage,
additionalShareUserModelApiHelper,
);
await use(additionalShareUserTalkToAgentDialog);
},
Expand Down Expand Up @@ -535,6 +549,16 @@ const dialSharedWithMeTest = dialTest.extend<{
new SharedWithMePromptsAssertion(additionalShareUserSharedWithMePrompts);
await use(additionalShareUserSharedWithMePromptAssertion);
},
additionalShareUserSharedWithMeConversationAssertion: async (
{ additionalShareUserSharedWithMeConversations },
use,
) => {
const additionalShareUserSharedWithMeConversationAssertion =
new SharedWithMeConversationAssertion(
additionalShareUserSharedWithMeConversations,
);
await use(additionalShareUserSharedWithMeConversationAssertion);
},
additionalShareUserSharedPromptPreviewModalAssertion: async (
{ additionalShareUserPromptPreviewModal },
use,
Expand Down
13 changes: 13 additions & 0 deletions apps/chat-e2e/src/core/localStorageManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,19 @@ export class LocalStorageManager {
);
}

async setLastConversationSettings(storageValue: string) {
await this.page.addInitScript(
(data) => {
const { storageKey, storageValue } = data;
localStorage.setItem(storageKey, storageValue);
},
{
storageKey: 'lastConversationSettings',
storageValue: storageValue,
},
);
}

async setRecentAddonsIds(...addons: DialAIEntityModel[]) {
await this.page.addInitScript(
this.setRecentAddonsIdsKey(),
Expand Down
2 changes: 1 addition & 1 deletion apps/chat-e2e/src/testData/api/itemApiHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export class ItemApiHelper extends BaseApiHelper {
await this.deleteBackendItem(
...conversations,
...prompts,
...apps.filter((a) => a.name.startsWith(applicationNamePrefix)),
...apps.filter((a) => a.name.includes(applicationNamePrefix)),
);
}

Expand Down
1 change: 1 addition & 0 deletions apps/chat-e2e/src/testData/expectedMessages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ export enum ExpectedMessages {
elementIsVisible = 'Elements is visible',
elementIsNotVisible = 'Elements is not visible',
noConversationIsSelected = 'No conversation is selected',
noData = 'No data in the conversation section',
}

export enum PublishingExpectedMessages {
Expand Down
12 changes: 7 additions & 5 deletions apps/chat-e2e/src/tests/entityIcon.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ dialTest(
setTestIds('EPMRTC-1036', 'EPMRTC-1038');

const defaultModel = ModelsUtil.getDefaultModel()!;
let allExpectedEntities: DialAIEntityModel[];

await dialTest.step(
'Open initial screen and click "Go to my workspace" to view all available entities',
Expand All @@ -43,17 +44,18 @@ dialTest(
await dialHomePage.waitForPageLoaded();
await chat.changeAgentButton.click();
await talkToAgentDialog.goToMyWorkspace();
await marketplaceContainer.goToMarketplaceHome();
allExpectedEntities = ModelsUtil.getLatestOpenAIEntities(
await modelApiHelper.getModels(),
);
await marketplaceContainer.goToMarketplaceHome(
allExpectedEntities.length,
);
},
);

await dialTest.step('Verify all entities have valid icons', async () => {
const allExpectedEntities = ModelsUtil.getLatestOpenAIEntities(
await modelApiHelper.getModels(),
);
const randomEntity =
GeneratorUtil.randomArrayElement(allExpectedEntities);

await marketplaceAgents.waitForAgentByIndex(allExpectedEntities.length);
const actualIcons = await marketplaceAgents.getAgentsIcons();
expect
Expand Down
Loading

0 comments on commit 0c78b1c

Please sign in to comment.