Skip to content

Commit e62504f

Browse files
committed
chore(migrations): remove null "seedWords" from state
1 parent 3901bb0 commit e62504f

File tree

4 files changed

+100
-1
lines changed

4 files changed

+100
-1
lines changed

app/scripts/migrations/190.test.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { cloneDeep } from 'lodash';
2+
import { migrate, version } from './190';
3+
4+
const VERSION = version;
5+
const OLD_VERSION = VERSION - 1;
6+
7+
describe(`migration #${VERSION}`, () => {
8+
it('removes seedWords when value is null', async () => {
9+
const oldStorage = {
10+
meta: { version: OLD_VERSION },
11+
data: {
12+
seedWords: null,
13+
PreferencesController: {
14+
showTestNetworks: true,
15+
},
16+
},
17+
};
18+
19+
const versionedData = cloneDeep(oldStorage);
20+
const changedKeys = new Set<string>();
21+
22+
await migrate(versionedData, changedKeys);
23+
24+
expect(versionedData.meta.version).toBe(VERSION);
25+
expect('seedWords' in versionedData.data).toBe(false);
26+
expect(versionedData.data).toStrictEqual({
27+
PreferencesController: {
28+
showTestNetworks: true,
29+
},
30+
});
31+
expect(changedKeys).toStrictEqual(new Set(['seedWords']));
32+
});
33+
34+
it('keeps seedWords when value is not null', async () => {
35+
const oldStorage = {
36+
meta: { version: OLD_VERSION },
37+
data: {
38+
seedWords: 'mock-seed-phrase',
39+
},
40+
};
41+
42+
const versionedData = cloneDeep(oldStorage);
43+
const changedKeys = new Set<string>();
44+
45+
await migrate(versionedData, changedKeys);
46+
47+
expect(versionedData.meta.version).toBe(VERSION);
48+
expect(versionedData.data).toStrictEqual(oldStorage.data);
49+
expect(changedKeys.size).toBe(0);
50+
});
51+
52+
it('handles state when seedWords property does not exist', async () => {
53+
const oldStorage = {
54+
meta: { version: OLD_VERSION },
55+
data: {
56+
PreferencesController: {
57+
showTestNetworks: true,
58+
},
59+
},
60+
};
61+
62+
const versionedData = cloneDeep(oldStorage);
63+
const changedKeys = new Set<string>();
64+
65+
await migrate(versionedData, changedKeys);
66+
67+
expect(versionedData.meta.version).toBe(VERSION);
68+
expect('seedWords' in versionedData.data).toBe(false);
69+
expect(versionedData.data).toStrictEqual(oldStorage.data);
70+
expect(changedKeys.size).toBe(0);
71+
});
72+
});

app/scripts/migrations/190.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { hasProperty } from '@metamask/utils';
2+
import type { Migrate } from './types';
3+
4+
export const version = 190;
5+
6+
/**
7+
* Migration that removes `null` seedWords values from the persisted state.
8+
*
9+
* If the `seedWords` property exists on the data object and its value is
10+
* `null`, this migration deletes the property and records `seedWords` in
11+
* the set of changed keys.
12+
*
13+
* @param versionedData - The versioned data object to migrate.
14+
* @param changedKeys - A set used to record keys that were modified.
15+
*/
16+
export const migrate = (async (versionedData, changedKeys) => {
17+
versionedData.meta.version = version;
18+
19+
if (
20+
hasProperty(versionedData.data, 'seedWords') &&
21+
versionedData.data.seedWords === null
22+
) {
23+
delete versionedData.data.seedWords;
24+
changedKeys.add('seedWords');
25+
}
26+
}) satisfies Migrate;

app/scripts/migrations/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ const migrations = [
225225
require('./187'),
226226
require('./188'),
227227
require('./189'),
228+
require('./190'),
228229
];
229230

230231
export default migrations;

test/e2e/tests/metrics/state-snapshots/errors-before-init-opt-in-ui-state.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,5 +316,5 @@
316316
"config": "object",
317317
"firstTimeInfo": "object"
318318
},
319-
"meta": { "version": 189 }
319+
"meta": { "version": 190 }
320320
}

0 commit comments

Comments
 (0)