diff --git a/packages/taco/test/conditions/base/json.test.ts b/packages/taco/test/conditions/base/json.test.ts new file mode 100644 index 000000000..6344b1a96 --- /dev/null +++ b/packages/taco/test/conditions/base/json.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from 'vitest'; + +import { + JsonApiCondition, + JsonApiConditionSchema, +} from '../../../src/conditions/base/json-api'; +import { testJsonApiConditionObj } from '../../test-utils'; + +describe('JsonApiCondition', () => { + describe('validation', () => { + it('accepts a valid schema', () => { + const result = JsonApiCondition.validate( + JsonApiConditionSchema, + testJsonApiConditionObj, + ); + + expect(result.error).toBeUndefined(); + expect(result.data).toEqual(testJsonApiConditionObj); + }); + + it('rejects an invalid schema', () => { + const badJsonApiObj = { + ...testJsonApiConditionObj, + endpoint: 'not-a-url', + }; + + const result = JsonApiCondition.validate(JsonApiConditionSchema, badJsonApiObj); + + expect(result.error).toBeDefined(); + expect(result.data).toBeUndefined(); + expect(result.error?.format()).toMatchObject({ + endpoint: { + _errors: ['Invalid url'], + }, + }); + }); + }); +}); diff --git a/packages/taco/test/test-utils.ts b/packages/taco/test/test-utils.ts index 02de484f3..33c562265 100644 --- a/packages/taco/test/test-utils.ts +++ b/packages/taco/test/test-utils.ts @@ -39,6 +39,10 @@ import { ContractConditionType, FunctionAbiProps, } from '../src/conditions/base/contract'; +import { + JsonApiConditionProps, + JsonApiConditionType +} from '../src/conditions/base/json-api'; import { RpcConditionProps, RpcConditionType, @@ -222,6 +226,17 @@ export const testTimeConditionObj: TimeConditionProps = { chain: TEST_CHAIN_ID, }; +export const testJsonApiConditionObj = { + conditionType: JsonApiConditionType, + endpoint: 'https://api.coingecko.com/api/v3/simple/price', + parameters: { + 'ids': 'ethereum', + 'vs_currencies': 'usd', + }, + query: '$.ethereum.usd', + returnValueTest: testReturnValueTest, +}; + export const testRpcConditionObj: RpcConditionProps = { conditionType: RpcConditionType, chain: TEST_CHAIN_ID,