11import * as _fs from "fs-extra" ;
22import dereferenceDocument , { OpenRPCDocumentDereferencingError } from "./dereference-document" ;
3- import { OpenrpcDocument , ContentDescriptorObject , JSONSchema } from "@open-rpc/meta-schema" ;
3+ import defaultResolver from "@json-schema-tools/reference-resolver" ;
4+ import { OpenrpcDocument , ContentDescriptorObject , JSONSchema , MethodObject } from "@open-rpc/meta-schema" ;
45import { JSONSchemaObject } from "@json-schema-tools/meta-schema" ;
56
67
@@ -17,7 +18,7 @@ describe("dereferenceDocument", () => {
1718
1819 it ( "doesnt explode" , async ( ) => {
1920 expect . assertions ( 1 ) ;
20- const document = await dereferenceDocument ( workingDocument ) ;
21+ const document = await dereferenceDocument ( workingDocument , defaultResolver ) ;
2122 expect ( document . methods ) . toBeDefined ( ) ;
2223 } ) ;
2324
@@ -32,14 +33,24 @@ describe("dereferenceDocument", () => {
3233 { name : "abc" , params : [ ] , result : { name : "cba" , schema : { type : "number" } } }
3334 ] ,
3435 openrpc : "1.0.0-rc1" ,
35- } ) ;
36+ } , defaultResolver ) ;
3637 expect ( document . methods ) . toBeDefined ( ) ;
3738 } ) ;
3839
3940 it ( "derefs simple stuff" , async ( ) => {
4041 expect . assertions ( 7 ) ;
4142 const testDoc = {
4243 ...workingDocument ,
44+ "x-methods" : {
45+ foobar : {
46+ name : "foobar" ,
47+ params : [ ] ,
48+ result : {
49+ name : "abcfoo" ,
50+ schema : { type : "number" }
51+ }
52+ }
53+ } ,
4354 components : {
4455 schemas : {
4556 bigOlBaz : { $ref : "#/components/schemas/bigOlFoo" } ,
@@ -91,15 +102,17 @@ describe("dereferenceDocument", () => {
91102 schema : { $ref : "#/components/schemas/bigOlFoo" }
92103 }
93104 } ) ;
94-
95- const document = await dereferenceDocument ( testDoc ) ;
96- expect ( document . methods ) . toBeDefined ( ) ;
97- expect ( document . methods [ 0 ] ) . toBeDefined ( ) ;
98- expect ( document . methods [ 0 ] . params [ 0 ] ) . toBeDefined ( ) ;
99- expect ( ( document . methods [ 0 ] . params [ 0 ] as ContentDescriptorObject ) . name ) . toBe ( "bazerino" ) ;
100- expect ( document . methods [ 0 ] . result ) . toBeDefined ( ) ;
101- expect ( ( ( document . methods [ 0 ] . result as ContentDescriptorObject ) . schema as JSONSchemaObject ) . title ) . toBe ( "bigOlFoo" ) ;
102- expect ( ( ( document . methods [ 0 ] . params as ContentDescriptorObject [ ] ) [ 1 ] . schema as JSONSchemaObject ) . title ) . toBe ( "bigOlFoo" ) ;
105+ testDoc . methods . push ( { "$ref" :"#/x-methods/foobar" } )
106+
107+ const document = await dereferenceDocument ( testDoc , defaultResolver ) ;
108+ const docMethods = document . methods as MethodObject [ ] ;
109+ expect ( docMethods ) . toBeDefined ( ) ;
110+ expect ( docMethods [ 0 ] ) . toBeDefined ( ) ;
111+ expect ( docMethods [ 0 ] . params [ 0 ] ) . toBeDefined ( ) ;
112+ expect ( ( docMethods [ 0 ] . params [ 0 ] as ContentDescriptorObject ) . name ) . toBe ( "bazerino" ) ;
113+ expect ( docMethods [ 0 ] . result ) . toBeDefined ( ) ;
114+ expect ( ( ( docMethods [ 0 ] . result as ContentDescriptorObject ) . schema as JSONSchemaObject ) . title ) . toBe ( "bigOlFoo" ) ;
115+ expect ( ( ( docMethods [ 0 ] . params as ContentDescriptorObject [ ] ) [ 1 ] . schema as JSONSchemaObject ) . title ) . toBe ( "bigOlFoo" ) ;
103116 } ) ;
104117
105118 it ( "interdependent refs" , async ( ) => {
@@ -145,12 +158,12 @@ describe("dereferenceDocument", () => {
145158 }
146159 } as OpenrpcDocument ;
147160
148- const document = await dereferenceDocument ( testDoc ) ;
161+ const document = await dereferenceDocument ( testDoc , defaultResolver ) ;
149162 expect ( document . methods ) . toBeDefined ( ) ;
150163 expect ( document . methods [ 0 ] ) . toBeDefined ( ) ;
151164
152- const params = document . methods [ 0 ] . params as ContentDescriptorObject [ ] ;
153- const result = document . methods [ 0 ] . result as ContentDescriptorObject ;
165+ const params = ( document . methods [ 0 ] as MethodObject ) . params as ContentDescriptorObject [ ] ;
166+ const result = ( document . methods [ 0 ] as MethodObject ) . result as ContentDescriptorObject ;
154167 expect ( params ) . toBeDefined ( ) ;
155168 expect ( result ) . toBeDefined ( ) ;
156169
@@ -191,7 +204,7 @@ describe("dereferenceDocument", () => {
191204 } ;
192205
193206 try {
194- await dereferenceDocument ( testDoc as OpenrpcDocument )
207+ await dereferenceDocument ( testDoc as OpenrpcDocument , defaultResolver )
195208 } catch ( e ) {
196209 expect ( e ) . toBeInstanceOf ( OpenRPCDocumentDereferencingError ) ;
197210 }
@@ -218,7 +231,7 @@ describe("dereferenceDocument", () => {
218231 } ;
219232
220233 try {
221- await dereferenceDocument ( testDoc as OpenrpcDocument )
234+ await dereferenceDocument ( testDoc as OpenrpcDocument , defaultResolver )
222235 } catch ( e ) {
223236 expect ( e ) . toBeInstanceOf ( OpenRPCDocumentDereferencingError ) ;
224237 }
@@ -248,7 +261,7 @@ describe("dereferenceDocument", () => {
248261 } ;
249262
250263 try {
251- await dereferenceDocument ( testDoc as OpenrpcDocument )
264+ await dereferenceDocument ( testDoc as OpenrpcDocument , defaultResolver )
252265 } catch ( e ) {
253266 expect ( e ) . toBeInstanceOf ( OpenRPCDocumentDereferencingError ) ;
254267 }
@@ -286,7 +299,7 @@ describe("dereferenceDocument", () => {
286299 }
287300 } ;
288301
289- const result = await dereferenceDocument ( testDoc as OpenrpcDocument ) as any ;
302+ const result = await dereferenceDocument ( testDoc as OpenrpcDocument , defaultResolver ) as any ;
290303
291304 expect ( result . methods [ 0 ] . links [ 0 ] ) . toBe ( testDoc . components . links . fooLink )
292305 } ) ;
@@ -312,7 +325,7 @@ describe("dereferenceDocument", () => {
312325 ]
313326 } ;
314327
315- const result = await dereferenceDocument ( testDoc as OpenrpcDocument ) as any ;
328+ const result = await dereferenceDocument ( testDoc as OpenrpcDocument , defaultResolver ) as any ;
316329
317330 expect ( result . methods [ 0 ] . result . schema . type ) . toBe ( "string" )
318331 } ) ;
@@ -348,7 +361,7 @@ describe("dereferenceDocument", () => {
348361 }
349362 } ;
350363
351- const result = await dereferenceDocument ( testDoc as OpenrpcDocument ) as any ;
364+ const result = await dereferenceDocument ( testDoc as OpenrpcDocument , defaultResolver ) as any ;
352365
353366 expect ( result . methods [ 0 ] . result . schema . properties . foo ) . toBe ( result . components . schemas . foo ) ;
354367 } ) ;
@@ -386,7 +399,7 @@ describe("dereferenceDocument", () => {
386399 } ;
387400
388401 try {
389- await dereferenceDocument ( testDoc as OpenrpcDocument ) as any ;
402+ await dereferenceDocument ( testDoc as OpenrpcDocument , defaultResolver ) as any ;
390403 } catch ( e ) {
391404 expect ( e ) . toBeInstanceOf ( OpenRPCDocumentDereferencingError ) ;
392405 }
0 commit comments