diff --git a/app.js b/app.js index e306be1..4289841 100644 --- a/app.js +++ b/app.js @@ -4,8 +4,9 @@ const mongoose = require('mongoose'); const errorHandler = require('./middlewares/errorHandler') const app = express(); const cors = require('cors') -const PORT = process.env.PORT || 3000 -const NODE_ENV = process.env.NODE_ENV || 'development'; +const PORT = process.env.PORT +const NODE_ENV = process.env.NODE_ENV; +const databaseConnect = require("./helpers/databaseConnect") const CronJob = require('cron').CronJob; const axios = require('axios') @@ -13,14 +14,8 @@ app.use(cors()) app.use(express.urlencoded({extended:false})); app.use(express.json()); -mongoose.connect(`mongodb+srv://${process.env.ATLAS_USER}:${process.env.ATLAS_PASSWORD}@cluster0-xigat.gcp.mongodb.net/eve${NODE_ENV}?retryWrites=true`, {useNewUrlParser:true}) -.then(function(success){ - console.log('succesfully connect to database') -}) -.catch(function(err){ - console.log(err) -}) - +databaseConnect(mongoose, process.env.ATLAS_USER, process.env.ATLAS_PASSWORD, NODE_ENV) + const title = 'Example title' const body = 'Example body' let pushMessage = JSON.stringify({ @@ -44,4 +39,4 @@ app.use(errorHandler); app.listen(PORT, function(){console.log('listen to port ' + PORT)}) -module.exports = app; \ No newline at end of file +module.exports = app; diff --git a/controllers/messages.js b/controllers/messages.js new file mode 100644 index 0000000..c58faa0 --- /dev/null +++ b/controllers/messages.js @@ -0,0 +1,13 @@ + +class MessageController { + static postMessage(req,res,next){ + + + res.status(200).json({ + message: "success" + }) + } +} + + +module.exports = MessageController \ No newline at end of file diff --git a/controllers/users.js b/controllers/users.js index a8cfb62..7d72028 100644 --- a/controllers/users.js +++ b/controllers/users.js @@ -1,6 +1,7 @@ const User = require('../models/user'); const tokenHelper = require('../helpers/tokenHandler') const encryption = require('../helpers/encryption') + class UserController{ static login(req,res,next){ diff --git a/helpers/databaseConnect.js b/helpers/databaseConnect.js new file mode 100644 index 0000000..52acbc7 --- /dev/null +++ b/helpers/databaseConnect.js @@ -0,0 +1,12 @@ + +module.exports = async function(mongoose,user,password, environment){ + console.log(environment, "environtmenynya") + try{ + await mongoose.connect(`mongodb+srv://${user}:${password}@cluster0-xigat.gcp.mongodb.net/eve-${environment}?retryWrites=true`, {useNewUrlParser:true}) + return true + + }catch(err){ + return false + } + +} diff --git a/helpers/errorhandling.js b/helpers/errorhandling.js index 278580e..132d60b 100644 --- a/helpers/errorhandling.js +++ b/helpers/errorhandling.js @@ -5,9 +5,10 @@ var jwtError = ['TokenExpiredError','JsonWebTokenError','NotBeforeError'] function nodeErrorMessage(message){ switch(message){ + + case 'Not Authorized': return 403; case 'User not found': - return 403; - case 'Not Authorized':{ + case 'Token is undefined':{ return 401; } case 'Token is undefined': diff --git a/middlewares/auth.js b/middlewares/auth.js index 52ce9c0..011d6d8 100644 --- a/middlewares/auth.js +++ b/middlewares/auth.js @@ -20,7 +20,5 @@ module.exports = { } }, - authorization : function(req,res,next){ - } } \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index bfc2139..ffe8ba4 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,6 +1,7 @@ const routes = require('express').Router(); routes.use('/users', require('./users')); +routes.use("/messages", require("./messages")) routes.use('/movies', require('./movie')); routes.use('/resto', require('./resto')); routes.use('/upload', require('./upload')) diff --git a/routes/messages.js b/routes/messages.js new file mode 100644 index 0000000..0469459 --- /dev/null +++ b/routes/messages.js @@ -0,0 +1,9 @@ +const routes = require('express').Router(); +const MessageController = require("../controllers/messages") +const auth = require("../middlewares/auth") + +routes.post("/", auth.authentication, MessageController.postMessage) + + + +module.exports = routes \ No newline at end of file diff --git a/test/testhelper/userDrop.js b/test/testhelper/userDrop.js deleted file mode 100644 index b4dba84..0000000 --- a/test/testhelper/userDrop.js +++ /dev/null @@ -1,19 +0,0 @@ -const User = require('../../models/user'); - -module.exports = function(done) { - if (process.env.NODE_ENV === 'test') { - User - .deleteMany({ - _id:{ - $nin: ["5cde642793a4c63b94675355" ] - } - }) - .then(function() { - done(); - }) - .catch(function(err) { - console.log(err); - done(err) - }); - } -}; \ No newline at end of file diff --git a/test/unit.test.js b/test/unit.test.js new file mode 100644 index 0000000..81441d7 --- /dev/null +++ b/test/unit.test.js @@ -0,0 +1,14 @@ +const chai = require("chai");; +const assert = chai.assert +const expect = chai.expect; +const app = require('../app'); +const User = require("../models/user") +const databaseConnect = require("../helpers/databaseConnect") +const mongoose = require("mongoose") + +describe("Database connection testing", function(){ + it("should failed connecting to database and return false", function(){ + var success = databaseConnect(mongoose, "adminPalsu", "psswordPalsu", "test") + assert(success, false) + }) +}) \ No newline at end of file diff --git a/test/user.test.js b/test/user.test.js index d44e614..5caa740 100644 --- a/test/user.test.js +++ b/test/user.test.js @@ -2,21 +2,45 @@ const chai = require("chai"); const chaiHttp = require('chai-http'); const expect = chai.expect; const app = require('../app'); -const userDrop = require("./testhelper/userDrop") +const User = require("../models/user") chai.use(chaiHttp); - -before(function(done) { - userDrop(done) -}); - -after(function(done) { - userDrop(done); -}); - var token; describe("User tests", function () { + this.timeout(5000); + before(function(done) { + User + .deleteMany({ + _id:{ + $nin: ["5cde8a90d3f5935b75012395" ] + } + }) + .then(function() { + console.log('UDAH') + done(); + }) + .catch(function(err) { + console.log(err) + done(err) + }); + }); + + after(function(done) { + User + .deleteMany({ + _id:{ + $nin: ["5cde8a90d3f5935b75012395" ] + } + }) + .then(function() { + done(); + }) + .catch(function(err) { + console.log(err) + done(err) + }); + }); describe(" POST /users/register", function () { it("should success register user with status 201 with no error", function (done) { let user = { @@ -25,10 +49,11 @@ describe("User tests", function () { password: "12345", expoNotificationToken: "dummyToken" }; - + chai .request(app) .post("/users/register") + .set('content-type', 'application/x-www-form-urlencoded') .send(user) .end(function (err, res) { expect(err).to.be.null; @@ -39,22 +64,24 @@ describe("User tests", function () { expect(res.body).to.have.keys(['token','user']); expect(res.body.user).to.have.keys(['_id','name', "email", "password", "expoNotificationToken", "relationshipPoint"]); done() - }); + }) }); it("should error with error code 400", function(done){ let errorUser ={} chai .request(app) .post("/users/register") + .set('content-type', 'application/x-www-form-urlencoded') .send(errorUser) .end(function(err, res){ - console.log(JSON.stringify(res.body,null,3)) + expect(err).to.be.null; expect(res).to.have.status(400) expect(res.body).to.have.all.keys('error','message',"source","statusCode"); expect(res.body.message).to.include('validation') done() }) + }) }); @@ -67,6 +94,7 @@ describe("User tests", function () { chai .request(app) .post("/users/login") + .set('content-type', 'application/x-www-form-urlencoded') .send(user) .end(function(err,res){ expect(err).to.be.null; @@ -77,6 +105,8 @@ describe("User tests", function () { token = res.body.token done(); }) + + }) it("Login Failed: wrong email with status 400", function(done){ let user = { @@ -86,9 +116,9 @@ describe("User tests", function () { chai .request(app) .post("/users/login") + .set('content-type', 'application/x-www-form-urlencoded') .send(user) - .end(function(err,res){ - console.log(JSON.stringify(res.body,null,3)) + .end(function(err,res){ expect(err).to.be.null; expect(res).to.have.status(400); expect(res.body).to.be.an("object") @@ -96,18 +126,19 @@ describe("User tests", function () { expect(res.body).to.have.all.keys('error','message',"source","statusCode"); done(); }) + }) it("Login Failed: wrong password with status 400", function(done){ let user = { - "email": "test@email.com", + "email": "coba@email.com", "password": "pas", } chai .request(app) .post("/users/login") + .set('content-type', 'application/x-www-form-urlencoded') .send(user) .end(function(err,res){ - console.log(JSON.stringify(res.body,null,3)) expect(err).to.be.null; expect(res).to.have.status(400); expect(res.body).to.be.an("object") @@ -116,53 +147,43 @@ describe("User tests", function () { done(); }) }) + //soon to be delete and replace with real backend + it("successfully post message", function(){ + + let message = { + code: "food", + relationshipPoint : 0, + payload : {} + } + + chai + .request(app) + .post("/messages") + .set({authorization: token}) + .send(message) + .end(function(err,res){ + expect(err).to.be.null; + expect(res).to.have.status(200); + expect(res.body).to.be.an("object") + expect(res.body.message).to.equal("success") + }) + }) + it("should get 401 passing data without token", function(){ + let message = { + code: "food", + relationshipPoint : 0, + payload : {} + } + chai + .request(app) + .post("/messages") + .send(message) + .end(function(err,res){ + expect(err).to.be.null; + expect(res).to.have.status(401); + }) + }) + }); - // describe("POST /users/logout", function(){ - // it("Success Logout", function(done){ - // chai - // .request(app) - // .post("/users/logout") - // .set({authorization: token}) - // .end(function(err,res){ - // console.log(JSON.stringify(res.body,null,3)) - // expect(err).to.be.null; - // expect(res).to.have.status(200); - // expect(res.body).to.be.an("object") - // expect(res.body.message).to.equal("Successfully logout"); - // expect(res.body).to.have.all.keys("message","accountType") - // done(); - // }) - // }) - // it("Logout Failed: not authenticated status 403", function(done){ - // chai - // .request(app) - // .post("/users/logout") - // .end(function(err,res){ - // console.log(JSON.stringify(res.body,null,3)) - // expect(err).to.be.null; - // expect(res).to.have.status(403); - // expect(res.body).to.be.an("object") - // expect(res.body.message).to.equal("Token is undefined") - // expect(res.body).to.have.all.keys('error','message',"source","statusCode"); - // done(); - // }) - // }) - // }) - // describe("GET /users/profile", function(){ - // it("Get Profile with status 200", function(done){ - // chai - // .request(app) - // .get("/users/profile") - // .set({authorization:token}) - // .end(function(err,res){ - // console.log(JSON.stringify(res.body,null,3)) - // expect(err).to.be.null; - // expect(res).to.have.status(200) - // expect(res.body).to.be.an("object") - // expect(res.body).to.have.all.keys("imageUrl", "accountType","name","hackpay","role") - // done() - // }) - // }) - // }) }); \ No newline at end of file