diff --git a/aliza/gulpfile.js b/aliza/gulpfile.js new file mode 100644 index 0000000..4d21f34 --- /dev/null +++ b/aliza/gulpfile.js @@ -0,0 +1,19 @@ +const gulp = require('gulp'); +const eslint = require('gulp-eslint'); +const mocha = require ('gulp-mocha'); + +gulp.task('default', ['lint', 'mocha'], () => { + console.log('default for lint and mocha'); +}); + + +gulp.task('lint', () => { + gulp.src('/*.js') + .pipe(eslint({})) + .pipe(eslint.format()) +}); + +gulp.task('mocha', () => { + gulp.src('test/test.js') + .pipe(mocha()); +}); diff --git a/aliza/package.json b/aliza/package.json new file mode 100644 index 0000000..5dc7827 --- /dev/null +++ b/aliza/package.json @@ -0,0 +1,24 @@ +{ + "name": "aliza", + "version": "1.0.0", + "description": "", + "main": "promise.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "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", + "mocha": "^2.4.5" + } +} diff --git a/aliza/server.js b/aliza/server.js new file mode 100644 index 0000000..6c32687 --- /dev/null +++ b/aliza/server.js @@ -0,0 +1,33 @@ +'use strict'; +const fs = require('fs'); +const http = require('http'); +const stream = require('stream'); + +http.createServer((req, res) => { + if (req.url === '/notes' && req.method === 'GET'){ + fs.readdir(__dirname + '/notes/', (err, files) => { + res.write(files.toString() + '\n') + res.end('files listed \n'); + }); + } else if (req.url === '/notes' && req.method === 'POST'){ + let bufStr = ''; + req.on('data', (data) => { + bufStr += data.toString(); + }); + req.on('end', () => { + var nextFile = fs.readdirSync(__dirname + '/notes/').length + 1; + let file = fs.createWriteStream(__dirname + '/notes/' + nextFile + '.json'); + let bufferStream = new stream.PassThrough(); + let inBuf = new Buffer(bufStr); + bufferStream.end(inBuf); + bufferStream.pipe(file); + res.statusCode = 200; + res.end('data written to file \n'); + }); + } else { + res.status = 404; + res.end('File not found\n'); + } +}).listen(3000, () => { + console.log('server up at 3000 \n'); +}); diff --git a/aliza/test/test.js b/aliza/test/test.js new file mode 100644 index 0000000..3d392a5 --- /dev/null +++ b/aliza/test/test.js @@ -0,0 +1,37 @@ +const fs = require('fs'); +const chai = require('chai'); +const chaiHTTP = require('chai-http'); +const expect = chai.expect; +chai.use(chaiHTTP); +const request = chai.request; +var fileArr = []; +var newFileArr = []; + +require('../server'); + +describe('HTTP tests', () => { + before('reading files in notes directory', () => { + fileArr = fs.readdirSync(__dirname + '/../notes'); + }); + it('should read file names on get request', (done) => { + request('localhost:3000') + .get('/notes') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.text).to.eql(fs.readdirSync(__dirname + '/../notes').toString() + '\n' + 'files listed \n'); + done(); + }); + }); + it('should post to new file on post request', (done) => { + request('localhost:3000') + .post('/notes') + .send('{"blah": "blah"}') + .end((err, res) => { + newFileArr = fs.readdirSync(__dirname + '/../notes'); + expect(err).to.eql(null); + expect(newFileArr).to.not.eql(fileArr); + done(); + }) + }) +});