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