diff --git a/src/Documentation.test.tsx b/src/Documentation.test.tsx
index 1af7d80..e1aefcd 100644
--- a/src/Documentation.test.tsx
+++ b/src/Documentation.test.tsx
@@ -7,3 +7,9 @@ it("renders without crashing", () => {
ReactDOM.render(, div);
ReactDOM.unmountComponentAtNode(div);
});
+
+it("renders without crashing with no schema", () => {
+ const div = document.createElement("div");
+ ReactDOM.render(, div);
+ ReactDOM.unmountComponentAtNode(div);
+});
diff --git a/src/Documentation.tsx b/src/Documentation.tsx
index 90737fe..0ae3272 100644
--- a/src/Documentation.tsx
+++ b/src/Documentation.tsx
@@ -6,7 +6,7 @@ import ContentDescriptors from "./ContentDescriptors/ContentDescriptors";
import { OpenrpcDocument } from "@open-rpc/meta-schema";
interface IProps {
- schema: OpenrpcDocument;
+ schema?: OpenrpcDocument;
uiSchema?: any;
reactJsonOptions?: any;
methodPlugins?: Array>;
diff --git a/src/ExamplePairings/ExamplePairings.test.tsx b/src/ExamplePairings/ExamplePairings.test.tsx
index 5cacfb9..f58028f 100644
--- a/src/ExamplePairings/ExamplePairings.test.tsx
+++ b/src/ExamplePairings/ExamplePairings.test.tsx
@@ -113,7 +113,53 @@ it("renders examples with only schema examples with no params", async () => {
} />
, div);
expect(div.innerHTML.includes("potato")).toBe(true);
+ expect(div.innerHTML.includes("bob")).toBe(false);
+ ReactDOM.unmountComponentAtNode(div);
+});
+
+it("renders examples with multiple param schema examples and no method", async () => {
+ const div = document.createElement("div");
+ const testDoc: OpenrpcDocument = {
+ info: {
+ title: "test",
+ version: "0.0.0",
+ },
+ methods: [
+ {
+ name: "test-method",
+ params: [
+ {
+ name: "testparam1",
+ schema: {
+ examples: ["bob"],
+ type: "string",
+ },
+ },
+ {
+ name: "testparam2",
+ schema: {
+ examples: ["bob2"],
+ type: "string",
+ },
+ },
+ ],
+ result: {
+ name: "test-method-result",
+ schema: {
+ examples: ["potato"],
+ type: "string",
+ },
+ },
+ },
+ ],
+ openrpc: "1.0.0",
+ };
+ ReactDOM.render(
+
+ , div);
+ console.log("div", div.innerHTML); //tslint:disable-line
expect(div.innerHTML.includes("bob")).toBe(true);
+ expect(div.innerHTML.includes("bob2")).toBe(true);
ReactDOM.unmountComponentAtNode(div);
});
@@ -153,6 +199,77 @@ it("renders examples with only schema examples and no method", async () => {
ReactDOM.unmountComponentAtNode(div);
});
+it("renders examples with only schema examples and no method with number", async () => {
+ const div = document.createElement("div");
+ const testDoc: OpenrpcDocument = {
+ info: {
+ title: "test",
+ version: "0.0.0",
+ },
+ methods: [
+ {
+ name: "test-method",
+ params: [{
+ name: "testparam1",
+ schema: {
+ examples: [10101],
+ type: "number",
+ },
+ }],
+ result: {
+ name: "test-method-result",
+ schema: {
+ examples: ["potato"],
+ type: "string",
+ },
+ },
+ },
+ ],
+ openrpc: "1.0.0",
+ };
+ ReactDOM.render(
+
+ , div);
+ ReactDOM.unmountComponentAtNode(div);
+});
+it("renders examples with only schema examples and no method with multiple number examples", async () => {
+ const div = document.createElement("div");
+ const testDoc: OpenrpcDocument = {
+ info: {
+ title: "test",
+ version: "0.0.0",
+ },
+ methods: [
+ {
+ name: "test-method",
+ params: [{
+ name: "testparam1",
+ schema: {
+ examples: [10101, 102],
+ type: "number",
+ },
+ }],
+ result: {
+ name: "test-method-result",
+ schema: {
+ examples: ["potato", "bar"],
+ type: "string",
+ },
+ },
+ },
+ ],
+ openrpc: "1.0.0",
+ };
+ ReactDOM.render(
+
+ , div);
+ ReactDOM.unmountComponentAtNode(div);
+});
+
it("renders examples and can switch between them", async () => {
const simpleMath = await refParser.dereference(examples.simpleMath) as OpenrpcDocument;
const { getByText } = render(
diff --git a/src/ExamplePairings/ExamplePairings.tsx b/src/ExamplePairings/ExamplePairings.tsx
index e32004e..5cbb204 100644
--- a/src/ExamplePairings/ExamplePairings.tsx
+++ b/src/ExamplePairings/ExamplePairings.tsx
@@ -15,15 +15,6 @@ interface IState {
currentExample?: ExamplePairingObject;
}
-const newExample: ExamplePairingObject = {
- name: "generated-example",
- params: [
- ],
- result: {
- name: "example-result",
- value: null,
- },
-};
const getExamplesFromMethod = (method?: MethodObject): ExamplePairingObject[] => {
if (!method) { return []; }
if (!method.params) { return []; }
@@ -33,12 +24,25 @@ const getExamplesFromMethod = (method?: MethodObject): ExamplePairingObject[] =>
if (param.schema && param.schema.examples && param.schema.examples.length > 0) {
param.schema.examples.forEach((ex: any, i: number) => {
if (!examples[i]) {
- examples.push({ ...newExample });
+ examples.push({
+ name: "generated-example",
+ params: [
+ {
+ name: param.name,
+ value: ex,
+ },
+ ],
+ result: {
+ name: "example-result",
+ value: null,
+ },
+ });
+ } else {
+ examples[i].params.push({
+ name: param.name,
+ value: ex,
+ });
}
- examples[i].params.push({
- name: param.name,
- value: ex,
- });
});
}
});
@@ -46,12 +50,20 @@ const getExamplesFromMethod = (method?: MethodObject): ExamplePairingObject[] =>
if (methodResult && methodResult.schema && methodResult.schema.examples && methodResult.schema.examples.length > 0) {
methodResult.schema.examples.forEach((ex: any, i: number) => {
if (!examples[i]) {
- examples.push({ ...newExample });
+ examples.push({
+ name: "generated-example",
+ params: [],
+ result: {
+ name: methodResult.name,
+ value: ex,
+ },
+ });
+ } else {
+ examples[i].result = {
+ name: methodResult.name,
+ value: ex,
+ };
}
- examples[i].result = {
- name: methodResult.name,
- value: ex,
- };
});
}
return examples;