mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 18:00:18 +01:00
f033a59b17
Migration #77 would set the `TokenListController.tokensChainsCache` state to `undefined` if it wasn't already set to anything when that migration was run. This is probably harmless except that it results in Sentry errors during migrations, and it results in that property having a value (at least temporarily) that doesn't match its type. Migration #77 has been updated to prevent this property from being set to `undefined` going forward. A new migration has been added to delete this value for any users already affected by this problem. The new migration was named "92.1" so that it could run after 92 but before 93, to make backporting this to v10.34.x easier (v10.34.x is currently on migration 92). "92.1" is still a valid number so this should work just as well as a whole number.
172 lines
4.0 KiB
TypeScript
172 lines
4.0 KiB
TypeScript
import { InfuraNetworkType, NetworkType } from '@metamask/controller-utils';
|
|
import { migrate, version } from './093';
|
|
|
|
const PREVIOUS_VERSION = 92.1;
|
|
|
|
const sentryCaptureExceptionMock = jest.fn();
|
|
|
|
global.sentry = {
|
|
startSession: jest.fn(),
|
|
endSession: jest.fn(),
|
|
toggleSession: jest.fn(),
|
|
captureException: sentryCaptureExceptionMock,
|
|
};
|
|
|
|
describe('migration #93', () => {
|
|
afterEach(() => {
|
|
jest.resetAllMocks();
|
|
});
|
|
|
|
it('should update the version metadata', async () => {
|
|
const oldStorage = {
|
|
meta: {
|
|
version: PREVIOUS_VERSION,
|
|
},
|
|
data: {},
|
|
};
|
|
|
|
const newStorage = await migrate(oldStorage);
|
|
expect(newStorage.meta).toStrictEqual({
|
|
version,
|
|
});
|
|
});
|
|
|
|
it('should return state unaltered if there is no network controller state', async () => {
|
|
const oldData = {
|
|
other: 'data',
|
|
};
|
|
const oldStorage = {
|
|
meta: {
|
|
version: PREVIOUS_VERSION,
|
|
},
|
|
data: oldData,
|
|
};
|
|
|
|
const newStorage = await migrate(oldStorage);
|
|
expect(newStorage.data).toStrictEqual(oldData);
|
|
});
|
|
|
|
it('should capture an exception if there is no network controller state', async () => {
|
|
const oldData = {
|
|
other: 'data',
|
|
};
|
|
const oldStorage = {
|
|
meta: {
|
|
version: PREVIOUS_VERSION,
|
|
},
|
|
data: oldData,
|
|
};
|
|
|
|
await migrate(oldStorage);
|
|
|
|
expect(sentryCaptureExceptionMock).toHaveBeenCalledTimes(1);
|
|
expect(sentryCaptureExceptionMock).toHaveBeenCalledWith(
|
|
new Error(`typeof state.NetworkController is undefined`),
|
|
);
|
|
});
|
|
|
|
it('should return state unaltered if there is no network controller providerConfig state', async () => {
|
|
const oldData = {
|
|
other: 'data',
|
|
NetworkController: {
|
|
networkConfigurations: {
|
|
id1: {
|
|
foo: 'bar',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
const oldStorage = {
|
|
meta: {
|
|
version: PREVIOUS_VERSION,
|
|
},
|
|
data: oldData,
|
|
};
|
|
|
|
const newStorage = await migrate(oldStorage);
|
|
expect(newStorage.data).toStrictEqual(oldData);
|
|
});
|
|
|
|
it('should capture an exception if there is no network controller providerConfig state', async () => {
|
|
const oldData = {
|
|
other: 'data',
|
|
NetworkController: {
|
|
networkConfigurations: {
|
|
id1: {
|
|
foo: 'bar',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
const oldStorage = {
|
|
meta: {
|
|
version: PREVIOUS_VERSION,
|
|
},
|
|
data: oldData,
|
|
};
|
|
|
|
await migrate(oldStorage);
|
|
|
|
expect(sentryCaptureExceptionMock).toHaveBeenCalledTimes(1);
|
|
expect(sentryCaptureExceptionMock).toHaveBeenCalledWith(
|
|
new Error(`typeof state.NetworkController.providerConfig is undefined`),
|
|
);
|
|
});
|
|
|
|
it('should return state unaltered if there is already a ticker in the providerConfig state', async () => {
|
|
const oldData = {
|
|
other: 'data',
|
|
NetworkController: {
|
|
providerConfig: {
|
|
ticker: 'GoerliETH',
|
|
type: InfuraNetworkType.goerli,
|
|
chainId: '5',
|
|
nickname: 'Goerli Testnet',
|
|
id: 'goerli',
|
|
},
|
|
},
|
|
};
|
|
const oldStorage = {
|
|
meta: {
|
|
version: PREVIOUS_VERSION,
|
|
},
|
|
data: oldData,
|
|
};
|
|
|
|
const newStorage = await migrate(oldStorage);
|
|
expect(newStorage.data).toStrictEqual(oldData);
|
|
});
|
|
|
|
it('should update the provider config to have a ticker set to "ETH" if none is currently present', async () => {
|
|
const oldData = {
|
|
other: 'data',
|
|
NetworkController: {
|
|
providerConfig: {
|
|
type: NetworkType.rpc,
|
|
chainId: '0x9292',
|
|
nickname: 'Funky Town Chain',
|
|
},
|
|
},
|
|
};
|
|
const oldStorage = {
|
|
meta: {
|
|
version: PREVIOUS_VERSION,
|
|
},
|
|
data: oldData,
|
|
};
|
|
|
|
const newStorage = await migrate(oldStorage);
|
|
expect(newStorage.data).toStrictEqual({
|
|
other: 'data',
|
|
NetworkController: {
|
|
providerConfig: {
|
|
type: NetworkType.rpc,
|
|
chainId: '0x9292',
|
|
nickname: 'Funky Town Chain',
|
|
ticker: 'ETH',
|
|
},
|
|
},
|
|
});
|
|
});
|
|
});
|