Skip to content

Commit edfcdf6

Browse files
authored
chore(e2e): Port My Queries tests, fix Refresh Databases COMPASS-8006 (#6017)
* Port My Queries tests, fix Refresh Databases * remove commented code * attempt at a better test for refresh button in sidebar * broken My Queries test * only refresh databases for the one connection * don't need those screenshots
1 parent 18e86cc commit edfcdf6

File tree

7 files changed

+76
-25
lines changed

7 files changed

+76
-25
lines changed

packages/compass-app-stores/src/stores/instance-store.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,15 @@ export function createInstancesStore(
111111
// Event emitted when the Databases grid needs to be refreshed. We
112112
// additionally refresh the list of collections as well since there is the
113113
// side navigation which could be in expanded mode
114-
async function refreshDatabases() {
114+
async function refreshDatabases({
115+
connectionId,
116+
}: {
117+
connectionId: string;
118+
}) {
119+
if (instanceConnectionId !== connectionId) {
120+
return;
121+
}
122+
115123
try {
116124
await instance.fetchDatabases({ dataService, force: true });
117125
await Promise.allSettled(

packages/compass-e2e-tests/tests/instance-sidebar.test.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,15 @@ describe('Instance sidebar', function () {
208208
const db = 'test';
209209
const coll = `coll_${Date.now()}`;
210210

211+
// expand the database entry in the sidebar
212+
await browser.clickVisible(Selectors.sidebarDatabase(db));
213+
214+
// wait until the collections finish loading
215+
const numbersCollectionElement = await browser.$(
216+
Selectors.sidebarCollection(db, 'numbers')
217+
);
218+
await numbersCollectionElement.waitForDisplayed();
219+
211220
const mongoClient = new MongoClient(DEFAULT_CONNECTION_STRING);
212221
await mongoClient.connect();
213222
try {
@@ -225,10 +234,11 @@ describe('Instance sidebar', function () {
225234
} else {
226235
await browser.clickVisible(Selectors.Single.RefreshDatabasesButton);
227236
}
228-
await browser.clickVisible(Selectors.sidebarDatabase(db));
229-
const collectionElement = await browser.$(
237+
238+
// wait for the new collection we added via the driver to appear.
239+
const newCollectionElement = await browser.$(
230240
Selectors.sidebarCollection(db, coll)
231241
);
232-
await collectionElement.waitForDisplayed();
242+
await newCollectionElement.waitForDisplayed();
233243
});
234244
});

packages/compass-e2e-tests/tests/instance-my-queries-tab.test.ts renamed to packages/compass-e2e-tests/tests/my-queries-tab.test.ts

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,14 @@ async function openMenuForQueryItem(
4141
await browser.$(Selectors.SavedItemMenu).waitForDisplayed();
4242
}
4343

44-
describe('Instance my queries tab', function () {
44+
describe('My Queries tab', function () {
4545
let compass: Compass;
4646
let browser: CompassBrowser;
4747
const connectionName = connectionNameFromString(DEFAULT_CONNECTION_STRING);
4848

4949
before(async function () {
5050
skipForWeb(this, 'saved queries not yet available in compass-web');
5151

52-
// TODO(COMPASS-8006): best to only skip this until the My Queries tab is ported
53-
if (TEST_MULTIPLE_CONNECTIONS) {
54-
this.skip();
55-
}
56-
5752
compass = await init(this.test?.fullTitle());
5853
browser = compass.browser;
5954
});
@@ -66,10 +61,6 @@ describe('Instance my queries tab', function () {
6661
return;
6762
}
6863

69-
if (TEST_MULTIPLE_CONNECTIONS) {
70-
return;
71-
}
72-
7364
await cleanup(compass);
7465
});
7566
afterEach(async function () {
@@ -162,7 +153,17 @@ describe('Instance my queries tab', function () {
162153
connectionName,
163154
'db.numbers.renameCollection("numbers-renamed")'
164155
);
165-
await browser.clickVisible(Selectors.Single.RefreshDatabasesButton);
156+
if (TEST_MULTIPLE_CONNECTIONS) {
157+
await browser.selectConnectionMenuItem(
158+
connectionName,
159+
Selectors.Multiple.RefreshDatabasesItem
160+
);
161+
162+
// go to My Queries because for multiple connections it is not the default tab
163+
await browser.navigateToMyQueries();
164+
} else {
165+
await browser.clickVisible(Selectors.Single.RefreshDatabasesButton);
166+
}
166167

167168
// browse to the query
168169
await browser.clickVisible(Selectors.myQueriesItem(newFavoriteQueryName));
@@ -274,8 +275,9 @@ describe('Instance my queries tab', function () {
274275
const favoriteQueryName = 'list of numbers greater than 10 - query';
275276
const newCollectionName = 'numbers-renamed';
276277

277-
/** saves a query and renames the collection associated with the query, so that the query must be opened with the "select namespace" modal */
278-
async function setup() {
278+
it('users can permanently associate a new namespace for an aggregation/query', async function () {
279+
// save a query and rename the collection associated with the query, so that the query must be opened with the "select namespace" modal
280+
279281
// Run a query
280282
await browser.navigateToCollectionTab('test', 'numbers', 'Documents');
281283
await browser.runFindOperation('Documents', `{i: {$gt: 10}}`, {
@@ -339,11 +341,16 @@ describe('Instance my queries tab', function () {
339341
connectionName,
340342
`db.numbers.renameCollection('${newCollectionName}')`
341343
);
342-
await browser.clickVisible(Selectors.Single.RefreshDatabasesButton);
343-
}
344-
beforeEach(setup);
345344

346-
it('users can permanently associate a new namespace for an aggregation/query', async function () {
345+
if (TEST_MULTIPLE_CONNECTIONS) {
346+
await browser.selectConnectionMenuItem(
347+
connectionName,
348+
Selectors.Multiple.RefreshDatabasesItem
349+
);
350+
} else {
351+
await browser.clickVisible(Selectors.Single.RefreshDatabasesButton);
352+
}
353+
347354
await browser.navigateToMyQueries();
348355
// browse to the query
349356
await browser.clickVisible(Selectors.myQueriesItem(favoriteQueryName));

packages/compass-sidebar/src/components/legacy/sidebar.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,13 @@ export function Sidebar({
150150
return;
151151
}
152152

153+
if (action === 'refresh-databases') {
154+
onSidebarAction(action, ...rest, {
155+
connectionId: initialConnectionInfo.id,
156+
});
157+
return;
158+
}
159+
153160
onSidebarAction(action, ...rest);
154161
},
155162
[

packages/compass-sidebar/src/components/multiple-connections/connections-navigation.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ type MapStateProps = {
131131
type MapDispatchProps = {
132132
fetchAllCollections(): void;
133133
onDatabaseExpand(connectionId: string, dbId: string): void;
134+
onRefreshDatabases(connectionId: string): void;
134135
onNamespaceAction(
135136
connectionId: string,
136137
namespace: string,
@@ -164,6 +165,7 @@ const ConnectionsNavigation: React.FC<ConnectionsNavigationProps> = ({
164165
onDisconnect,
165166
onDatabaseExpand,
166167
fetchAllCollections,
168+
onRefreshDatabases: _onRefreshDatabases,
167169
onNamespaceAction: _onNamespaceAction,
168170
}) => {
169171
const {
@@ -281,6 +283,9 @@ const ConnectionsNavigation: React.FC<ConnectionsNavigationProps> = ({
281283
case 'select-connection':
282284
openDatabasesWorkspace(item.connectionInfo.id);
283285
return;
286+
case 'refresh-databases':
287+
_onRefreshDatabases(item.connectionInfo.id);
288+
return;
284289
case 'create-database':
285290
_onNamespaceAction(item.connectionInfo.id, '', action);
286291
return;
@@ -326,6 +331,7 @@ const ConnectionsNavigation: React.FC<ConnectionsNavigationProps> = ({
326331
}
327332
},
328333
[
334+
_onRefreshDatabases,
329335
_onNamespaceAction,
330336
openShellWorkspace,
331337
openDatabasesWorkspace,
@@ -497,6 +503,12 @@ const ConnectionsNavigation: React.FC<ConnectionsNavigationProps> = ({
497503
);
498504
};
499505

506+
const onRefreshDatabases = (connectionId: string): SidebarThunkAction<void> => {
507+
return (_dispatch, getState, { globalAppRegistry }) => {
508+
globalAppRegistry.emit('refresh-databases', { connectionId });
509+
};
510+
};
511+
500512
const onNamespaceAction = (
501513
connectionId: string,
502514
namespace: string,
@@ -567,6 +579,7 @@ const mapDispatchToProps: MapDispatchToProps<
567579
MapDispatchProps,
568580
ConnectionsNavigationComponentProps
569581
> = {
582+
onRefreshDatabases,
570583
onNamespaceAction,
571584
onDatabaseExpand,
572585
fetchAllCollections,

packages/databases-collections/src/components/databases.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ type DatabasesProps = {
7575
isDataLake: boolean;
7676
onDeleteDatabaseClick(connectionId: string, ns: string): void;
7777
onCreateDatabaseClick(connectionId: string): void;
78-
onRefreshClick(): void;
78+
onRefreshClick(connectionId: string): void;
7979
};
8080

8181
const Databases: React.FunctionComponent<DatabasesProps> = ({
@@ -87,7 +87,7 @@ const Databases: React.FunctionComponent<DatabasesProps> = ({
8787
isGenuineMongoDB,
8888
onDeleteDatabaseClick: _onDeleteDatabaseClick,
8989
onCreateDatabaseClick: _onCreateDatabaseClick,
90-
onRefreshClick,
90+
onRefreshClick: _onRefreshClick,
9191
}) => {
9292
const connectionInfo = useConnectionInfo();
9393
const { id: connectionId, atlasMetadata } = connectionInfo;
@@ -112,6 +112,10 @@ const Databases: React.FunctionComponent<DatabasesProps> = ({
112112
_onCreateDatabaseClick(connectionId);
113113
}, [connectionId, _onCreateDatabaseClick]);
114114

115+
const onRefreshClick = useCallback(() => {
116+
_onRefreshClick(connectionId);
117+
}, [connectionId, _onRefreshClick]);
118+
115119
useTrackOnChange(
116120
(track: TrackFunction) => {
117121
track('Screen', { name: 'databases' }, connectionInfo);

packages/databases-collections/src/modules/databases.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,11 @@ export const databasesChanged = (instance: MongoDBInstance) => ({
8585
databases: instance.databases.toJSON(),
8686
});
8787

88-
export const refreshDatabases = (): DatabasesThunkAction<void> => {
88+
export const refreshDatabases = (
89+
connectionId: string
90+
): DatabasesThunkAction<void> => {
8991
return (_dispatch, _getState, { globalAppRegistry }) => {
90-
globalAppRegistry.emit('refresh-databases');
92+
globalAppRegistry.emit('refresh-databases', { connectionId });
9193
};
9294
};
9395

0 commit comments

Comments
 (0)