diff --git a/packages/account-tree-controller/CHANGELOG.md b/packages/account-tree-controller/CHANGELOG.md index 0ab49e590c4..e946e1c24b5 100644 --- a/packages/account-tree-controller/CHANGELOG.md +++ b/packages/account-tree-controller/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Fix group naming for PK/Hardware accounts ([#6677](https://github.com/MetaMask/core/pull/6677)) + - Previously, the first PK/Hardware account would start as `Account 2` as opposed to `Account 1` and thus subsequent group names were off as well. + ## [1.0.0] ### Changed diff --git a/packages/account-tree-controller/src/AccountTreeController.test.ts b/packages/account-tree-controller/src/AccountTreeController.test.ts index 801c47c4cb2..cd7df67be00 100644 --- a/packages/account-tree-controller/src/AccountTreeController.test.ts +++ b/packages/account-tree-controller/src/AccountTreeController.test.ts @@ -587,7 +587,7 @@ describe('AccountTreeController', () => { type: AccountGroupType.SingleAccount, accounts: [MOCK_SNAP_ACCOUNT_2.id], metadata: { - name: 'Account 2', // Updated: per-wallet numbering (different wallet) + name: 'Account 1', // Updated: per-wallet numbering (different wallet) pinned: false, hidden: false, }, @@ -610,7 +610,7 @@ describe('AccountTreeController', () => { type: AccountGroupType.SingleAccount, accounts: [MOCK_HARDWARE_ACCOUNT_1.id], metadata: { - name: 'Account 2', // Updated: per-wallet numbering (different wallet) + name: 'Account 1', // Updated: per-wallet numbering (different wallet) pinned: false, hidden: false, }, @@ -652,13 +652,13 @@ describe('AccountTreeController', () => { }, [expectedKeyringWalletIdGroup]: { name: { - value: 'Account 2', // Updated: per-wallet numbering (different wallet) + value: 'Account 1', // Updated: per-wallet numbering (different wallet) lastUpdatedAt: expect.any(Number), }, }, [expectedSnapWalletIdGroup]: { name: { - value: 'Account 2', // Updated: per-wallet numbering (different wallet) + value: 'Account 1', // Updated: per-wallet numbering (different wallet) lastUpdatedAt: expect.any(Number), }, }, @@ -2430,8 +2430,8 @@ describe('AccountTreeController', () => { // Groups should use consistent default naming regardless of import time // Updated expectations based on per-wallet sequential naming logic - expect(group1?.metadata.name).toBe('Account 3'); // Updated: reflects actual naming logic - expect(group2?.metadata.name).toBe('Account 2'); // Updated: reflects actual naming logic + expect(group1?.metadata.name).toBe('Account 2'); // Updated: reflects actual naming logic + expect(group2?.metadata.name).toBe('Account 1'); // Updated: reflects actual naming logic }); it('uses fallback naming when rule-based naming returns empty string', () => { @@ -2902,9 +2902,9 @@ describe('AccountTreeController', () => { // Critical assertion: should have 2 unique names (no duplicates) expect(uniqueNames.size).toBe(2); - // Due to optimization, names start at wallet.length, so we get "Account 3" and "Account 4" - expect(allNames).toContain('Account 3'); - expect(allNames).toContain('Account 4'); + // Due to optimization, names start at wallet.length, so we get "Account 1" and "Account 2" + expect(allNames).toContain('Account 1'); + expect(allNames).toContain('Account 2'); // Verify they're actually different expect(group1.metadata.name).not.toBe(group2.metadata.name); diff --git a/packages/account-tree-controller/src/AccountTreeController.ts b/packages/account-tree-controller/src/AccountTreeController.ts index 1b7ab99549d..e9db61c8a15 100644 --- a/packages/account-tree-controller/src/AccountTreeController.ts +++ b/packages/account-tree-controller/src/AccountTreeController.ts @@ -458,11 +458,11 @@ export class AccountTreeController extends BaseController< } else { // For other wallet types, start with the number of existing groups // This gives us the next logical sequential number - proposedNameIndex = Object.keys(wallet.groups).length; + proposedNameIndex = Object.keys(wallet.groups).length - 1; } // Use the higher of the two: highest parsed index or computed index - proposedNameIndex = Math.max(highestAccountNameIndex, proposedNameIndex); + proposedNameIndex = Math.min(highestAccountNameIndex, proposedNameIndex); // Find a unique name by checking for conflicts and incrementing if needed let nameExists: boolean;