diff --git a/packages/host/app/services/matrix-service.ts b/packages/host/app/services/matrix-service.ts index 4d6aea0573..bfb160c9b5 100644 --- a/packages/host/app/services/matrix-service.ts +++ b/packages/host/app/services/matrix-service.ts @@ -268,12 +268,15 @@ export default class MatrixService extends Service { this._isInitializingNewUser = true; this.start({ auth }); this.setDisplayName(displayName); - await this.createPersonalRealmForUser({ - endpoint: 'personal', - name: `${displayName}'s Workspace`, - iconURL: iconURLFor(displayName), - backgroundURL: getRandomBackgroundURL(), - }); + await Promise.all([ + this.createPersonalRealmForUser({ + endpoint: 'personal', + name: `${displayName}'s Workspace`, + iconURL: iconURLFor(displayName), + backgroundURL: getRandomBackgroundURL(), + }), + this.realmServer.fetchCatalogRealms(), + ]); this._isInitializingNewUser = false; } @@ -377,7 +380,10 @@ export default class MatrixService extends Service { await this.realmServer.setAvailableRealmURLs( accountDataContent?.realms ?? [], ); - await this.loginToRealms(); + await Promise.all([ + this.loginToRealms(), + this.realmServer.fetchCatalogRealms(), + ]); this.postLoginCompleted = true; } catch (e) { console.log('Error starting Matrix client', e); diff --git a/packages/host/app/services/realm-server.ts b/packages/host/app/services/realm-server.ts index d634977e88..6aad678b2e 100644 --- a/packages/host/app/services/realm-server.ts +++ b/packages/host/app/services/realm-server.ts @@ -212,7 +212,10 @@ export default class RealmServerService extends Service { }; } - private async fetchCatalogRealms() { + async fetchCatalogRealms() { + if (this.catalogRealmURLs.length > 0) { + return; + } let response = await this.network.authedFetch( `${this.url.origin}/_catalog-realms`, ); diff --git a/packages/matrix/tests/registration-with-token.spec.ts b/packages/matrix/tests/registration-with-token.spec.ts index 34bc41d4ff..a7364881a2 100644 --- a/packages/matrix/tests/registration-with-token.spec.ts +++ b/packages/matrix/tests/registration-with-token.spec.ts @@ -151,6 +151,11 @@ test.describe('User Registration w/ Token - isolated realm server', () => { page.locator(`[data-test-workspace-chooser-toggle]`), 'workspace toggle button is disabled when no workspaces opened', ).toBeDisabled(); + await expect( + page.locator( + `[data-test-catalog-list] [data-test-workspace="Test Workspace A"]`, + ), + ).toHaveCount(1); let newRealmURL = new URL('user1/personal/', serverIndexUrl).href; await enterWorkspace(page, "Test User's Workspace"); @@ -198,6 +203,11 @@ test.describe('User Registration w/ Token - isolated realm server', () => { await expect( page.locator(`[data-test-workspace="Test User's Workspace"]`), ).toHaveCount(0); + await expect( + page.locator( + `[data-test-catalog-list] [data-test-workspace="Test Workspace A"]`, + ), + ).toHaveCount(1); // assert newly registered user can login with their credentials await logout(page); @@ -215,6 +225,11 @@ test.describe('User Registration w/ Token - isolated realm server', () => { await expect( page.locator(`[data-test-workspace="Test User's Workspace"]`), ).toHaveCount(1); + await expect( + page.locator( + `[data-test-catalog-list] [data-test-workspace="Test Workspace A"]`, + ), + ).toHaveCount(1); // we're including the following assertions in this test because the // isolated realm is so expensive, otherwise it would be desireable to have