mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-17 09:35:37 -05:00
Add error logging when fetching account provider accounts (#13082)
* Add error logging when fetching account provider accounts * fix test * fix tests #2
This commit is contained in:
@@ -8,6 +8,7 @@ import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces';
|
||||
import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes';
|
||||
import { coalesce } from 'vs/base/common/arrays';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
|
||||
/**
|
||||
* View model for account dialog
|
||||
@@ -23,7 +24,7 @@ export class AccountViewModel {
|
||||
private _updateAccountListEmitter: Emitter<UpdateAccountListEventParams>;
|
||||
public get updateAccountListEvent(): Event<UpdateAccountListEventParams> { return this._updateAccountListEmitter.event; }
|
||||
|
||||
constructor(@IAccountManagementService private _accountManagementService: IAccountManagementService) {
|
||||
constructor(@IAccountManagementService private _accountManagementService: IAccountManagementService, @ILogService private _logService: ILogService) {
|
||||
// Create our event emitters
|
||||
this._addProviderEmitter = new Emitter<AccountProviderAddedEventParams>();
|
||||
this._removeProviderEmitter = new Emitter<azdata.AccountProviderMetadata>();
|
||||
@@ -41,24 +42,29 @@ export class AccountViewModel {
|
||||
* and fires an event after each provider/accounts has been loaded.
|
||||
*
|
||||
*/
|
||||
public initialize(): Promise<AccountProviderAddedEventParams[]> {
|
||||
public async initialize(): Promise<AccountProviderAddedEventParams[]> {
|
||||
// Load a baseline of the account provider metadata and accounts
|
||||
// 1) Get all the providers from the account management service
|
||||
// 2) For each provider, get the accounts
|
||||
// 3) Build parameters to add a provider and return it
|
||||
return this._accountManagementService.getAccountProviderMetadata()
|
||||
.then(providers => {
|
||||
const promises = providers.map(provider => {
|
||||
return this._accountManagementService.getAccountsForProvider(provider.id)
|
||||
.then(accounts => <AccountProviderAddedEventParams>{
|
||||
addedProvider: provider,
|
||||
initialAccounts: accounts
|
||||
}, () => undefined);
|
||||
});
|
||||
return Promise.all(promises).then(accounts => coalesce(accounts));
|
||||
}, () => {
|
||||
/* Swallow failures and just pretend we don't have any providers */
|
||||
return [];
|
||||
});
|
||||
try {
|
||||
const metadata = await this._accountManagementService.getAccountProviderMetadata();
|
||||
const accounts = await Promise.all(metadata.map(async providerMetadata => {
|
||||
try {
|
||||
const accounts = await this._accountManagementService.getAccountsForProvider(providerMetadata.id);
|
||||
return <AccountProviderAddedEventParams>{
|
||||
addedProvider: providerMetadata,
|
||||
initialAccounts: accounts
|
||||
};
|
||||
} catch (err) {
|
||||
this._logService.warn(`Error getting accounts for provider ${providerMetadata.id} : ${err}`);
|
||||
return undefined;
|
||||
}
|
||||
}));
|
||||
return coalesce(accounts);
|
||||
} catch (err) {
|
||||
this._logService.warn(`Error getting account provider metadata : ${err}`);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import { AccountViewModel } from 'sql/platform/accounts/common/accountViewModel'
|
||||
import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes';
|
||||
import { TestAccountManagementService } from 'sql/platform/accounts/test/common/testAccountManagementService';
|
||||
import { EventVerifierSingle } from 'sql/base/test/common/event';
|
||||
import { NullLogService } from 'vs/platform/log/common/log';
|
||||
|
||||
// SUITE STATE /////////////////////////////////////////////////////////////
|
||||
let mockAddProviderEmitter: Emitter<AccountProviderAddedEventParams>;
|
||||
@@ -63,7 +64,7 @@ suite('Account Management Dialog ViewModel Tests', () => {
|
||||
test('Construction - Events are properly defined', () => {
|
||||
// If: I create an account viewmodel
|
||||
let mockAccountManagementService = getMockAccountManagementService(false, false);
|
||||
let vm = new AccountViewModel(mockAccountManagementService.object);
|
||||
let vm = new AccountViewModel(mockAccountManagementService.object, new NullLogService());
|
||||
|
||||
// Then:
|
||||
// ... All the events for the view models should be properly initialized
|
||||
@@ -195,7 +196,7 @@ function getViewModel(
|
||||
evRemove: EventVerifierSingle<azdata.AccountProviderMetadata>,
|
||||
evUpdate: EventVerifierSingle<UpdateAccountListEventParams>
|
||||
): AccountViewModel {
|
||||
let vm = new AccountViewModel(ams);
|
||||
let vm = new AccountViewModel(ams, new NullLogService());
|
||||
vm.addProviderEvent(evAdd.eventHandler);
|
||||
vm.removeProviderEvent(evRemove.eventHandler);
|
||||
vm.updateAccountListEvent(evUpdate.eventHandler);
|
||||
|
||||
Reference in New Issue
Block a user