diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15de390 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +data diff --git a/data/data.json b/data/data.json new file mode 100644 index 0000000..82384e9 --- /dev/null +++ b/data/data.json @@ -0,0 +1 @@ +{"msg":"hi"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..fdcf6b9 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,30 @@ +const gulp = require('gulp'); +const eslint = require('gulp-eslint'); +const mocha = require('gulp-mocha'); +const watch = require('gulp-watch'); + +gulp.task('lint', () => { + gulp.src(['./*.js', './test/*.js']) + .pipe(eslint({ + env: [ + 'mocha', + 'es6' + ] + })) + .pipe(eslint.format()); +}); + +gulp.task('mocha', () => { + return gulp.src('./test/*.js', { + read: false + }) + .pipe(mocha({ + reporter: 'nyan' + })); +}); + +gulp.task('watch', () => { + gulp.watch(['./*.js', './test/*.js' ], ['mocha', 'lint']); +}); + +gulp.task('default', ['mocha', 'lint', 'watch']); diff --git a/package.json b/package.json new file mode 100644 index 0000000..a3c3f77 --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "test", + "version": "1.0.0", + "description": "", + "main": "http_test.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "chai": "^3.5.0", + "chai-http": "^2.0.1", + "gulp": "^3.9.1", + "gulp-eslint": "^2.0.0", + "gulp-mocha": "^2.2.0", + "gulp-watch": "^4.3.5", + "mocha": "^2.4.5" + } +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..ef0e645 --- /dev/null +++ b/server.js @@ -0,0 +1,35 @@ +'use strict'; + +const http = require('http'); +const fs = require('fs'); +const stream = require('stream'); + + + +const dir = __dirname + '/data'; +if (!fs.existsSync(dir)) { + fs.mkdirSync(dir); +} + +http.createServer((req, res) => { + if(req.url === '/notes' && req.method === 'GET') { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + let files = fs.readdirSync(dir); + res.write(files.toString()); + return res.end(); + } + if (req.url === '/notes' && req.method === 'POST') { + let nextFile = fs.readdirSync(dir).length + 1; + const writeToFile = fs.createWriteStream(dir + '/' + nextFile + '.json'); + req.pipe(writeToFile); + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.write('saved file ' + nextFile + '.json' + '\n'); + console.log(nextFile); + return res.end(); + } + res.status = 404; + return res.end('File not found\n'); + +}).listen(3000, () => { + console.log('server up at 3000'); +}); diff --git a/test/server_test.js b/test/server_test.js new file mode 100644 index 0000000..c710ce7 --- /dev/null +++ b/test/server_test.js @@ -0,0 +1,34 @@ +'use strict'; + +const chai = require('chai'); +const chaiHTTP = require('chai-http'); +const expect = chai.expect; +chai.use(chaiHTTP); +const request = chai.request; + +require('../server'); + +describe('persistance tests', () => { + it('should do a GET request', (done) => { + request('localhost:3000') + .get('/notes') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + var files = fs.readdirSync(__dirname + '/../data').toString(); + expect(res.text).to.eql(files); + }); + done(); + }); + it('should do a POST request', (done) => { + request('localhost:3000') + .get('/notes') + .end((err, res) => { + expect((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + }) + }) + }) + }) +});