Skip to content

Commit 7f2e7b7

Browse files
ian-wdiBotPeaches
authored andcommitted
tests: add tests
1 parent e309880 commit 7f2e7b7

File tree

9 files changed

+2462
-821
lines changed

9 files changed

+2462
-821
lines changed

package.json

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"!**/__mocks__"
2828
],
2929
"scripts": {
30+
"test": "jest",
3031
"lint": "eslint \"**/*.{js,ts,tsx}\"",
3132
"prepare": "bob build",
3233
"example": "yarn --cwd example",
@@ -58,17 +59,33 @@
5859
"devDependencies": {
5960
"@react-native-community/eslint-config": "^2.0.0",
6061
"@tsconfig/react-native": "^2.0.2",
62+
"@types/jest": "^26.0.0",
6163
"@types/react": "^18.0.21",
6264
"@types/react-native": "^0.70.6",
65+
"@types/react-test-renderer": "^18.0.0",
6366
"@typescript-eslint/eslint-plugin": "^5.37.0",
6467
"@typescript-eslint/parser": "^5.37.0",
68+
"babel-jest": "^26.6.3",
6569
"eslint": "^7.32.0",
70+
"jest": "^26.6.3",
71+
"metro-react-native-babel-preset": "0.72.3",
72+
"pod-install": "^0.1.0",
6673
"react": "18.1.0",
6774
"react-native": "0.70.4",
6875
"react-native-builder-bob": "^0.18.0",
69-
"metro-react-native-babel-preset": "0.72.3",
70-
"typescript": "^4.1.3",
71-
"pod-install": "^0.1.0"
76+
"react-test-renderer": "18.1.0",
77+
"typescript": "^4.1.3"
78+
},
79+
"jest": {
80+
"preset": "react-native",
81+
"modulePathIgnorePatterns": [
82+
"<rootDir>/src/__tests__/Setup",
83+
"<rootDir>/example/",
84+
"<rootDir>/lib/"
85+
],
86+
"setupFiles": [
87+
"<rootDir>/src/__tests__/Setup.tsx"
88+
]
7289
},
7390
"react-native-builder-bob": {
7491
"source": "src",

src/SketchCanvas.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class SketchCanvas extends React.Component<SketchCanvasProps, CanvasState> {
7878
);
7979
}
8080

81-
componentWillReceiveProps(nextProps: SketchCanvasProps) {
81+
UNSAFE_componentWillReceiveProps(nextProps: SketchCanvasProps) {
8282
this.setState({
8383
text: this._processText(
8484
nextProps.text ? nextProps.text.map(t => Object.assign({}, t)) : null,
@@ -214,7 +214,7 @@ class SketchCanvas extends React.Component<SketchCanvasProps, CanvasState> {
214214
}
215215
}
216216

217-
componentWillMount() {
217+
UNSAFE_componentWillMount() {
218218
this.panResponder = PanResponder.create({
219219
// Ask to be the responder:
220220
onStartShouldSetPanResponder: (_evt, _gestureState) => true,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import 'react-native';
2+
import React from 'react';
3+
import RNSketchCanvas from '../index';
4+
5+
// Note: test renderer must be required after react-native.
6+
import renderer from 'react-test-renderer';
7+
8+
it('renders correctly', () => {
9+
renderer.create(<RNSketchCanvas />);
10+
});

src/__tests__/Setup.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
jest.mock('react-native', () => {
2+
const RN = jest.requireActual('react-native');
3+
4+
RN.UIManager.getViewManagerConfig = jest.fn(() => {
5+
return {
6+
Constants: {},
7+
};
8+
});
9+
10+
Object.defineProperty(RN, 'findNodeHandle', {
11+
get: jest.fn(() => () => 1),
12+
set: jest.fn(),
13+
});
14+
15+
return RN;
16+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'react-native';
2+
import React from 'react';
3+
import SketchCanvas from '../SketchCanvas';
4+
5+
// Note: test renderer must be required after react-native.
6+
import renderer from 'react-test-renderer';
7+
8+
it('renders correctly', () => {
9+
console.log(SketchCanvas);
10+
renderer.create(<SketchCanvas />);
11+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {requestPermissions} from '../handlePermissions';
2+
3+
jest.mock('react-native/Libraries/Utilities/Platform', () => {
4+
const Platform = jest.requireActual(
5+
'react-native/Libraries/Utilities/Platform',
6+
);
7+
Platform.OS = 'ios';
8+
return Platform;
9+
});
10+
11+
describe('IOS Permission Requestion', () => {
12+
it('should always return true', async () => {
13+
const permissionDialogTitle = 'Permission title';
14+
const permissionDialogMessage = 'Permission message';
15+
16+
const granted = await requestPermissions(
17+
permissionDialogTitle,
18+
permissionDialogMessage,
19+
);
20+
21+
expect(granted).toBe(true);
22+
});
23+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import {requestPermissions} from '../handlePermissions';
2+
3+
jest.mock('react-native/Libraries/Utilities/Platform', () => {
4+
const Platform = jest.requireActual(
5+
'react-native/Libraries/Utilities/Platform',
6+
);
7+
Platform.OS = 'android';
8+
return Platform;
9+
});
10+
11+
jest.mock(
12+
'react-native//Libraries/PermissionsAndroid/PermissionsAndroid',
13+
() => {
14+
return {
15+
...jest.requireActual(
16+
'react-native//Libraries/PermissionsAndroid/PermissionsAndroid',
17+
),
18+
request: jest.fn(() => new Promise(resolve => resolve('denied'))),
19+
};
20+
},
21+
);
22+
23+
describe('Permission Denied', () => {
24+
it('should return false if permission is not granted', async () => {
25+
const permissionDialogTitle = 'Permission title';
26+
const permissionDialogMessage = 'Permission message';
27+
28+
const granted = await requestPermissions(
29+
permissionDialogTitle,
30+
permissionDialogMessage,
31+
);
32+
33+
expect(granted).toBe(false);
34+
});
35+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import {requestPermissions} from '../handlePermissions';
2+
3+
jest.mock('react-native/Libraries/Utilities/Platform', () => {
4+
const Platform = jest.requireActual(
5+
'react-native/Libraries/Utilities/Platform',
6+
);
7+
Platform.OS = 'android';
8+
return Platform;
9+
});
10+
11+
jest.mock(
12+
'react-native//Libraries/PermissionsAndroid/PermissionsAndroid',
13+
() => {
14+
return {
15+
...jest.requireActual(
16+
'react-native//Libraries/PermissionsAndroid/PermissionsAndroid',
17+
),
18+
request: jest.fn(() => new Promise(resolve => resolve('granted'))),
19+
};
20+
},
21+
);
22+
23+
describe('Permission Granted', () => {
24+
it('should return true if permission is granted', async () => {
25+
const permissionDialogTitle = 'Permission title';
26+
const permissionDialogMessage = 'Permission message';
27+
28+
const granted = await requestPermissions(
29+
permissionDialogTitle,
30+
permissionDialogMessage,
31+
);
32+
33+
expect(granted).toBe(true);
34+
});
35+
});

0 commit comments

Comments
 (0)