Skip to content

Commit

Permalink
Merge pull request #512 from open-rpc/fix/params-by-name
Browse files Browse the repository at this point in the history
fix: params by name sortParamKeys should return val not return ["key",  val]
  • Loading branch information
shanejonas authored Dec 11, 2020
2 parents b016930 + 8a79740 commit 07425fe
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 7 deletions.
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
"ws": "^7.3.1"
},
"devDependencies": {
"@open-rpc/examples": "^1.6.0",
"@open-rpc/examples": "^1.6.1",
"@open-rpc/meta-schema": "^1.13.20",
"@types/body-parser": "^1.19.0",
"@types/connect": "^3.4.33",
Expand Down
11 changes: 10 additions & 1 deletion src/router.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,12 @@ describe("router", () => {
if (exampleName === "petstoreByName") {
it("handles params by name", async () => {
const router = new Router(parsedExample, makeMethodMapping(parsedExample.methods));
const result = await router.call("list_pets", { limit: 10 });
const result = await router.call("list_pets", { limit: 1 });
expect(result).toBeDefined();
expect(result.result.length).toBeGreaterThan(0);
expect(result.result[0].name).toBe("fluffy");
expect(result.result[0].id).toBe(7);
expect(result.result[0].tag).toBe("poodle");
});
}
if (exampleName === "simpleMath") {
Expand Down Expand Up @@ -108,6 +111,12 @@ describe("router", () => {
expect(result).toEqual(parsedExample);
});

it("can call rpc.discover with empty object", async () => {
const router = new Router(parsedExample, makeMethodMapping(parsedExample.methods));
const { result } = await router.call("rpc.discover", {});
expect(result).toEqual(parsedExample);
});

it("Simple math call validates params", async () => {
const router = new Router(parsedExample, makeMethodMapping(parsedExample.methods));
const { error } = await router.call("addition", ["2", 2]);
Expand Down
12 changes: 10 additions & 2 deletions src/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,21 @@ export interface MockModeSettings {

export type TMethodHandler = (...args: any) => Promise<any>;

const sortParamKeys = (method: MethodObject, params: Record<string, unknown>) => {
const sortParamKeys = (method?: MethodObject, params?: Record<string, unknown>) => {
if (!method) {
return [];
}
if (!params) {
return [];
}
const docParams = method.params as ContentDescriptorObject[];
const methodParamsOrder: { [k: string]: number } = docParams
.map((p) => p.name)
.reduce((m, pn, i) => ({ ...m, [pn]: i }), {});

return Object.entries(params).sort((v1, v2) => methodParamsOrder[v1[0]] - methodParamsOrder[v2[0]]);
return Object.entries(params)
.sort((v1, v2) => methodParamsOrder[v1[0]] - methodParamsOrder[v2[0]])
.map(([key, val]) => val);
};

export class Router {
Expand Down

0 comments on commit 07425fe

Please sign in to comment.