Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/Documentation.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@ it("renders without crashing", () => {
ReactDOM.render(<Documentation schema={{} as any}/>, div);
ReactDOM.unmountComponentAtNode(div);
});

it("renders without crashing with no schema", () => {
const div = document.createElement("div");
ReactDOM.render(<Documentation />, div);
ReactDOM.unmountComponentAtNode(div);
});
2 changes: 1 addition & 1 deletion src/Documentation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<React.FC<IMethodPluginProps>>;
Expand Down
117 changes: 117 additions & 0 deletions src/ExamplePairings/ExamplePairings.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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(
<ExamplePairings method={testDoc.methods[0]} />
, 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);
});

Expand Down Expand Up @@ -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(
<ExamplePairings
examples={testDoc.methods[0].examples as ExamplePairingObject[]
} />
, 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(
<ExamplePairings
examples={testDoc.methods[0].examples as ExamplePairingObject[]
} />
, 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(
Expand Down
50 changes: 31 additions & 19 deletions src/ExamplePairings/ExamplePairings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 []; }
Expand All @@ -33,25 +24,46 @@ 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,
});
});
}
});
const methodResult = method.result as ContentDescriptorObject;
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;
Expand Down