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