Skip to content

Commit 67fb453

Browse files
authored
chore(e2e): screenshot in assistant e2e tests (#7553)
screenshot in assistant e2e tests
1 parent eaa702c commit 67fb453

File tree

1 file changed

+152
-122
lines changed

1 file changed

+152
-122
lines changed

packages/compass-e2e-tests/tests/assistant.test.ts

Lines changed: 152 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
screenshotIfFailed,
1111
DEFAULT_CONNECTION_NAME_1,
1212
skipForWeb,
13+
screenshotPathName,
1314
} from '../helpers/compass';
1415
import type { Compass } from '../helpers/compass';
1516
import * as Selectors from '../helpers/selectors';
@@ -48,124 +49,129 @@ describe('MongoDB Assistant', function () {
4849
const collectionName = 'entryPoints';
4950

5051
before(async function () {
51-
mockAtlasServer = await startMockAtlasServiceServer();
52-
mockAssistantServer = await startMockAssistantServer();
52+
try {
53+
mockAtlasServer = await startMockAtlasServiceServer();
54+
mockAssistantServer = await startMockAssistantServer();
5355

54-
process.env.COMPASS_ATLAS_SERVICE_UNAUTH_BASE_URL_OVERRIDE =
55-
mockAtlasServer.endpoint;
56+
process.env.COMPASS_ATLAS_SERVICE_UNAUTH_BASE_URL_OVERRIDE =
57+
mockAtlasServer.endpoint;
5658

57-
telemetry = await startTelemetryServer();
58-
compass = await init(this.test?.fullTitle());
59+
telemetry = await startTelemetryServer();
60+
compass = await init(this.test?.fullTitle());
5961

60-
sendMessage = async (
61-
text: string,
62-
{
63-
response = {
64-
status: 200,
65-
body: testResponse,
66-
},
67-
expectedResult = 'success',
68-
}: {
69-
response?: MockAssistantResponse;
70-
expectedResult?: 'success' | 'opt-in';
71-
} = {}
72-
) => {
73-
const existingMessages = await getDisplayedMessages(browser);
74-
75-
mockAssistantServer.setResponse(response);
76-
const chatInput = browser.$(Selectors.AssistantChatInputTextArea);
77-
await chatInput.waitForDisplayed();
78-
await chatInput.setValue(text);
79-
await browser.clickVisible(Selectors.AssistantChatSubmitButton);
80-
81-
switch (expectedResult) {
82-
case 'success':
83-
await browser.waitUntil(async () => {
84-
const newMessages = await getDisplayedMessages(browser);
85-
return (
86-
newMessages.length > existingMessages.length &&
87-
newMessages.some(
88-
(message) =>
89-
message.text === response?.body &&
90-
message.role === 'assistant'
91-
) &&
92-
newMessages.some(
93-
(message) => message.text === text && message.role === 'user'
94-
)
95-
);
96-
});
97-
break;
98-
case 'opt-in':
99-
await browser
100-
.$(Selectors.AIOptInModalAcceptButton)
101-
.waitForDisplayed();
102-
}
103-
};
104-
105-
const setup = async () => {
106-
browser = compass.browser;
107-
await setAIFeatures(true);
108-
109-
await browser.setupDefaultConnections();
110-
await browser.connectToDefaults();
111-
await browser.selectConnectionMenuItem(
112-
DEFAULT_CONNECTION_NAME_1,
113-
Selectors.CreateDatabaseButton,
114-
false
115-
);
116-
await browser.addDatabase(dbName, collectionName);
117-
118-
await browser.navigateToCollectionTab(
119-
DEFAULT_CONNECTION_NAME_1,
120-
dbName,
121-
collectionName,
122-
'Aggregations'
123-
);
124-
};
125-
126-
setAIFeatures = async (newValue: boolean) => {
127-
if (isTestingWeb()) {
128-
await browser.setEnv(
129-
'COMPASS_OVERRIDE_ENABLE_AI_FEATURES',
130-
newValue ? 'true' : 'false'
62+
sendMessage = async (
63+
text: string,
64+
{
65+
response = {
66+
status: 200,
67+
body: testResponse,
68+
},
69+
expectedResult = 'success',
70+
}: {
71+
response?: MockAssistantResponse;
72+
expectedResult?: 'success' | 'opt-in';
73+
} = {}
74+
) => {
75+
const existingMessages = await getDisplayedMessages(browser);
76+
77+
mockAssistantServer.setResponse(response);
78+
const chatInput = browser.$(Selectors.AssistantChatInputTextArea);
79+
await chatInput.waitForDisplayed();
80+
await chatInput.setValue(text);
81+
await browser.clickVisible(Selectors.AssistantChatSubmitButton);
82+
83+
switch (expectedResult) {
84+
case 'success':
85+
await browser.waitUntil(async () => {
86+
const newMessages = await getDisplayedMessages(browser);
87+
return (
88+
newMessages.length > existingMessages.length &&
89+
newMessages.some(
90+
(message) =>
91+
message.text === response?.body &&
92+
message.role === 'assistant'
93+
) &&
94+
newMessages.some(
95+
(message) => message.text === text && message.role === 'user'
96+
)
97+
);
98+
});
99+
break;
100+
case 'opt-in':
101+
await browser
102+
.$(Selectors.AIOptInModalAcceptButton)
103+
.waitForDisplayed();
104+
}
105+
};
106+
107+
const setup = async () => {
108+
browser = compass.browser;
109+
await setAIFeatures(true);
110+
111+
await browser.setupDefaultConnections();
112+
await browser.connectToDefaults();
113+
await browser.selectConnectionMenuItem(
114+
DEFAULT_CONNECTION_NAME_1,
115+
Selectors.CreateDatabaseButton,
116+
false
131117
);
132-
}
133-
await browser.setFeature('enableGenAIFeatures', newValue);
118+
await browser.addDatabase(dbName, collectionName);
134119

135-
if (newValue) {
136-
await browser.$(Selectors.AssistantDrawerButton).waitForDisplayed();
137-
} else {
138-
await browser.$(Selectors.AssistantDrawerButton).waitForDisplayed({
139-
reverse: true,
140-
});
141-
}
142-
};
143-
144-
setAIOptIn = async (newValue: boolean) => {
145-
if (
146-
isTestingWeb() ||
147-
((await browser.getFeature('optInGenAIFeatures')) === true &&
148-
newValue === false)
149-
) {
150-
await cleanup(compass);
151-
// Reseting the opt-in to false can be tricky so it's best to start over in this case.
152-
compass = await init(this.test?.fullTitle(), { firstRun: true });
153-
await setup();
120+
await browser.navigateToCollectionTab(
121+
DEFAULT_CONNECTION_NAME_1,
122+
dbName,
123+
collectionName,
124+
'Aggregations'
125+
);
126+
};
154127

128+
setAIFeatures = async (newValue: boolean) => {
155129
if (isTestingWeb()) {
156-
await setAIFeatures(true);
130+
await browser.setEnv(
131+
'COMPASS_OVERRIDE_ENABLE_AI_FEATURES',
132+
newValue ? 'true' : 'false'
133+
);
157134
}
158-
await browser.setFeature(
159-
'optInGenAIFeatures',
160-
newValue ? 'true' : 'false'
161-
);
162-
return;
163-
}
135+
await browser.setFeature('enableGenAIFeatures', newValue);
164136

165-
await browser.setFeature('optInGenAIFeatures', newValue);
166-
};
137+
if (newValue) {
138+
await browser.$(Selectors.AssistantDrawerButton).waitForDisplayed();
139+
} else {
140+
await browser.$(Selectors.AssistantDrawerButton).waitForDisplayed({
141+
reverse: true,
142+
});
143+
}
144+
};
145+
146+
setAIOptIn = async (newValue: boolean) => {
147+
if (
148+
isTestingWeb() ||
149+
((await browser.getFeature('optInGenAIFeatures')) === true &&
150+
newValue === false)
151+
) {
152+
await cleanup(compass);
153+
// Reseting the opt-in to false can be tricky so it's best to start over in this case.
154+
compass = await init(this.test?.fullTitle(), { firstRun: true });
155+
await setup();
156+
157+
if (isTestingWeb()) {
158+
await setAIFeatures(true);
159+
}
160+
await browser.setFeature(
161+
'optInGenAIFeatures',
162+
newValue ? 'true' : 'false'
163+
);
164+
return;
165+
}
166+
167+
await browser.setFeature('optInGenAIFeatures', newValue);
168+
};
167169

168-
await setup();
170+
await setup();
171+
} catch (err) {
172+
await browser.screenshot(screenshotPathName('before-MongoDB-Assistant'));
173+
throw err;
174+
}
169175
});
170176

171177
after(async function () {
@@ -179,10 +185,17 @@ describe('MongoDB Assistant', function () {
179185
});
180186

181187
afterEach(async function () {
182-
mockAssistantServer.clearRequests();
183-
await clearChat(browser);
184-
185188
await screenshotIfFailed(compass, this.currentTest);
189+
190+
try {
191+
mockAssistantServer.clearRequests();
192+
await clearChat(browser);
193+
} catch (err) {
194+
await browser.screenshot(
195+
screenshotPathName('afterEach-MongoDB-Assistant')
196+
);
197+
throw err;
198+
}
186199
});
187200

188201
describe('drawer visibility', function () {
@@ -296,8 +309,13 @@ describe('MongoDB Assistant', function () {
296309
this,
297310
'E2E testing for opt-in on compass-web is not yet implemented'
298311
);
299-
await setAIOptIn(false);
300-
await openAssistantDrawer(browser);
312+
try {
313+
await setAIOptIn(false);
314+
await openAssistantDrawer(browser);
315+
} catch (err) {
316+
await browser.screenshot(screenshotPathName('before-opting-in'));
317+
throw err;
318+
}
301319
});
302320

303321
it('sends the message if the user opts in', async function () {
@@ -323,8 +341,13 @@ describe('MongoDB Assistant', function () {
323341

324342
describe('after opt-in', function () {
325343
before(async function () {
326-
await setAIOptIn(true);
327-
await openAssistantDrawer(browser);
344+
try {
345+
await setAIOptIn(true);
346+
await openAssistantDrawer(browser);
347+
} catch (err) {
348+
await browser.screenshot(screenshotPathName('before-after-opting-in'));
349+
throw err;
350+
}
328351
});
329352

330353
describe('clear chat button', function () {
@@ -442,13 +465,20 @@ describe('MongoDB Assistant', function () {
442465
describe('entry points', function () {
443466
describe('explain plan entry point', function () {
444467
before(async function () {
445-
await setAIOptIn(true);
446-
await setAIFeatures(true);
447-
448-
mockAssistantServer.setResponse({
449-
status: 200,
450-
body: 'You should create an index.',
451-
});
468+
try {
469+
await setAIOptIn(true);
470+
await setAIFeatures(true);
471+
472+
mockAssistantServer.setResponse({
473+
status: 200,
474+
body: 'You should create an index.',
475+
});
476+
} catch (err) {
477+
await browser.screenshot(
478+
screenshotPathName('before-explain-plan-entry-point')
479+
);
480+
throw err;
481+
}
452482
});
453483

454484
it('opens assistant with explain plan prompt when clicking "Interpret for me"', async function () {

0 commit comments

Comments
 (0)