From 7deacf020bb9b9f7e588c23f71136f5161014e24 Mon Sep 17 00:00:00 2001 From: Tim Harshman Date: Wed, 18 Oct 2017 18:58:42 -0700 Subject: [PATCH 1/5] Add mocha and chai to dev dependencies and tests folder --- package-lock.json | 132 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- tests/server.js | 0 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 tests/server.js diff --git a/package-lock.json b/package-lock.json index 11562d0..f831384 100644 --- a/package-lock.json +++ b/package-lock.json @@ -151,6 +151,12 @@ "util": "0.10.3" } }, + "assertion-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -860,6 +866,12 @@ "repeat-element": "1.1.2" } }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, "browserify-aes": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", @@ -935,6 +947,20 @@ "lazy-cache": "1.0.4" } }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.3" + } + }, "chalk": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", @@ -946,6 +972,12 @@ "supports-color": "4.4.0" } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -1026,6 +1058,12 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -1184,6 +1222,15 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.3" + } + }, "deep-extend": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", @@ -1233,6 +1280,12 @@ "repeating": "2.0.1" } }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, "domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", @@ -1743,6 +1796,12 @@ "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", "dev": true }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, "gaze": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", @@ -1752,6 +1811,12 @@ "globule": "0.1.0" } }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -2006,6 +2071,12 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, "gulp": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", @@ -2235,6 +2306,12 @@ "sparkles": "1.0.0" } }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -3001,6 +3078,49 @@ } } }, + "mocha": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", + "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.3.3", + "path-is-absolute": "1.0.1" + } + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3385,6 +3505,12 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -4183,6 +4309,12 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "type-detect": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", + "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", + "dev": true + }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", diff --git a/package.json b/package.json index 43fca17..a9a6de6 100644 --- a/package.json +++ b/package.json @@ -23,13 +23,15 @@ "socket.io": "^2.0.3" }, "devDependencies": { - "nodemon": "^1.12.1", "babel-core": "^6.8.0", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.6.0", + "chai": "^4.1.2", "gulp": "^3.9.1", "gulp-babel": "^6.1.2", "gulp-nodemon": "^2.0.7", + "mocha": "^4.0.1", + "nodemon": "^1.12.1", "webpack": "^1.13.0", "webpack-stream": "^3.2.0" } diff --git a/tests/server.js b/tests/server.js new file mode 100644 index 0000000..e69de29 From 8c2b6f21eb32b7bb8fc48dabc52d0064e3095690 Mon Sep 17 00:00:00 2001 From: Tim Harshman Date: Wed, 18 Oct 2017 21:30:36 -0700 Subject: [PATCH 2/5] First working commit of mocha tests Two basic tests to test that new users work and sending messages work. Also need to figure out how to shut the server down after the tests complete. --- package-lock.json | 84 +++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/client/js/client.js | 2 +- src/server/server.js | 5 +++ test/server.test.js | 35 +++++++++++++++++ tests/server.js | 0 6 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 test/server.test.js delete mode 100644 tests/server.js diff --git a/package-lock.json b/package-lock.json index f831384..a988185 100644 --- a/package-lock.json +++ b/package-lock.json @@ -961,6 +961,19 @@ "type-detect": "4.0.3" } }, + "chai-http": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-3.0.0.tgz", + "integrity": "sha1-VGDYA24fGhKwtbXL1Snm3B0x60s=", + "dev": true, + "requires": { + "cookiejar": "2.0.6", + "is-ip": "1.0.0", + "methods": "1.1.2", + "qs": "6.5.1", + "superagent": "2.3.0" + } + }, "chalk": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", @@ -1058,6 +1071,15 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", @@ -1146,6 +1168,12 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "cookiejar": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.6.tgz", + "integrity": "sha1-Cr81atANHFohnYjURRgEbdAmrP4=", + "dev": true + }, "core-js": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", @@ -1246,6 +1274,12 @@ "clone": "1.0.2" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "depd": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", @@ -1774,6 +1808,23 @@ "for-in": "1.0.2" } }, + "form-data": { + "version": "1.0.0-rc4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", + "integrity": "sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14=", + "dev": true, + "requires": { + "async": "1.5.2", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "formidable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", + "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=", + "dev": true + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -2425,6 +2476,12 @@ "loose-envify": "1.3.1" } }, + "ip-regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", + "dev": true + }, "ipaddr.js": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", @@ -2516,6 +2573,15 @@ "is-path-inside": "1.0.0" } }, + "is-ip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-1.0.0.tgz", + "integrity": "sha1-K7aVn3l8zW+f3IEnWLy8h8TFkHQ=", + "dev": true, + "requires": { + "ip-regex": "1.0.3" + } + }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -4201,6 +4267,24 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "superagent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-2.3.0.tgz", + "integrity": "sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.0.6", + "debug": "2.6.9", + "extend": "3.0.1", + "form-data": "1.0.0-rc4", + "formidable": "1.1.1", + "methods": "1.1.2", + "mime": "1.4.1", + "qs": "6.5.1", + "readable-stream": "2.3.3" + } + }, "supports-color": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", diff --git a/package.json b/package.json index a9a6de6..3434b1a 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.6.0", "chai": "^4.1.2", + "chai-http": "^3.0.0", "gulp": "^3.9.1", "gulp-babel": "^6.1.2", "gulp-nodemon": "^2.0.7", diff --git a/src/client/js/client.js b/src/client/js/client.js index 482fa75..62423b2 100644 --- a/src/client/js/client.js +++ b/src/client/js/client.js @@ -28,7 +28,7 @@ $(document).ready(function() { if (data) { $userFormArea.hide(); $messageArea.show(); - } + } }); $username.val(''); }); diff --git a/src/server/server.js b/src/server/server.js index 58aced4..70a1ba9 100644 --- a/src/server/server.js +++ b/src/server/server.js @@ -46,3 +46,8 @@ io.sockets.on('connection', (socket) => { io.sockets.emit('get users', users); } }); + + +exports.currentConnections = function(){ + return connections.length; +}; \ No newline at end of file diff --git a/test/server.test.js b/test/server.test.js new file mode 100644 index 0000000..1a36e55 --- /dev/null +++ b/test/server.test.js @@ -0,0 +1,35 @@ +var mocha = require('mocha'), + chai = require('chai'), + chaiHttp = require('chai-http'), + server = require('../dist/server/server.js'), + expect = chai.expect; + + var io = require('socket.io-client'); + + describe("Server", function () { + + var server, + options ={ + transports: ['websocket'], + 'force new connection': true, + username: 'test' + }; + it("Sends out new message", function (done,client) { + var client = io.connect('http://localhost:3000', options); + client.on("new message",function(data){ + expect(data.msg).to.equal('testing123'); + client.close() + done(); + }); + client.emit("send message","testing123"); + }); + it("Successfully creates new user",function(done){ + var client = io.connect('http://localhost:3000', options); + client.emit("new user","test_user",function(status){ + expect(status).to.be.true; + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/tests/server.js b/tests/server.js deleted file mode 100644 index e69de29..0000000 From dec37bd409aab954a821862d5ff76d7c0786daa4 Mon Sep 17 00:00:00 2001 From: Tim Harshman Date: Wed, 18 Oct 2017 21:44:33 -0700 Subject: [PATCH 3/5] Fix potential new user bug If one of the operations fails during new user setup the true shouldn't be returned. --- dist/server/server.js | 2 +- src/server/server.js | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dist/server/server.js b/dist/server/server.js index 44ad669..88bab95 100644 --- a/dist/server/server.js +++ b/dist/server/server.js @@ -46,10 +46,10 @@ io.sockets.on('connection', function (socket) { // User socket.on('new user', function (data, callback) { - callback(true); socket.username = data; users.push(socket.username); updateUsername(); + callback(true); }); function updateUsername() { diff --git a/src/server/server.js b/src/server/server.js index 70a1ba9..39571cc 100644 --- a/src/server/server.js +++ b/src/server/server.js @@ -36,18 +36,18 @@ io.sockets.on('connection', (socket) => { // User socket.on('new user', (data, callback) => { - callback(true); - socket.username = data; - users.push(socket.username); - updateUsername(); + try { + socket.username = data; + users.push(socket.username); + updateUsername(); + callback(true); + } catch (error) { + console.log("Create new user Error: ", error); + callback(false); + } }); function updateUsername() { io.sockets.emit('get users', users); } -}); - - -exports.currentConnections = function(){ - return connections.length; -}; \ No newline at end of file +}); \ No newline at end of file From 024d39d480a1812196e9d7ed1c8bbbde0b1ed64c Mon Sep 17 00:00:00 2001 From: Tim Harshman Date: Wed, 18 Oct 2017 21:56:33 -0700 Subject: [PATCH 4/5] Include dist version of server --- dist/server/server.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dist/server/server.js b/dist/server/server.js index 88bab95..74914b9 100644 --- a/dist/server/server.js +++ b/dist/server/server.js @@ -46,10 +46,15 @@ io.sockets.on('connection', function (socket) { // User socket.on('new user', function (data, callback) { - socket.username = data; - users.push(socket.username); - updateUsername(); - callback(true); + try { + socket.username = data; + users.push(socket.username); + updateUsername(); + callback(true); + } catch (error) { + console.log("Create new user Error: ", error); + callback(false); + } }); function updateUsername() { From 7ea62c367516212b255aaadf340a90c3caca8d68 Mon Sep 17 00:00:00 2001 From: Tim Harshman Date: Sun, 22 Oct 2017 12:03:34 -0700 Subject: [PATCH 5/5] Back to orig --- src/client/js/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/js/client.js b/src/client/js/client.js index 62423b2..482fa75 100644 --- a/src/client/js/client.js +++ b/src/client/js/client.js @@ -28,7 +28,7 @@ $(document).ready(function() { if (data) { $userFormArea.hide(); $messageArea.show(); - } + } }); $username.val(''); });