Skip to content

Commit e39a37b

Browse files
committed
fix: add example pairing support
1 parent 6f31313 commit e39a37b

File tree

2 files changed

+49
-15
lines changed

2 files changed

+49
-15
lines changed

src/coverage.ts

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { OpenRPC } from "@open-rpc/meta-schema";
1+
import { OpenRPC, ExamplePairingObject, ContentDescriptorObject, ExampleObject } from "@open-rpc/meta-schema";
22
const jsf = require("json-schema-faker"); // tslint:disable-line
33

4-
const getParams = async (params: any[]) => {
4+
const getFakeParams = async (params: any[]) => {
55
const promises = params.map((p) => {
66
return jsf.generate(p.schema);
77
});
@@ -21,20 +21,30 @@ export default async (options: IOptions) => {
2121
if (options.skipMethods.includes(method.name)) {
2222
return;
2323
}
24-
const params = await getParams(method.params);
24+
let exampleParamSet: any[] = [];
25+
if (method.examples && method.examples.length > 0) {
26+
exampleParamSet = (method.examples as ExamplePairingObject[]).map((ex: ExamplePairingObject) => {
27+
return (ex.params as ExampleObject[]).map((p: ExampleObject) => {
28+
return (p as ExampleObject).value;
29+
});
30+
});
31+
} else {
32+
exampleParamSet = [await getFakeParams(method.params)];
33+
}
2534
const urls = (options.schema.servers || []).map((u) => {
2635
// TODO: support server variables
2736
return u.url;
2837
});
2938
return Promise.all(urls.map((url) => {
30-
return options.transport(url, method.name, params)
31-
.then((r: any) => {
32-
results.push({
33-
method: method.name,
34-
params,
35-
...r,
36-
});
39+
return Promise.all(exampleParamSet.map(async (params: any, exampleIndex: number) => {
40+
const r = await options.transport(url, method.name, params);
41+
results.push({
42+
method: method.name,
43+
exampleIndex: exampleIndex,
44+
params,
45+
...r,
3746
});
47+
}));
3848
}));
3949
});
4050

src/reporters/console.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import colors from "colors";
22
import Ajv, { ErrorObject, Ajv as IAjv } from "ajv";
3-
import { OpenRPC, MethodObject, ContentDescriptorObject } from "@open-rpc/meta-schema";
3+
import {
4+
OpenRPC,
5+
MethodObject,
6+
ContentDescriptorObject,
7+
ExamplePairingObject,
8+
ExampleObject,
9+
} from "@open-rpc/meta-schema";
10+
import json from "./json";
411

512
export default (callResults: any[], schema: OpenRPC) => {
613
const ajv = new Ajv();
@@ -31,6 +38,24 @@ export default (callResults: any[], schema: OpenRPC) => {
3138
};
3239
}
3340

41+
if (methodSchema.examples && methodSchema.examples.length > 0) {
42+
const example = (methodSchema.examples[call.exampleIndex] as ExamplePairingObject);
43+
const checkParams = (example.params as ExampleObject[]).map((p: ExampleObject) => p.value);
44+
const paramsEqual = (JSON.stringify(checkParams) === JSON.stringify(call.params));
45+
const resultEqual = JSON.stringify(call.result) === JSON.stringify((example.result as ExampleObject).value)
46+
if (paramsEqual && resultEqual) {
47+
metrics.success++;
48+
console.log(colors.green("Example Success: "), call.method, call.params, call.result);
49+
} else {
50+
console.log(colors.red.underline("Example Validation Error: "), colors.cyan(call.method));
51+
console.log('params: ', call.params);
52+
console.log('result: ', call.result);
53+
console.log('examples: ', methodSchema.examples);
54+
console.log('method object', methodSchema);
55+
}
56+
return;
57+
}
58+
3459
ajv.validate(resultSchema, call.result);
3560
const errors = ajv.errors as ErrorObject[];
3661

@@ -39,11 +64,10 @@ export default (callResults: any[], schema: OpenRPC) => {
3964
console.log(colors.green("Success: "), call.method);
4065
} else {
4166
console.log(colors.red.underline("Result Validation Error: "), colors.cyan(call.method));
42-
console.log(call);
43-
console.log(errors);
44-
console.log(methodSchema);
67+
console.log('call: ', call);
68+
console.log('errors: ', errors);
69+
console.log('method: ', methodSchema);
4570
}
46-
4771
}
4872
});
4973
console.log("==========");

0 commit comments

Comments
 (0)