@@ -2046,6 +2046,377 @@ describe('input-validation middleware tests', function () {
20462046 } ) ;
20472047 } ) ;
20482048 } ) ;
2049+ describe ( 'Server with YAML anchors' , function ( ) {
2050+ var app ;
2051+ before ( function ( ) {
2052+ return require ( './test-server-with-yaml-anchors' ) . then ( function ( testServer ) {
2053+ app = testServer ;
2054+ } ) ;
2055+ } ) ;
2056+ it ( 'valid request - should pass validation' , function ( done ) {
2057+ request ( app )
2058+ . get ( '/pets' )
2059+ . set ( 'api-version' , '1.0' )
2060+ . set ( 'request-id' , '123456' )
2061+ . query ( { page : 0 } )
2062+ . expect ( 200 , function ( err , res ) {
2063+ if ( err ) {
2064+ throw err ;
2065+ }
2066+ expect ( res . body . result ) . to . equal ( 'OK' ) ;
2067+ done ( ) ;
2068+ } ) ;
2069+ } ) ;
2070+ it ( 'valid post request - should pass validation' , function ( done ) {
2071+ request ( app )
2072+ . post ( '/pets' )
2073+ . set ( 'request-id' , '1234' )
2074+ . set ( 'api-version' , '1.0' )
2075+ . send ( {
2076+ name : 'name' ,
2077+ tag : 'tag' ,
2078+ test : {
2079+ field1 : 'enum1'
2080+ }
2081+ } )
2082+ . expect ( 200 , function ( err , res ) {
2083+ if ( err ) {
2084+ throw err ;
2085+ }
2086+ expect ( res . body . result ) . to . equal ( 'OK' ) ;
2087+ done ( ) ;
2088+ } ) ;
2089+ } ) ;
2090+ it ( 'missing header - should fail' , function ( done ) {
2091+ request ( app )
2092+ . get ( '/pets' )
2093+ . set ( 'request-id' , '123456' )
2094+ . query ( { page : 0 } )
2095+ . expect ( 400 , function ( err , res ) {
2096+ if ( err ) {
2097+ throw err ;
2098+ }
2099+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2100+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2101+ expect ( res . body . more_info ) . to . includes ( 'api-version' ) ;
2102+ expect ( res . body . more_info ) . to . includes ( 'should have required property \'api-version\'' ) ;
2103+ done ( ) ;
2104+ } ) ;
2105+ } ) ;
2106+ it ( 'bad header - invalid pattern' , function ( done ) {
2107+ request ( app )
2108+ . get ( '/pets' )
2109+ . set ( 'request-id' , '123456' )
2110+ . set ( 'api-version' , '1' )
2111+ . query ( { page : 0 } )
2112+ . expect ( 400 , function ( err , res ) {
2113+ if ( err ) {
2114+ throw err ;
2115+ }
2116+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2117+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2118+ expect ( res . body . more_info ) . to . includes ( 'api-version' ) ;
2119+ expect ( res . body . more_info ) . to . includes ( 'should match pattern' ) ;
2120+ done ( ) ;
2121+ } ) ;
2122+ } ) ;
2123+ it ( 'bad header - empty header' , function ( done ) {
2124+ request ( app )
2125+ . get ( '/pets' )
2126+ . set ( 'request-id' , '' )
2127+ . set ( 'api-version' , '1.0' )
2128+ . query ( { page : 0 } )
2129+ . expect ( 400 , function ( err , res ) {
2130+ if ( err ) {
2131+ throw err ;
2132+ }
2133+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2134+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2135+ expect ( res . body . more_info ) . to . includes ( 'request-id' ) ;
2136+ expect ( res . body . more_info ) . to . includes ( 'should NOT be shorter than 1 characters' ) ;
2137+ done ( ) ;
2138+ } ) ;
2139+ } ) ;
2140+ it ( 'bad body - wrong type' , function ( done ) {
2141+ request ( app )
2142+ . post ( '/pets' )
2143+ . set ( 'request-id' , '123234' )
2144+ . set ( 'api-version' , '1.0' )
2145+ . send ( {
2146+ name : '111' ,
2147+ tag : 12344 ,
2148+ 'test' : {
2149+ field1 : '1'
2150+ }
2151+ } )
2152+ . expect ( 400 , function ( err , res ) {
2153+ if ( err ) {
2154+ throw err ;
2155+ }
2156+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2157+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2158+ expect ( res . body . more_info ) . to . includes ( 'tag' ) ;
2159+ done ( ) ;
2160+ } ) ;
2161+ } ) ;
2162+ it ( 'bad body - missing required params' , function ( done ) {
2163+ request ( app )
2164+ . post ( '/pets' )
2165+ . set ( 'request-id' , '123324' )
2166+ . set ( 'api-version' , '1.0' )
2167+ . send ( {
2168+ tag : 'tag' ,
2169+ 'test' : {
2170+ field1 : '1'
2171+ }
2172+ } )
2173+ . expect ( 400 , function ( err , res ) {
2174+ if ( err ) {
2175+ throw err ;
2176+ }
2177+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2178+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2179+ expect ( res . body . more_info ) . to . includes ( 'name' ) ;
2180+ done ( ) ;
2181+ } ) ;
2182+ } ) ;
2183+ it ( 'bad body - missing required object attribute' , function ( done ) {
2184+ request ( app )
2185+ . post ( '/pets' )
2186+ . set ( 'request-id' , '123434' )
2187+ . set ( 'api-version' , '1.0' )
2188+ . send ( {
2189+ name : 'name' ,
2190+ tag : 'tag'
2191+ } )
2192+ . expect ( 400 , function ( err , res ) {
2193+ if ( err ) {
2194+ throw err ;
2195+ }
2196+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2197+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2198+ expect ( res . body . more_info ) . to . includes ( 'test' ) ;
2199+ done ( ) ;
2200+ } ) ;
2201+ } ) ;
2202+ it ( 'bad body - wrong type object attribute' , function ( done ) {
2203+ request ( app )
2204+ . post ( '/pets' )
2205+ . set ( 'request-id' , '12334' )
2206+ . set ( 'api-version' , '1.0' )
2207+ . send ( {
2208+ name : 'name' ,
2209+ tag : 'tag' ,
2210+ test : ''
2211+ } )
2212+ . expect ( 400 , function ( err , res ) {
2213+ if ( err ) {
2214+ throw err ;
2215+ }
2216+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2217+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2218+ expect ( res . body . more_info ) . to . includes ( 'test' ) ;
2219+ done ( ) ;
2220+ } ) ;
2221+ } ) ;
2222+ it ( 'bad body - missing required nested attribute' , function ( done ) {
2223+ request ( app )
2224+ . post ( '/pets' )
2225+ . set ( 'request-id' , '12343' )
2226+ . set ( 'api-version' , '1.0' )
2227+ . send ( {
2228+ name : 'name' ,
2229+ tag : 'tag' ,
2230+ test : { }
2231+ } )
2232+ . expect ( 400 , function ( err , res ) {
2233+ if ( err ) {
2234+ throw err ;
2235+ }
2236+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2237+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2238+ expect ( res . body . more_info ) . to . includes ( 'field1' ) ;
2239+ done ( ) ;
2240+ } ) ;
2241+ } ) ;
2242+ it ( 'bad body - wrong format nested attribute' , function ( done ) {
2243+ request ( app )
2244+ . post ( '/pets' )
2245+ . set ( 'request-id' , '12343' )
2246+ . set ( 'api-version' , '1.0' )
2247+ . send ( {
2248+ name : 'name' ,
2249+ tag : 'tag' ,
2250+ test : {
2251+ field1 : 1234
2252+ }
2253+ } )
2254+ . expect ( 400 , function ( err , res ) {
2255+ if ( err ) {
2256+ throw err ;
2257+ }
2258+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2259+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2260+ expect ( res . body . more_info ) . to . includes ( 'field1' ) ;
2261+ done ( ) ;
2262+ } ) ;
2263+ } ) ;
2264+ it ( 'bad body - wrong enum value' , function ( done ) {
2265+ request ( app )
2266+ . post ( '/pets' )
2267+ . set ( 'request-id' , '1234' )
2268+ . set ( 'api-version' , '1.0' )
2269+ . send ( {
2270+ name : 'name' ,
2271+ tag : 'tag' ,
2272+ test : {
2273+ field1 : 'field1'
2274+ }
2275+ } )
2276+ . expect ( 400 , function ( err , res ) {
2277+ if ( err ) {
2278+ throw err ;
2279+ }
2280+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2281+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2282+ expect ( res . body . more_info ) . to . includes ( 'should be equal to one of the allowed values' ) ;
2283+ done ( ) ;
2284+ } ) ;
2285+ } ) ;
2286+ it ( 'bad query param - missing required params' , function ( done ) {
2287+ request ( app )
2288+ . get ( '/pets' )
2289+ . set ( 'request-id' , '1234' )
2290+ . set ( 'api-version' , '1.0' )
2291+ . query ( { limit : 100 } )
2292+ . expect ( 400 , function ( err , res ) {
2293+ if ( err ) {
2294+ throw err ;
2295+ }
2296+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2297+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2298+ expect ( res . body . more_info ) . to . includes ( 'page' ) ;
2299+ done ( ) ;
2300+ } ) ;
2301+ } ) ;
2302+ it ( 'bad query param - over limit' , function ( done ) {
2303+ request ( app )
2304+ . get ( '/pets' )
2305+ . set ( 'request-id' , '1234' )
2306+ . set ( 'api-version' , '1.0' )
2307+ . query ( { limit : 150 , page : 0 } )
2308+ . expect ( 400 , function ( err , res ) {
2309+ if ( err ) {
2310+ throw err ;
2311+ }
2312+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2313+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2314+ expect ( res . body . more_info ) . to . includes ( 'limit' ) ;
2315+ done ( ) ;
2316+ } ) ;
2317+ } ) ;
2318+ it ( 'bad query param - under limit' , function ( done ) {
2319+ request ( app )
2320+ . get ( '/pets' )
2321+ . set ( 'request-id' , '1234' )
2322+ . set ( 'api-version' , '1.0' )
2323+ . query ( { limit : 0 , page : 0 } )
2324+ . expect ( 400 , function ( err , res ) {
2325+ if ( err ) {
2326+ throw err ;
2327+ }
2328+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2329+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2330+ expect ( res . body . more_info ) . to . includes ( 'limit' ) ;
2331+ done ( ) ;
2332+ } ) ;
2333+ } ) ;
2334+ it ( 'bad path param - wrong format' , function ( done ) {
2335+ request ( app )
2336+ . get ( '/pets/12' )
2337+ . set ( 'request-id' , '1234' )
2338+ . set ( 'api-version' , '1.0' )
2339+ . query ( { limit : '50' , page : 0 } )
2340+ . expect ( 400 , function ( err , res ) {
2341+ if ( err ) {
2342+ throw err ;
2343+ }
2344+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2345+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2346+ expect ( res . body . more_info ) . to . includes ( 'petId' ) ;
2347+ done ( ) ;
2348+ } ) ;
2349+ } ) ;
2350+ it ( 'bad body - wrong format nested attribute (not parameters)' , function ( done ) {
2351+ request ( app )
2352+ . put ( '/pets' )
2353+ . send ( [ {
2354+ name : 'name' ,
2355+ tag : 'tag' ,
2356+ test : {
2357+ field1 : 1234
2358+ }
2359+ } ] )
2360+ . expect ( 400 , function ( err , res ) {
2361+ if ( err ) {
2362+ throw err ;
2363+ }
2364+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2365+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2366+ expect ( moreInfoAsJson . length ) . to . equal ( 2 ) ;
2367+ expect ( res . body . more_info ) . to . includes ( 'field1' ) ;
2368+ done ( ) ;
2369+ } ) ;
2370+ } ) ;
2371+ it ( 'bad body - wrong format in array item body (second item)' , function ( done ) {
2372+ request ( app )
2373+ . put ( '/pets' )
2374+ . send ( [
2375+ {
2376+ name : 'name' ,
2377+ tag : 'tag' ,
2378+ test : {
2379+ field1 : 'enum1'
2380+ }
2381+ } ,
2382+ {
2383+ name : 'name' ,
2384+ tag : 'tag' ,
2385+ test : {
2386+ field1 : 1234
2387+ }
2388+ } ] )
2389+ . expect ( 400 , function ( err , res ) {
2390+ if ( err ) {
2391+ throw err ;
2392+ }
2393+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2394+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2395+ expect ( res . body . more_info ) . to . includes ( '[1].test.field1' ) ;
2396+ done ( ) ;
2397+ } ) ;
2398+ } ) ;
2399+ it ( 'bad body - wrong format body (should be an array)' , function ( done ) {
2400+ request ( app )
2401+ . put ( '/pets' )
2402+ . send ( {
2403+ name : 'name' ,
2404+ tag : 'tag' ,
2405+ test : {
2406+ field1 : '1234'
2407+ }
2408+ } )
2409+ . expect ( 400 , function ( err , res ) {
2410+ if ( err ) {
2411+ throw err ;
2412+ }
2413+ let moreInfoAsJson = JSON . parse ( res . body . more_info ) ;
2414+ expect ( moreInfoAsJson ) . to . be . instanceof ( Array ) ;
2415+ expect ( res . body . more_info ) . to . includes ( 'should be array' ) ;
2416+ done ( ) ;
2417+ } ) ;
2418+ } ) ;
2419+ } ) ;
20492420 describe ( 'Inheritance' , function ( ) {
20502421 var app ;
20512422 before ( function ( ) {
0 commit comments