Skip to content

Commit 1436a66

Browse files
committed
implement tests
1 parent 7fdb99e commit 1436a66

File tree

5 files changed

+375
-7
lines changed

5 files changed

+375
-7
lines changed

.eslintrc.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@
2727
"functional/functional-parameters": "off",
2828
"functional/no-return-void": "off",
2929
"@typescript-eslint/prefer-readonly-parameter-types": "off",
30-
"@typescript-eslint/no-explicit-any": "off"
30+
"@typescript-eslint/no-explicit-any": "off",
31+
"functional/no-throw-statements": "off",
32+
"functional/no-classes": "off",
33+
"functional/no-conditional-statements": "off",
34+
"functional/immutable-data": "off"
3135
}
3236
}
3337
]

package.json

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
"start": "astro dev",
99
"build": "astro build",
1010
"preview": "astro preview",
11-
"test": "echo 'Skip'",
12-
"pretest": "tsc",
11+
"test": "vitest",
12+
"test:ci": "vitest --run",
1313
"prebuild": "rimraf dist",
1414
"lint": "yarn lint:eslint && yarn lint:format",
1515
"lint:eslint": "eslint . --ext .ts,.js --fix",
@@ -47,7 +47,8 @@
4747
"prettier": "3.2.4",
4848
"rimraf": "5.0.5",
4949
"type-fest": "^4.10.2",
50-
"typescript": "5.3.3"
50+
"typescript": "5.3.3",
51+
"vitest": "^1.2.2"
5152
},
5253
"repository": "git+https://github.com/dev-protocol/template-repos-ts.git",
5354
"bugs": {

utils/tx.test.ts

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import { expect, describe, it, vi } from 'vitest'
2+
import { send } from './tx'
3+
import redis, { createClient } from 'redis'
4+
import {
5+
Contract,
6+
JsonRpcProvider,
7+
Wallet,
8+
type TransactionRequest,
9+
} from 'ethers'
10+
import { generateTransactionKey } from './db'
11+
import { agentAddresses } from '@devprotocol/dev-kit'
12+
13+
enum MockUses {
14+
Default = 'default',
15+
Error = 'error',
16+
}
17+
const redisData = new Map()
18+
const redisConnectUses: MockUses = MockUses.Default
19+
20+
vi.mock('redis', async () => {
21+
const actual: typeof redis = await vi.importActual('redis')
22+
const lib = vi.fn(() => ({
23+
connect: vi.fn(() => {
24+
if (redisConnectUses === MockUses.Default) {
25+
return null
26+
}
27+
if (redisConnectUses === MockUses.Error) {
28+
throw new Error('REDIS ERROR')
29+
}
30+
}),
31+
get: vi.fn(async (k) => redisData.get(k)),
32+
set: vi.fn(async (k, v) => redisData.set(k, v)),
33+
quit: vi.fn(),
34+
}))
35+
36+
return { ...actual, default: actual, createClient: lib }
37+
})
38+
vi.mock('JsonRpcProvider', () => {
39+
return class {
40+
public async getFeeData() {
41+
return { maxFeePerGas: 1n, maxPriorityFeePerGas: 1n }
42+
}
43+
}
44+
})
45+
46+
describe('send', () => {
47+
describe('Normal cases', () => {
48+
const redis = createClient()
49+
const provider = new JsonRpcProvider(
50+
'https://polygon-mumbai-bor-rpc.publicnode.com',
51+
)
52+
const signer = Wallet.createRandom().connect(provider)
53+
vi.spyOn(signer, 'sendTransaction').mockImplementation(
54+
async (tx: TransactionRequest) => {
55+
return ['sent', tx] as any
56+
},
57+
)
58+
59+
it('should return tx', async () => {
60+
const contract = new Contract(
61+
agentAddresses.polygon.mumbai.weth,
62+
['function transfer(address, uint) public'],
63+
signer,
64+
)
65+
66+
const { to, data } = await contract.transfer.populateTransaction(
67+
signer.address,
68+
0n,
69+
)
70+
redisData.set(
71+
generateTransactionKey(to, data, 'id'),
72+
new Date().getTime() - 60001,
73+
)
74+
const res = await send({
75+
contract,
76+
method: 'transfer',
77+
signer,
78+
chainId: 80001,
79+
rpcUrl: 'https://polygon-mumbai-bor-rpc.publicnode.com/', // Mumbai
80+
args: [signer.address, 0n],
81+
requestId: 'id',
82+
redis,
83+
})
84+
console.log(res)
85+
expect((res as any)[0]).toBe('sent')
86+
})
87+
})
88+
})

vitest.config.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/// <reference types="vitest" />
2+
import { getViteConfig } from 'astro/config'
3+
4+
export default getViteConfig({})

0 commit comments

Comments
 (0)