@@ -336,7 +336,7 @@ const SimpleRouteResponse = t.type({
336336 * @title Human Readable Invalid Error Schema
337337 */
338338const InvalidError = t.intersection([
339- ApiError,
339+ ApiError,
340340 t.type({ error: t.literal('invalid') })]);
341341/**
342342 * Human readable description of the ApiError schema
@@ -441,3 +441,201 @@ testCase('route with api error schema', ROUTE_WITH_SCHEMA_WITH_COMMENT, {
441441 } ,
442442 } ,
443443} ) ;
444+
445+ const ROUTE_WITH_ARRAY_OF_INNER_SCHEMA_REF_WITH_NO_SIBLINGS = `
446+ import * as t from 'io-ts';
447+ import * as h from '@api-ts/io-ts-http';
448+ /**
449+ * A simple route with type descriptions for references
450+ *
451+ * @operationId api.v1.test
452+ * @tag Test Routes
453+ */
454+ export const route = h.httpRoute({
455+ path: '/foo',
456+ method: 'GET',
457+ request: h.httpRequest({}),
458+ response: {
459+ 200: SimpleRouteResponse
460+ },
461+ });
462+
463+
464+ /**
465+ * Human readable description of the Simple Route Response
466+ * @title Human Readable Simple Route Response
467+ */
468+ const SimpleRouteResponse = t.type({
469+ test: t.array(TestRef)
470+ });
471+
472+ const TestRefBase = t.string;
473+
474+ const TestRef = TestRefBase;
475+ ` ;
476+
477+ testCase (
478+ 'inner schema ref in array' ,
479+ ROUTE_WITH_ARRAY_OF_INNER_SCHEMA_REF_WITH_NO_SIBLINGS ,
480+ {
481+ openapi : '3.0.3' ,
482+ info : {
483+ title : 'Test' ,
484+ version : '1.0.0' ,
485+ } ,
486+ paths : {
487+ '/foo' : {
488+ get : {
489+ summary : 'A simple route with type descriptions for references' ,
490+ operationId : 'api.v1.test' ,
491+ tags : [ 'Test Routes' ] ,
492+ parameters : [ ] ,
493+ responses : {
494+ '200' : {
495+ description : 'OK' ,
496+ content : {
497+ 'application/json' : {
498+ schema : {
499+ $ref : '#/components/schemas/SimpleRouteResponse' ,
500+ } ,
501+ } ,
502+ } ,
503+ } ,
504+ } ,
505+ } ,
506+ } ,
507+ } ,
508+ components : {
509+ schemas : {
510+ SimpleRouteResponse : {
511+ description : 'Human readable description of the Simple Route Response' ,
512+ properties : {
513+ test : {
514+ type : 'array' ,
515+ items : {
516+ $ref : '#/components/schemas/TestRefBase' ,
517+ } ,
518+ } ,
519+ } ,
520+ required : [ 'test' ] ,
521+ title : 'Human Readable Simple Route Response' ,
522+ type : 'object' ,
523+ } ,
524+ TestRefBase : {
525+ title : 'TestRefBase' ,
526+ type : 'string' ,
527+ } ,
528+ TestRef : {
529+ allOf : [
530+ {
531+ title : 'TestRef' ,
532+ } ,
533+ {
534+ $ref : '#/components/schemas/TestRefBase' ,
535+ } ,
536+ ] ,
537+ } ,
538+ } ,
539+ } ,
540+ } ,
541+ ) ;
542+
543+ const ROUTE_WITH_ARRAY_OF_INNER_SCHEMA_REF_AND_DESCRIPTION = `
544+ import * as t from 'io-ts';
545+ import * as h from '@api-ts/io-ts-http';
546+ /**
547+ * A simple route with type descriptions for references
548+ *
549+ * @operationId api.v1.test
550+ * @tag Test Routes
551+ */
552+ export const route = h.httpRoute({
553+ path: '/foo',
554+ method: 'GET',
555+ request: h.httpRequest({}),
556+ response: {
557+ 200: SimpleRouteResponse
558+ },
559+ });
560+
561+
562+ /**
563+ * Human readable description of the Simple Route Response
564+ * @title Human Readable Simple Route Response
565+ */
566+ const SimpleRouteResponse = t.type({
567+ /** List of test refs */
568+ test: t.array(TestRef)
569+ });
570+
571+ const TestRefBase = t.string;
572+
573+ const TestRef = TestRefBase;
574+ ` ;
575+
576+ testCase (
577+ 'inner schema ref in array with description' ,
578+ ROUTE_WITH_ARRAY_OF_INNER_SCHEMA_REF_AND_DESCRIPTION ,
579+ {
580+ openapi : '3.0.3' ,
581+ info : {
582+ title : 'Test' ,
583+ version : '1.0.0' ,
584+ } ,
585+ paths : {
586+ '/foo' : {
587+ get : {
588+ summary : 'A simple route with type descriptions for references' ,
589+ operationId : 'api.v1.test' ,
590+ tags : [ 'Test Routes' ] ,
591+ parameters : [ ] ,
592+ responses : {
593+ '200' : {
594+ description : 'OK' ,
595+ content : {
596+ 'application/json' : {
597+ schema : {
598+ $ref : '#/components/schemas/SimpleRouteResponse' ,
599+ } ,
600+ } ,
601+ } ,
602+ } ,
603+ } ,
604+ } ,
605+ } ,
606+ } ,
607+ components : {
608+ schemas : {
609+ SimpleRouteResponse : {
610+ description : 'Human readable description of the Simple Route Response' ,
611+ properties : {
612+ test : {
613+ type : 'array' ,
614+ items : {
615+ allOf : [ { $ref : '#/components/schemas/TestRefBase' } ] ,
616+ description : 'List of test refs' ,
617+ } ,
618+ } ,
619+ } ,
620+ required : [ 'test' ] ,
621+ title : 'Human Readable Simple Route Response' ,
622+ type : 'object' ,
623+ } ,
624+ TestRefBase : {
625+ title : 'TestRefBase' ,
626+ type : 'string' ,
627+ } ,
628+ TestRef : {
629+ allOf : [
630+ {
631+ title : 'TestRef' ,
632+ } ,
633+ {
634+ $ref : '#/components/schemas/TestRefBase' ,
635+ } ,
636+ ] ,
637+ } ,
638+ } ,
639+ } ,
640+ } ,
641+ ) ;
0 commit comments