diff --git a/backend/app.js b/backend/app.js index a8c3e73f13134ecbb2e82470357da83d89bc7857..29c1f706686b27dd6affcfe141e5385b539775f0 100644 --- a/backend/app.js +++ b/backend/app.js @@ -11,7 +11,9 @@ const corsOptions = { } const app = express() -app.use(morgan('combined')) +if (process.env.NODE_ENV != 'test') { + app.use(morgan('combined')) +} app.use(bodyParser.json()) app.use(cors(corsOptions)); app.use(cookieParser()); diff --git a/backend/controller/userController.js b/backend/controller/userController.js index 8540e766f2ffc16f329bf7f137edd2c4d0972ad9..c3490c95f051a255dd6de81e7d78d60b09a50cc7 100644 --- a/backend/controller/userController.js +++ b/backend/controller/userController.js @@ -143,9 +143,9 @@ exports.deleteUser = (req, res) => { exports.viewDetail = (req, res) => { User.findOne({ where: { - id: req.body.id + id: req.params.id }, - attributes: ['id', 'name', 'email', 'username', 'password'], + attributes: ['id', 'name', 'email', 'username'], include: [{ model: Role, attributes: ['id', 'name'] diff --git a/backend/router/router.js b/backend/router/router.js index 9d2a501561b227b9423b1d1904c355474ecb58d5..bc8ca7333118fbc22541aa324a56d647090566ec 100644 --- a/backend/router/router.js +++ b/backend/router/router.js @@ -18,6 +18,12 @@ module.exports = function(app) { app.post('/api/auth/login', authController.signin); + app.get('/api/user/all', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.fetchAll); + app.get('/api/user/:id', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.viewDetail); + app.post('/api/user/create', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.createUser); + app.post('/api/user/edit', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.editUser); + app.post('/api/user/delete', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.deleteUser); + app.post('/api/organisasi/internal/all', [verifyJwtToken.verifyToken, verifyJwtToken.isMasterAdminDiskominfo], organisasiInternalController.fetchAll); app.post('/api/organisasi/internal/create', [verifyJwtToken.verifyToken, verifyJwtToken.isMasterAdminDiskominfo], organisasiInternalController.createOrganisasiInternal); app.post('/api/organisasi/internal/edit', [verifyJwtToken.verifyToken, verifyJwtToken.isMasterAdminDiskominfo], organisasiInternalController.editOrganisasiInternal); @@ -28,12 +34,6 @@ module.exports = function(app) { app.post('/api/organisasi/eksternal/edit', [verifyJwtToken.verifyToken, verifyJwtToken.isAdminDiskominfo], organisasiEksternalController.editOrganisasiEksternal); app.post('/api/organisasi/eksternal/delete', [verifyJwtToken.verifyToken, verifyJwtToken.isAdminDiskominfo], organisasiEksternalController.deleteOrganisasiEksternal); - app.post('/api/user/all', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.fetchAll); - app.post('/api/user/create', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.createUser); - app.post('/api/user/edit', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.editUser); - app.post('/api/user/delete', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.deleteUser); - app.post('/api/user/detail', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.viewDetail); - app.get('/api/role/all', [verifyJwtToken.verifyToken, checkPermission.isRoleAll], roleController.fetchAll); app.post('/api/role/create', [verifyJwtToken.verifyToken, checkPermission.isRoleAll, verifyRole.roleIsExist], roleController.createRole); app.post('/api/role/edit', [verifyJwtToken.verifyToken, checkPermission.isRoleAll, verifyRole.roleIsExist], roleController.editRole); diff --git a/backend/seeders/20190503165519-roles.js b/backend/seeders/20190503165519-roles.js new file mode 100644 index 0000000000000000000000000000000000000000..7e32aef418d7d21b12ccc61d9c4f59081748542b --- /dev/null +++ b/backend/seeders/20190503165519-roles.js @@ -0,0 +1,27 @@ +'use strict'; + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.bulkInsert('roles', [{ + name: 'Master Admin Diskominfo', + createdAt: new Date(), + updatedAt: new Date() + }, { + name: 'Admin Diskominfo', + createdAt: new Date(), + updatedAt: new Date() + }, { + name: 'Admin Dinas', + createdAt: new Date(), + updatedAt: new Date() + }, { + name: 'Member Dinas', + createdAt: new Date(), + updatedAt: new Date() + }]); + }, + + down: (queryInterface, Sequelize) => { + return queryInterface.bulkDelete('roles', null, {}); + } +}; diff --git a/backend/seeders/20190512034615-test-user.js b/backend/seeders/20190512034615-test-user.js index b8d4452943a73dd3b349e4bf2762a4fa678133bc..2ab1817bb4c5831a8e858017522109c73764e01c 100644 --- a/backend/seeders/20190512034615-test-user.js +++ b/backend/seeders/20190512034615-test-user.js @@ -11,6 +11,7 @@ module.exports = { const rolesRow = roles[0]; return await queryInterface.bulkInsert('users', [{ + id: 1, name: 'Kadek Yuda', username: 'yuda_98', email: 'yudaikadek22@gmail.com', @@ -19,6 +20,16 @@ module.exports = { createdAt: new Date(), updatedAt: new Date() }, { + id: 2, + name: 'Komi Shouko', + username: 'komisama', + email: 'komi.shouko@gmail.com', + password: bycrypt.hashSync('komisama'), + roleId: rolesRow[1].id, + createdAt: new Date(), + updatedAt: new Date() + },{ + id: 3, name: 'Kucing Laut', username: 'kucinglaut', email: 'kucinglaut1522@gmail.com', diff --git a/backend/test/authTest.js b/backend/test/authTest.js index b0214821577d5588c9d30935e92df9b04065e621..f49dd2ecb585c6864dae07ba48c7f8a33d2e64d5 100644 --- a/backend/test/authTest.js +++ b/backend/test/authTest.js @@ -5,46 +5,7 @@ chai.use(chaiHttp); const expect = chai.expect; const app = require('../app'); -const models = require('../models'); -const User = models.user; -const Role = models.role; -const bycrypt = require('bcryptjs'); - describe("Auth API", () => { - before((done) => { - User.create({ - id: 1, - name: 'Komi Shouko', - username: 'komisama', - email: 'komi.shouko@gmail.com', - password: bycrypt.hashSync('komisama') - }).then((user) => { - Role.create({ - id: 5, - name: "Admin" - }).then((role) => { - user.setRole(role).then(() => { - done(); - }) - }) - }) - }); - after((done) => { - Role.destroy({ - where: { - id: 5 - } - }).then(() => { - User.destroy({ - where: { - id: 1 - } - }).then(() => { - done(); - }) - }) - }); - describe('#Login', () => { it('Should login with correct credentials', (done) => { var loginCredentials = {username: 'komisama', password: 'komisama'}; diff --git a/backend/test/userTest.js b/backend/test/userTest.js index cc8628390cf4a5045e83a913ff4a87806082720c..07ee3c2e5dda9215545f4fb9997936ad3138d48b 100644 --- a/backend/test/userTest.js +++ b/backend/test/userTest.js @@ -1,7 +1,7 @@ const chai = require('chai'); const chaiHttp = require('chai-http'); chai.use(chaiHttp); -const should = chai.should(); + const expect = chai.expect; const app = require('../app'); @@ -9,6 +9,23 @@ const models = require('../models'); const User = models.user; var tokenCookies; +var newUserId = 0; + +var newUser = { + name: 'Osana Najimi', + email: 'osana.najimi@gmail.com', + username: 'osananajimi', + password: 'hai', + role: 'Member Dinas' +} + +var editUser = { + name: 'Osana Najimi', + email: 'najimi.osana@gmail.com', + username: 'osananajimi', + password: 'hai', + role: 'Member Dinas' +} describe('User API', () => { beforeEach((done) => { @@ -27,24 +44,91 @@ describe('User API', () => { describe('# Fetch All', () => { it('Should fetch all users', function(done){ chai.request(app) - .post('/api/user/all') + .get('/api/user/all') .set('Cookie', tokenCookies) .end(function(err, res) { - console.log(res.body.data.users[0]); + expect(res).status(200); + expect(res.body.data.users).be.a('array'); done(); }); }); }); describe('# Create User', () => { + it('Should create a user with different credentials', function(done) { + chai.request(app) + .post('/api/user/create') + .set('Cookie', tokenCookies) + .send(newUser) + .end(function(err, res) { + expect(res).status(200); + User.findOne({ + where: { + name: newUser.name + } + }).then(user => { + expect(user).is.not.undefined; + newUserId = user.id; + done(); + }); + }) + }); }); describe('# Edit User', () => { + it('Should edit existing user', function(done) { + expect(newUserId).not.equals(0); + editUser.id = newUserId; + chai.request(app) + .post('/api/user/edit') + .set('Cookie', tokenCookies) + .send(editUser) + .end(function(err,res) { + User.findOne({ + where: { + id: newUserId + } + }).then((user) => { + expect(user.email).equals('najimi.osana@gmail.com'); + done(); + }) + }); + }) }); describe('# Delete User', () => { - + it('Should delete existing user', function(done) { + expect(newUserId).not.equals(0); + var userId = {id: newUserId}; + chai.request(app) + .post('/api/user/delete') + .set('Cookie', tokenCookies) + .send(userId) + .end(function(err, res) { + User.findOne({ + where: { + id: newUserId + } + }).then((user) => { + expect(user).is.null; + done(); + }) + }) + + }) }); describe('# User Detail', () => { - + it('Should show details of existing user', function(done) { + chai.request(app) + .get('/api/user/1') + .set('Cookie', tokenCookies) + .end(function(err, res) { + var dataResponse = res.body.data.users; + expect(dataResponse.id).equals(1); + expect(dataResponse.name).equals('Kadek Yuda'); + expect(dataResponse.email).equals('yudaikadek22@gmail.com'); + expect(dataResponse.username).equals('yuda_98'); + done(); + }) + }) }); }) \ No newline at end of file