export default function(scenario, assert, lastNthRequest) { // lastNthRequest should return a // { // method: '', // requestBody: '', // requestHeaders: '' // } scenario .then('the last $method requests included from yaml\n$yaml', function(method, data) { const requests = lastNthRequest(null, method); const a = new Set(data); const b = new Set( requests.map(function(item) { return item.url; }) ); const diff = new Set( [...a].filter(function(item) { return !b.has(item); }) ); assert.equal(diff.size, 0, `Expected requests "${[...diff].join(', ')}"`); }) .then('a $method request was made to "$endpoint"', function(method, url) { const requests = lastNthRequest(null, method); const request = requests.find(function(item) { return method === item.method && url === item.url; }); assert.ok(request, `Expected a ${method} request url to ${url}`); }) .then('a $method request was made to "$endpoint" with no body', function(method, url) { const requests = lastNthRequest(null, method); const request = requests.find(function(item) { return method === item.method && url === item.url; }); assert.equal( request.requestBody, null, `Expected the request body to be null, was ${request.requestBody}` ); }) .then('a $method request was made to "$endpoint" with the body "$body"', function( method, url, body ) { const requests = lastNthRequest(null, method); const request = requests.find(function(item) { return method === item.method && url === item.url; }); assert.ok(request, `Expected a ${method} request url to ${url} with the body "${body}"`); }) .then('a $method request was made to "$endpoint" from yaml\n$yaml', function( method, url, yaml ) { const requests = lastNthRequest(null, method); const request = requests.find(function(item) { return method === item.method && url === item.url; }); let data = yaml.body || {}; const body = JSON.parse(request.requestBody); Object.keys(data).forEach(function(key, i, arr) { assert.deepEqual( body[key], data[key], `Expected the payload to contain ${key} equaling ${JSON.stringify( data[key] )}, ${key} was ${JSON.stringify(body[key])}` ); }); data = yaml.headers || {}; const headers = request.requestHeaders; Object.keys(data).forEach(function(key, i, arr) { assert.deepEqual( headers[key], data[key], `Expected the payload to contain ${key} equaling ${JSON.stringify( data[key] )}, ${key} was ${JSON.stringify(headers[key])}` ); }); }) .then('a $method request was made to "$endpoint" without properties from yaml\n$yaml', function( method, url, properties ) { const requests = lastNthRequest(null, method); const request = requests.find(function(item) { return method === item.method && url === item.url; }); const body = JSON.parse(request.requestBody); properties.forEach(function(key, i, arr) { assert.equal( typeof body[key], 'undefined', `Expected payload to not have a ${key} property` ); }); }); }