Skip to content

Commit c693905

Browse files
committed
refacotr: init tests
1 parent 6f7a52c commit c693905

File tree

6 files changed

+823
-15
lines changed

6 files changed

+823
-15
lines changed

packages/rn/package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"access": "public"
55
},
66
"version": "0.1.0",
7+
"type": "module",
78
"main": "./lib/index.js",
89
"types": "./lib/index.d.ts",
910
"exports": {
@@ -30,7 +31,8 @@
3031
"dev:tsc": "tsc -p tsconfig.build.json -w --preserveWatchOutput",
3132
"check": "tsc --noEmit",
3233
"build": "rm -rf lib/ && tsc -p tsconfig.build.json",
33-
"lint": "eslint --ext .ts src"
34+
"lint": "eslint --ext .ts src",
35+
"test": "vitest src/"
3436
},
3537
"devDependencies": {
3638
"@babel/preset-env": "^7.23.9",
@@ -42,7 +44,8 @@
4244
"eslint": "^8.56.0",
4345
"prettier": "^3.2.5",
4446
"stylelint": "^16.2.1",
45-
"typescript": "^5.3.3"
47+
"typescript": "^5.3.3",
48+
"vitest": "^1.3.0"
4649
},
4750
"eslintConfig": {
4851
"extends": "@silverhand/react"

packages/rn/src/storage.test.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import CryptoES from 'crypto-es';
2+
3+
import { SecureStorage } from './storage';
4+
5+
vitest.mock('expo-crypto', () => ({
6+
getRandomBytesAsync: async (byteLength: number) => {
7+
return new Uint8Array(byteLength).fill(0);
8+
},
9+
}));
10+
11+
const asyncStore = new Map<string, string>();
12+
13+
vitest.mock('@react-native-async-storage/async-storage', () => ({
14+
default: {
15+
getItem: (key: string) => {
16+
return asyncStore.get(key) ?? null;
17+
},
18+
setItem: (key: string, value: string) => {
19+
asyncStore.set(key, value);
20+
},
21+
removeItem: (key: string) => {
22+
asyncStore.delete(key);
23+
},
24+
},
25+
}));
26+
27+
const secureStore = new Map<string, string>();
28+
29+
vitest.mock('expo-secure-store', () => ({
30+
deleteItemAsync: (key: string) => {
31+
secureStore.delete(key);
32+
},
33+
getItemAsync: (key: string) => {
34+
return secureStore.get(key) ?? null;
35+
},
36+
setItemAsync: (key: string, value: string) => {
37+
secureStore.set(key, value);
38+
},
39+
}));
40+
41+
describe('SecureStorage', () => {
42+
it('should be able to store and retrieve encrypted value', async () => {
43+
const storage = new SecureStorage('test');
44+
const key = 'key';
45+
const value = 'value';
46+
47+
await storage.setItem(key, value);
48+
const result = await storage.getItem(key);
49+
expect(result).toBe(value);
50+
51+
const encrypted = asyncStore.get('test.key');
52+
const encryptionKey = secureStore.get('test.key');
53+
expect(CryptoES.AES.decrypt(encrypted!, encryptionKey!).toString(CryptoES.enc.Utf8)).toBe(
54+
'value'
55+
);
56+
});
57+
});

packages/rn/src/storage.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ export class SecureStorage implements Storage<string> {
3434
return null;
3535
}
3636

37-
return this.#decrypt(storageKey, encrypted);
37+
return this.decrypt(storageKey, encrypted);
3838
}
3939

4040
async setItem(key: string, value: string) {
4141
const storageKey = this.getStorageKey(key);
42-
const encrypted = await this.#encrypt(storageKey, value);
42+
const encrypted = await this.encrypt(storageKey, value);
4343
await AsyncStorage.setItem(storageKey, encrypted);
4444
}
4545

@@ -51,15 +51,15 @@ export class SecureStorage implements Storage<string> {
5151
]);
5252
}
5353

54-
async #encrypt(key: string, value: string) {
54+
protected async encrypt(key: string, value: string) {
5555
const encryptionKey = await generateRandomString();
5656
const encrypted = CryptoES.AES.encrypt(value, encryptionKey).toString();
5757

5858
await SecureStore.setItemAsync(key, encryptionKey);
5959
return encrypted;
6060
}
6161

62-
async #decrypt(key: string, value: string) {
62+
protected async decrypt(key: string, value: string) {
6363
const encryptionKey = await SecureStore.getItemAsync(key);
6464

6565
if (!encryptionKey) {

packages/rn/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
{
22
"extends": "@silverhand/ts-config-react/tsconfig.base",
33
"compilerOptions": {
4+
"types": ["node", "vitest/globals"],
45
"noEmit": false,
56
"outDir": "lib"
67
},
78
"include": [
89
"src",
9-
"jest.config.ts"
10+
"vitest.config.ts"
1011
]
1112
}

packages/rn/vitest.config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { defineConfig } from 'vitest/config';
2+
3+
export default defineConfig({
4+
test: {
5+
globals: true,
6+
watch: false,
7+
},
8+
});

0 commit comments

Comments
 (0)