Skip to content

Commit b42590f

Browse files
committed
test(base-controller): Add tests for isBaseController{,V1}, raising coverage to 100%
1 parent 7804ce6 commit b42590f

File tree

3 files changed

+83
-9
lines changed

3 files changed

+83
-9
lines changed

packages/base-controller/jest.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = merge(baseConfig, {
1717
// An object that configures minimum threshold enforcement for coverage results
1818
coverageThreshold: {
1919
global: {
20-
branches: 96.29,
20+
branches: 100,
2121
functions: 100,
2222
lines: 100,
2323
statements: 100,

packages/base-controller/src/BaseControllerV1.test.ts

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,61 @@
11
import * as sinon from 'sinon';
22

3+
import { JsonRpcEngine } from '../../json-rpc-engine/src';
34
import type { BaseConfig, BaseState } from './BaseControllerV1';
4-
import { BaseControllerV1 as BaseController } from './BaseControllerV1';
5+
import {
6+
BaseControllerV1 as BaseController,
7+
isBaseControllerV1,
8+
} from './BaseControllerV1';
9+
import type {
10+
CountControllerAction,
11+
CountControllerEvent,
12+
} from './BaseControllerV2.test';
13+
import {
14+
CountController,
15+
countControllerName,
16+
countControllerStateMetadata,
17+
getCountMessenger,
18+
} from './BaseControllerV2.test';
19+
import { ControllerMessenger } from './ControllerMessenger';
520

621
const STATE = { name: 'foo' };
722
const CONFIG = { disabled: true };
823

9-
class TestController extends BaseController<BaseConfig, BaseState> {
24+
// eslint-disable-next-line jest/no-export
25+
export class TestController extends BaseController<BaseConfig, BaseState> {
1026
constructor(config?: BaseConfig, state?: BaseState) {
1127
super(config, state);
1228
this.initialize();
1329
}
1430
}
1531

32+
describe('isBaseControllerV1', () => {
33+
it('should return false if passed a V1 controller', () => {
34+
const controller = new TestController();
35+
expect(isBaseControllerV1(controller)).toBe(true);
36+
});
37+
38+
it('should return false if passed a V2 controller', () => {
39+
const controllerMessenger = new ControllerMessenger<
40+
CountControllerAction,
41+
CountControllerEvent
42+
>();
43+
const controller = new CountController({
44+
messenger: getCountMessenger(controllerMessenger),
45+
name: countControllerName,
46+
state: { count: 0 },
47+
metadata: countControllerStateMetadata,
48+
});
49+
expect(isBaseControllerV1(controller)).toBe(false);
50+
});
51+
52+
it('should return false if passed a non-controller', () => {
53+
const notController = new JsonRpcEngine();
54+
// @ts-expect-error Intentionally passing invalid input to test runtime behavior
55+
expect(isBaseControllerV1(notController)).toBe(false);
56+
});
57+
});
58+
1659
describe('BaseController', () => {
1760
afterEach(() => {
1861
sinon.restore();

packages/base-controller/src/BaseControllerV2.test.ts

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
/* eslint-disable jest/no-export */
12
import type { Draft, Patch } from 'immer';
23
import * as sinon from 'sinon';
34

5+
import { JsonRpcEngine } from '../../json-rpc-engine/src';
6+
import { TestController } from './BaseControllerV1.test';
47
import type {
58
ControllerGetStateAction,
69
ControllerStateChangeEvent,
@@ -9,27 +12,28 @@ import {
912
BaseController,
1013
getAnonymizedState,
1114
getPersistentState,
15+
isBaseController,
1216
} from './BaseControllerV2';
1317
import { ControllerMessenger } from './ControllerMessenger';
1418
import type { RestrictedControllerMessenger } from './RestrictedControllerMessenger';
1519

16-
const countControllerName = 'CountController';
20+
export const countControllerName = 'CountController';
1721

1822
type CountControllerState = {
1923
count: number;
2024
};
2125

22-
type CountControllerAction = ControllerGetStateAction<
26+
export type CountControllerAction = ControllerGetStateAction<
2327
typeof countControllerName,
2428
CountControllerState
2529
>;
2630

27-
type CountControllerEvent = ControllerStateChangeEvent<
31+
export type CountControllerEvent = ControllerStateChangeEvent<
2832
typeof countControllerName,
2933
CountControllerState
3034
>;
3135

32-
const countControllerStateMetadata = {
36+
export const countControllerStateMetadata = {
3337
count: {
3438
persist: true,
3539
anonymous: true,
@@ -50,7 +54,7 @@ type CountMessenger = RestrictedControllerMessenger<
5054
* @param controllerMessenger - The controller messenger.
5155
* @returns A restricted controller messenger for the Count controller.
5256
*/
53-
function getCountMessenger(
57+
export function getCountMessenger(
5458
controllerMessenger?: ControllerMessenger<
5559
CountControllerAction,
5660
CountControllerEvent
@@ -69,7 +73,7 @@ function getCountMessenger(
6973
});
7074
}
7175

72-
class CountController extends BaseController<
76+
export class CountController extends BaseController<
7377
typeof countControllerName,
7478
CountControllerState,
7579
CountMessenger
@@ -177,6 +181,33 @@ class MessagesController extends BaseController<
177181
}
178182
}
179183

184+
describe('isBaseController', () => {
185+
it('should return true if passed a V2 controller', () => {
186+
const controllerMessenger = new ControllerMessenger<
187+
CountControllerAction,
188+
CountControllerEvent
189+
>();
190+
const controller = new CountController({
191+
messenger: getCountMessenger(controllerMessenger),
192+
name: countControllerName,
193+
state: { count: 0 },
194+
metadata: countControllerStateMetadata,
195+
});
196+
expect(isBaseController(controller)).toBe(true);
197+
});
198+
199+
it('should return false if passed a V1 controller', () => {
200+
const controller = new TestController();
201+
expect(isBaseController(controller)).toBe(false);
202+
});
203+
204+
it('should return false if passed a non-controller', () => {
205+
const notController = new JsonRpcEngine();
206+
// @ts-expect-error Intentionally passing invalid input to test runtime behavior
207+
expect(isBaseController(notController)).toBe(false);
208+
});
209+
});
210+
180211
describe('BaseController', () => {
181212
afterEach(() => {
182213
sinon.restore();

0 commit comments

Comments
 (0)