Skip to content

Commit 1d61caf

Browse files
authored
Test: Add oracle api request (#235)
1 parent 84e1eb2 commit 1d61caf

8 files changed

Lines changed: 60 additions & 4 deletions

File tree

.changeset/seven-parents-judge.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@mimicprotocol/test-ts": patch
3+
"@mimicprotocol/cli": patch
4+
"@mimicprotocol/lib-ts": patch
5+
---
6+
7+
add api query oracle mock to test

packages/test-ts/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
This package provides tooling and helpers to write and run tests for Mimic Protocol functions using TypeScript. It includes:
2929

30-
- Mocking of inputs, balances, prices, contract calls responses, and context variables
30+
- Mocking of inputs, balances, prices, contract calls responses, api requests, and context variables
3131
- Simulated function execution with mocked environment
3232
- Structured function outputs to assert emitted intents using frameworks like Mocha and Chai
3333

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { OracleQueryParams, OracleQueryResult } from '@mimicprotocol/sdk'
2+
3+
import { ApiQueryRequest, ApiQueryResponse, QueryProcessor } from '../types'
4+
import { ApiQueryRequestValidator, ApiQueryResponseValidator } from '../validators'
5+
6+
export const apiQueryProcessor: QueryProcessor<
7+
ApiQueryRequest,
8+
ApiQueryResponse,
9+
OracleQueryParams<'ApiQuery'>,
10+
OracleQueryResult<'ApiQuery'>
11+
> = {
12+
queryName: 'ApiQuery',
13+
queryTypeLabel: 'api query entry',
14+
requestValidator: ApiQueryRequestValidator,
15+
responseValidator: ApiQueryResponseValidator,
16+
transformParams: (req, timestamp) => ({
17+
...req,
18+
timestamp: req.timestamp ?? timestamp,
19+
}),
20+
transformResponse: (res) => res,
21+
}

packages/test-ts/src/processors/evm-call.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,14 @@ export const evmCallQueryProcessor: QueryProcessor<
1515
requestValidator: EvmCallRequestValidator,
1616
responseValidator: EvmCallTypedValueValidator,
1717
transformParams: (req, timestamp) => {
18-
const data = req.params
19-
? concat([req.fnSelector, ...req.params.map((p) => AbiCoder.defaultAbiCoder().encode([p.abiType], [p.value]))])
18+
const data = req.params?.length
19+
? concat([
20+
req.fnSelector,
21+
AbiCoder.defaultAbiCoder().encode(
22+
req.params.map((p) => p.abiType),
23+
req.params.map((p) => p.value)
24+
),
25+
])
2026
: req.fnSelector
2127
return {
2228
to: req.to,

packages/test-ts/src/processors/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from './api'
12
export * from './evm-call'
23
export * from './price'
34
export * from './relevant-tokens'

packages/test-ts/src/run-function.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { runExecution } from '@mimicprotocol/runner-node'
22
import * as path from 'path'
33

44
import {
5+
apiQueryProcessor,
56
evmCallQueryProcessor,
67
priceQueryProcessor,
78
relevantTokensQueryProcessor,
@@ -62,17 +63,19 @@ export async function runFunction(
6263
}
6364

6465
function getOracleResponses(optional: RunFunctionOptionalParams, contextTimestamp: number) {
65-
const { prices = [], relevantTokens = [], calls = [], subgraphQueries = [] } = optional
66+
const { prices = [], relevantTokens = [], calls = [], subgraphQueries = [], apiQueries = [] } = optional
6667

6768
const priceResponses = processQueries(prices, priceQueryProcessor, contextTimestamp)
6869
const relevantTokensResponses = processQueries(relevantTokens, relevantTokensQueryProcessor, contextTimestamp)
6970
const callsResponses = processQueries(calls, evmCallQueryProcessor, contextTimestamp)
7071
const subgraphQueriesResponses = processQueries(subgraphQueries, subgraphQueryProcessor, contextTimestamp)
72+
const apiQueriesResponses = processQueries(apiQueries, apiQueryProcessor, contextTimestamp)
7173

7274
return {
7375
...priceResponses,
7476
...relevantTokensResponses,
7577
...callsResponses,
7678
...subgraphQueriesResponses,
79+
...apiQueriesResponses,
7780
}
7881
}

packages/test-ts/src/types.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import {
99
} from '@mimicprotocol/sdk'
1010

1111
import {
12+
ApiQueryRequestValidator,
13+
ApiQueryResponseValidator,
1214
ContextValidator,
1315
EvmCallRequestValidator,
1416
EvmCallTypedValueValidator,
@@ -86,13 +88,19 @@ export type SubgraphQueryResponse = z.infer<typeof SubgraphQueryResponseValidato
8688

8789
export type SubgraphQueryMock = QueryMock<SubgraphQueryRequest, SubgraphQueryResponse>
8890

91+
export type ApiQueryRequest = z.infer<typeof ApiQueryRequestValidator>
92+
export type ApiQueryResponse = z.infer<typeof ApiQueryResponseValidator>
93+
94+
export type ApiQueryMock = QueryMock<ApiQueryRequest, ApiQueryResponse>
95+
8996
export type GenerateMockParams = {
9097
context: Context
9198
inputs: Inputs
9299
prices: TokenPriceQueryMock[]
93100
relevantTokens: RelevantTokensQueryMock[]
94101
calls: EvmCallQueryMock[]
95102
subgraphQueries: SubgraphQueryMock[]
103+
apiQueries: ApiQueryMock[]
96104
showLogs: boolean
97105
}
98106

packages/test-ts/src/validators.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import {
22
AddressValidator,
33
ChainIdValidator,
44
HexValidator,
5+
OracleApiRequestValidator,
6+
OracleApiResultValidator,
57
OracleEvmCallRequestValidator,
68
OracleRelevantTokenResultValidator,
79
OracleRelevantTokensRequestValidator,
@@ -106,3 +108,11 @@ export const SubgraphQueryRequestValidator = OracleSubgraphQueryRequestValidator
106108
})
107109

108110
export const SubgraphQueryResponseValidator = OracleSubgraphQueryResultValidator
111+
112+
// ========= Api Call =========
113+
114+
export const ApiQueryRequestValidator = OracleApiRequestValidator.omit({ timestamp: true }).extend({
115+
timestamp: PastTimestamp.optional(),
116+
})
117+
118+
export const ApiQueryResponseValidator = OracleApiResultValidator

0 commit comments

Comments
 (0)