Skip to content

Commit 1ac9460

Browse files
authored
Merge pull request #15 from Zooz/yaml-anchors
Tests for yaml anchors
2 parents 2dbb984 + d3dcee5 commit 1ac9460

3 files changed

Lines changed: 620 additions & 0 deletions

File tree

test/middleware-test.js

Lines changed: 371 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)