Skip to content

Commit 318fea1

Browse files
authored
chore(e2e): Rewrite Instance Databases tab -> can refresh the list of databases using refresh controls COMPASS-7663 (#5544)
1 parent ccfba41 commit 318fea1

File tree

3 files changed

+32
-22
lines changed

3 files changed

+32
-22
lines changed

packages/compass-e2e-tests/helpers/selectors.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,7 @@ export const DatabaseCard = '[data-testid="database-grid-item"]';
400400
export const DatabaseCardDrop =
401401
'[data-testid="database-grid"] [data-testid="namespace-card-actions"] button';
402402
export const ServerStats = '.serverstats';
403+
export const DatabaseStatLoader = `${DatabaseCard} [data-testid="namespace-param-fallback"][data-ready=false]`;
403404

404405
export const databaseCard = (dbName: string): string => {
405406
return `${DatabaseCard}[data-id="${dbName}"]`;

packages/compass-e2e-tests/tests/instance-databases-tab.test.ts

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import {
1414
createNumbersCollection,
1515
} from '../helpers/insert-data';
1616

17+
const INITIAL_DATABASE_NAMES = ['admin', 'config', 'local', 'test'];
18+
1719
describe('Instance databases tab', function () {
1820
let compass: Compass;
1921
let browser: CompassBrowser;
@@ -42,9 +44,7 @@ describe('Instance databases tab', function () {
4244
const dbTable = await browser.$(Selectors.DatabasesTable);
4345
await dbTable.waitForDisplayed();
4446

45-
const dbSelectors = ['admin', 'config', 'local', 'test'].map(
46-
Selectors.databaseCard
47-
);
47+
const dbSelectors = INITIAL_DATABASE_NAMES.map(Selectors.databaseCard);
4848

4949
for (const dbSelector of dbSelectors) {
5050
const found = await browser.scrollToVirtualItem(
@@ -138,31 +138,37 @@ describe('Instance databases tab', function () {
138138
});
139139

140140
it('can refresh the list of databases using refresh controls', async function () {
141-
const db = 'my-instance-database';
142-
const coll = 'my-collection';
141+
const db = 'test'; // added by beforeEach
143142
const dbSelector = Selectors.databaseCard(db);
144143

145-
// Create the database and refresh
144+
// Browse to the databases tab
145+
await browser.navigateToInstanceTab('Databases');
146+
147+
// Make sure the db card we're going to drop is in there.
148+
await browser.scrollToVirtualItem(
149+
Selectors.DatabasesTable,
150+
dbSelector,
151+
'grid'
152+
);
153+
await browser.$(dbSelector).waitForDisplayed();
154+
155+
// Wait for the page to finish loading as best as we can
156+
await browser.waitUntil(async () => {
157+
const placeholders = await browser.$$(Selectors.DatabaseStatLoader);
158+
return placeholders.length === 0;
159+
});
160+
161+
// Drop the database using the driver
146162
const mongoClient = new MongoClient(DEFAULT_CONNECTION_STRING);
147163
await mongoClient.connect();
148164
try {
149165
const database = mongoClient.db(db);
150-
await database.createCollection(coll);
151-
152-
await browser.navigateToInstanceTab('Databases');
153-
await browser.clickVisible(Selectors.InstanceRefreshDatabaseButton);
154-
155-
await browser.scrollToVirtualItem(
156-
Selectors.DatabasesTable,
157-
dbSelector,
158-
'grid'
159-
);
160-
await browser.$(dbSelector).waitForDisplayed();
161166

162-
// Drop it and refresh again
167+
// Drop the database
163168
console.log({
164169
'database.dropDatabase()': await database.dropDatabase(),
165170
});
171+
// Prove that it is really gone
166172
console.log({
167173
'database.admin().listDatabases()': (
168174
await database.admin().listDatabases()
@@ -172,10 +178,11 @@ describe('Instance databases tab', function () {
172178
await mongoClient.close();
173179
}
174180

175-
// looks like if you refresh too fast the database appears in the list but
176-
// the stats never load, so just pause for bit first
177-
await browser.pause(1000);
178-
await browser.clickVisible(Selectors.InstanceRefreshDatabaseButton);
181+
// Refresh again and the database card should disappear.
182+
await browser.clickVisible(Selectors.InstanceRefreshDatabaseButton, {
183+
scroll: true,
184+
screenshot: 'instance-refresh-database-button.png',
185+
});
179186
await browser.$(dbSelector).waitForExist({ reverse: true });
180187
});
181188
});

packages/databases-collections-list/src/namespace-param.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ export const NamespaceParam: React.FunctionComponent<{
127127
}}
128128
fallback={(shouldRender) => (
129129
<span
130+
data-testid="namespace-param-fallback"
131+
data-ready={isReady}
130132
className={cx(
131133
namespaceParamValuePlaceholder,
132134
shouldRender && visible

0 commit comments

Comments
 (0)