diff --git a/src/keyring/KeyringController.ts b/src/keyring/KeyringController.ts index 0d2a1794561..27a7e6ad654 100644 --- a/src/keyring/KeyringController.ts +++ b/src/keyring/KeyringController.ts @@ -197,7 +197,6 @@ export class KeyringController extends BaseController { expect(controller.state.selectedAddress).toBe('0xfoO'); }); - it('should update existing identities', () => { + it('should add new identities', () => { const controller = new PreferencesController(); controller.updateIdentities(['foo', 'bar']); expect(controller.state.identities).toEqual({ @@ -69,6 +69,65 @@ describe('PreferencesController', () => { }); }); + it('should not update existing identities', () => { + const controller = new PreferencesController( + {}, + { identities: { '0xbar': { address: '0xbar', name: 'Custom name' } } }, + ); + controller.updateIdentities(['foo', 'bar']); + expect(controller.state.identities).toEqual({ + '0xbar': { address: '0xbar', name: 'Custom name' }, + '0xfoO': { address: '0xfoO', name: 'Account 1' }, + }); + }); + + it('should remove identities', () => { + const controller = new PreferencesController( + {}, + { + identities: { + '0xbar': { address: '0xbar', name: 'Account 2' }, + '0xfoO': { address: '0xfoO', name: 'Account 1' }, + }, + }, + ); + controller.updateIdentities(['foo']); + expect(controller.state.identities).toEqual({ + '0xfoO': { address: '0xfoO', name: 'Account 1' }, + }); + }); + + it('should not update selected address if it is still among identities', () => { + const controller = new PreferencesController( + {}, + { + identities: { + '0xbar': { address: '0xbar', name: 'Account 2' }, + '0xfoO': { address: '0xfoO', name: 'Account 1' }, + }, + selectedAddress: '0xbar', + }, + ); + controller.updateIdentities(['foo', 'bar']); + expect(controller.state.selectedAddress).toEqual('0xbar'); + }); + + it('should update selected address to first identity if it was removed from identities', () => { + const controller = new PreferencesController( + {}, + { + identities: { + '0xbar': { address: '0xbar', name: 'Account 2' }, + '0xbaz': { address: '0xbaz', name: 'Account 3' }, + '0xfoO': { address: '0xfoO', name: 'Account 1' }, + }, + selectedAddress: '0xbaz', + }, + ); + controller.updateIdentities(['foo', 'bar']); + expect(controller.state.selectedAddress).toEqual('0xfoO'); + }); + it('should add custom rpc url', () => { const controller = new PreferencesController(); const rpcUrlNetwork = { diff --git a/src/user/PreferencesController.ts b/src/user/PreferencesController.ts index 9d489c92c2f..686ba031062 100644 --- a/src/user/PreferencesController.ts +++ b/src/user/PreferencesController.ts @@ -174,7 +174,9 @@ export class PreferencesController extends BaseController