/* global describe, it */ 'use strict' var fixtures = require('./fixtures') var HTTPSnippet = require('../src') var targets = require('../src/targets') var shell = require('child_process') var util = require('util') require('should') var base = './test/fixtures/output/' var requests = [ 'application-form-encoded', 'application-json', 'cookies', 'custom-method', 'headers', 'https', 'multipart-data', 'multipart-form-data', 'short' ] // test all the things! fixtures.cli.forEach(function (cli) { describe(targets[cli.target].info.title + ' Request Validation', function () { cli.clients.forEach(function (client) { requests.forEach(function (request) { it(client + ' request should match mock for ' + request, function (done) { var stdout = '' var fixture = cli.target + '/' + client + '/' + request + HTTPSnippet.extname(cli.target) var command = util.format(cli.run, base + fixture) var ls = shell.exec(command) ls.stdout.on('data', function (data) { stdout += data }) ls.on('exit', function (code) { try { var har = JSON.parse(stdout) } catch (err) { err.should.be.null } // make an exception for multipart/form-data if (fixtures.requests[request].headers) { fixtures.requests[request].headers.forEach(function (header, index) { if (header.name === 'content-type' && header.value === 'multipart/form-data') { delete fixtures.requests[request].headers[index] } }) } har.should.have.property('log') har.log.should.have.property('entries').and.be.Array har.log.entries[0].should.have.property('request') har.log.entries[0].request.should.containDeep(fixtures.requests[request]) done() }) }) }) }) }) })