From 673e55ffcd6597491eacd0bb5585b0bad16d06d8 Mon Sep 17 00:00:00 2001 From: IamNguele Date: Fri, 11 Aug 2017 16:15:55 +0100 Subject: [PATCH] Initial work + waits Xms before responding --- .gitignore | 1 + README.md | 1 + app.js | 35 +++++++++++++++++ package.json | 36 +++++++++++++++++ processors/text-processor.js | 17 ++++++++ tests/app.test.js | 76 ++++++++++++++++++++++++++++++++++++ 6 files changed, 166 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app.js create mode 100644 package.json create mode 100644 processors/text-processor.js create mode 100644 tests/app.test.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff656c5 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# HttpResponseSimulator diff --git a/app.js b/app.js new file mode 100644 index 0000000..a978cde --- /dev/null +++ b/app.js @@ -0,0 +1,35 @@ +var url = require('url') +var processQuery = require('./processors/text-processor') + +var express = require('express') +var app = express() + +var bodyParser = require('body-parser') +app.use( bodyParser.json()) +app.use(bodyParser.urlencoded({extended: true})) + +app.get('/', function (req, res) { + var query = url.parse(req.url, true).query + + res.send(processQuery(query)) +}) + +app.post('/', function (req, res) { + res.send(processQuery(req.body)) +}) + +app.put('/', function (req, res) { + res.send(processQuery(req.body)) +}) + +var port = process.env.PORT || 8080; + +var server = app.listen(port, function () { + + var host = server.address().address + var port = server.address().port + + console.log("Http Client Simulator listening at http://%s:%s", host, port) +}) + +module.exports = app \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..884be00 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "http-response-simulator", + "version": "1.0.0", + "description": "Just a tool to validate your http client implementation", + "main": "app.js", + "scripts": { + "test": "mocha --recursive tests" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/IamNguele/HttpResponseSimulator.git" + }, + "keywords": [ + "http", + "simulator", + "mock", + "http", + "response" + ], + "author": "Jean-Dominique Nguele", + "license": "MIT", + "bugs": { + "url": "https://github.com/IamNguele/HttpResponseSimulator/issues" + }, + "homepage": "https://github.com/IamNguele/HttpResponseSimulator#readme", + "dependencies": { + "body-parser": "^1.17.2", + "express": "^4.15.4", + "sleep": "^5.1.1", + "system-sleep": "^1.3.5" + }, + "devDependencies": { + "mocha": "^3.5.0", + "supertest": "^3.0.0" + } +} diff --git a/processors/text-processor.js b/processors/text-processor.js new file mode 100644 index 0000000..0b9d901 --- /dev/null +++ b/processors/text-processor.js @@ -0,0 +1,17 @@ +var sleep = require('system-sleep') + +function processQuery(query) { + var response = '' + + var wait = parseInt(query.wait) + + if (!isNaN(wait)) { + sleep(wait) + response += 'Waited '+wait+'ms to respond.\ + ' + } + + return response +} + +module.exports = processQuery \ No newline at end of file diff --git a/tests/app.test.js b/tests/app.test.js new file mode 100644 index 0000000..ce940fe --- /dev/null +++ b/tests/app.test.js @@ -0,0 +1,76 @@ +var request = require('supertest'); + +var app = require("../app"); + +describe('app.js - GET /', function(){ + it('Default GET returns 200', function(done){ + request(app) + .get('/') + .expect(200, done); + }); + + it('Wait GET returns text wait message', function(done){ + var wait = 50; + + request(app) + .get('/?wait='+wait) + .expect(200, 'Waited '+wait+'ms to respond.\ + ', done); + }); +}); + +describe('app.js - POST /', function(){ + it('Default POST returns 200', function(done){ + request(app) + .post('/') + .expect(200, done); + }); + + it('Text Wait POST returns text wait message', function(done){ + var wait = 50; + + request(app) + .post('/') + .send('wait='+wait) + .expect(200, 'Waited '+wait+'ms to respond.\ + ', done); + }); + + it('JSON Wait POST returns text wait message', function(done){ + var wait = 50; + + request(app) + .post('/') + .send({wait: wait}) + .expect(200, 'Waited '+wait+'ms to respond.\ + ', done); + }); +}); + +describe('app.js - PUT /', function(){ + it('Default PUT returns 200', function(done){ + request(app) + .put('/') + .expect(200, done); + }); + + it('Text Wait PUT returns text wait message', function(done){ + var wait = 50; + + request(app) + .put('/') + .send('wait='+wait) + .expect(200, 'Waited '+wait+'ms to respond.\ + ', done); + }); + + it('JSON Wait PUT returns text wait message', function(done){ + var wait = 50; + + request(app) + .put('/') + .send({wait: wait}) + .expect(200, 'Waited '+wait+'ms to respond.\ + ', done); + }); +}); \ No newline at end of file