diff --git a/enviroment.js b/enviroment.js new file mode 100644 index 0000000000000000000000000000000000000000..df6fd95d1ecf84f24ab32477f0948244dd405b90 --- /dev/null +++ b/enviroment.js @@ -0,0 +1,5 @@ +const URL = "http://localhost:3000/api/"; + +module.exports = { + URL +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ce45d8511f12d23a23143fd0e21a366799a052ba..fd8ca9e9a72572e2076bad1193675bc0177a8c00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -142,6 +142,12 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", @@ -374,6 +380,45 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true, + "requires": { + "assertion-error": "^1.0.1", + "deep-eql": "^0.1.3", + "type-detect": "^1.0.0" + } + }, + "chai-as-promised": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-5.3.0.tgz", + "integrity": "sha1-CdekApCKpw39vq1T5YU/x50+8hw=", + "dev": true + }, + "chai-subset": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/chai-subset/-/chai-subset-1.6.0.tgz", + "integrity": "sha1-pdDKFOMpp5WW7XAFi2ZGvWmIz+k=", + "dev": true + }, + "chakram": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/chakram/-/chakram-1.5.0.tgz", + "integrity": "sha1-PYsKiPdo3WraWSpSRmPMDcFKwc8=", + "dev": true, + "requires": { + "chai": "3.x.x", + "chai-as-promised": "5.x.x", + "chai-subset": "1.x.x", + "extend-object": "1.x.x", + "q": "1.x.x", + "request": "2.x.x", + "request-debug": "0.x.x", + "tv4": "1.x.x" + } + }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", @@ -722,6 +767,23 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", @@ -1473,6 +1535,12 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, + "extend-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extend-object/-/extend-object-1.0.0.tgz", + "integrity": "sha1-QlFPhAFdE1bK9Rh5ad+yvBvaCCM=", + "dev": true + }, "external-editor": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", @@ -3179,6 +3247,12 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -3336,6 +3410,15 @@ } } }, + "request-debug": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/request-debug/-/request-debug-0.2.0.tgz", + "integrity": "sha1-/AVOyBcYGwTKQaBSwTb2HEirr3g=", + "dev": true, + "requires": { + "stringify-clone": "^1.0.0" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -3670,6 +3753,12 @@ "safe-buffer": "~5.1.0" } }, + "stringify-clone": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stringify-clone/-/stringify-clone-1.1.1.tgz", + "integrity": "sha1-MJojX7Ts/M19OI2+GLqQT6yvQzs=", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3888,6 +3977,12 @@ "safe-buffer": "^5.0.1" } }, + "tv4": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=", + "dev": true + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -3902,6 +3997,12 @@ "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", diff --git a/package.json b/package.json index e6fcce1e9bcd7920fea44bd627db0bd762e73aae..95800652fa400d0978384b130e8b3c200a458f2a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "scripts": { "lint": "eslint .", "start": "node .", - "posttest": "npm run lint && nsp check" + "posttest": "npm run lint && nsp check", + "tests":"mocha ./test" }, "dependencies": { "compression": "^1.0.3", @@ -22,6 +23,7 @@ "strong-error-handler": "^2.0.0" }, "devDependencies": { + "chakram": "^1.5.0", "eslint": "^3.17.1", "eslint-config-loopback": "^8.0.0", "nsp": "^3.2.1" diff --git a/server/boot/access-control.js b/server/boot/access-control.js index 6abef2d37211bb47dfcae6ae48264e5d414b3a49..38f66df86ae077ce96e2a0d594d4050024924259 100644 --- a/server/boot/access-control.js +++ b/server/boot/access-control.js @@ -38,9 +38,8 @@ module.exports = function(app) { } context.model.findById(userId, function(err, model) { - app.models.EndUser.findById(userId, function(err2, user){ - if (err || err2 || !user || !model) + if ((err || !model ) && (err2 || !user)) return reject(); if(user.permission !== role) return reject(); @@ -77,7 +76,7 @@ module.exports = function(app) { context.model.findById(userId, function(err, model) { app.models.EndUser.findById(userId, function(err2, user){ - if (err || err2 || !user || !model) + if ((err || !model ) && (err2 || !user)) return reject(); if(user.permission !== role) return reject(); diff --git a/test/account.js b/test/account.js new file mode 100644 index 0000000000000000000000000000000000000000..5ddb917a48a31812d1b42b906ac48e9a3018f2be --- /dev/null +++ b/test/account.js @@ -0,0 +1,32 @@ +var chakram = require('chakram'), expect = chakram.expect; +var url = require('../enviroment') +const URL = url.URL; + +describe("Account", function() { + it("should create an admin account", function (){ + let testObject = { + "email": "admin@admin.com", + "permission": "admin", + "registration": "NMBR#123456789", + "username": "Administrador Atencioso", + "password":"admin" + } + return chakram.post(`${URL}end_users`,testObject).then( function (myResponse){ + expect(myResponse).to.have.status(200) + expect(myResponse.body.result.permission).to.contain('admin') + }); + }); + it("should create an user account", function (){ + let testObject = { + "email": "enduser@enduser.com", + "permission": "user", + "registration": "NMBR#321654987", + "username": "Usuário Feliz", + "password":"end_user" + } + return chakram.post(`${URL}end_users`,testObject).then( function (myResponse){ + expect(myResponse).to.have.status(200) + expect(myResponse.body.result.permission).to.contain('user') + }); + }); +}) \ No newline at end of file diff --git a/test/category.js b/test/category.js new file mode 100644 index 0000000000000000000000000000000000000000..16fe3db0b3465f69d9ee3de417616bf8c30aa11c --- /dev/null +++ b/test/category.js @@ -0,0 +1,41 @@ +var chakram = require('chakram'), expect = chakram.expect; +var url = require('../enviroment') +const URL = url.URL; + +describe("Categories", function() { + it("should return all categories", function(){ + return chakram.get(`${URL}categories`).then(function (myResponse){ + expect(myResponse).to.have.status(200); + expect(myResponse.body.result).to.be.a('array') + }); + }); + it("should return one category", function(){ + return chakram.get(`${URL}categories`).then( function (myResponse){ + let category = myResponse.body.result[0] + return chakram.get(`${URL}categories/${myResponse.body.result[0].id}`).then( function (myResponse2){ + expect(myResponse2).to.have.status(200); + expect(myResponse2.body.result.category_name).to.contain(category.category_name) + }); + }); + }); + it("should try to create a new category", function(){ + let testObject = { + "category_name":"Terreiro", + "category_description":"Lugar que mantém as tradições dos afrodescendentes" + } + return chakram.post(`${URL}categories`,testObject).then( function (myResponse){ + expect(myResponse).to.have.status(401) + expect(myResponse.body.error.message).to.contain("Authorization Required") + }); + }); + // it("should create a new category as admin", function(){ + // let testObject = { + // "category_name":"Terreiro", + // "category_description":"Lugar que mantém as tradições dos afrodescendentes" + // } + // return chakram.post(`${URL}categories`,testObject).then( function (myResponse){ + // expect(myResponse).to.have.status(401) + // expect(myResponse.body.error.message).to.contain("Authorization Required") + // }); + // }); +}) \ No newline at end of file