From 194793ce157a27459c5e8c48580258ac161c0793 Mon Sep 17 00:00:00 2001 From: Lenton99 <49190812+Lenton99@users.noreply.github.com> Date: Thu, 10 Feb 2022 12:07:57 +0000 Subject: [PATCH 1/9] HT-29 Added the toll operator functionality --- server/app.js | 6 +- server/business/user.business.js | 20 ++- server/controllers/auth.controller.js | 4 +- server/controllers/user.controller.js | 13 ++ server/database/seed.js | 7 + server/datalayer/mongo.js | 52 ++++-- server/models/user.model.js | 2 +- server/routes/user.routes.js | 11 ++ .../test/integration/bill.controller.test.js | 20 +-- ui/src/api/api.js | 38 +++- ui/src/auth/index.js | 2 +- ui/src/components/navbar.vue | 21 ++- ui/src/router/router.js | 12 +- ui/src/views/Login.vue | 11 +- ui/src/views/MyBills.vue | 166 ++++++++++++------ ui/src/views/ViewUsers.vue | 113 ++++++++++++ 16 files changed, 395 insertions(+), 103 deletions(-) create mode 100644 server/controllers/user.controller.js create mode 100644 server/routes/user.routes.js create mode 100644 ui/src/views/ViewUsers.vue diff --git a/server/app.js b/server/app.js index dabe168..6adc989 100644 --- a/server/app.js +++ b/server/app.js @@ -28,8 +28,9 @@ app.use(cors({ origin: "http://localhost:8080", credentials: true })); */ const authRouter = require("./routes/auth.routes"); const billRouter = require("./routes/bill.routes"); +const userRouter = require("./routes/user.routes"); app.get('/api-docs/swagger.json', (req, res) => res.json(swaggerDocument)); -app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)) +app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); /** * View Engine setup @@ -45,6 +46,7 @@ app.use(cookieParser()); // Configuring the main routes app.use("/auth", authRouter); -app.use("/bill", billRouter) +app.use("/bill", billRouter); +app.use("/user", userRouter); module.exports = app; diff --git a/server/business/user.business.js b/server/business/user.business.js index 38134f7..446bfc3 100644 --- a/server/business/user.business.js +++ b/server/business/user.business.js @@ -47,7 +47,8 @@ module.exports = class UserBusiness { id: user._id, }; }) - .catch(() => {throw httpError(401, "Your email or password is incorrect."); + .catch(() => { + throw httpError(401, "Your email or password is incorrect."); }); } @@ -102,7 +103,22 @@ module.exports = class UserBusiness { throw httpError(404, error.message); }); } -} + + /* + * Find all users and apply any filters + */ + async findAllUsers(queryString) { + const filter = { + offset: queryString.offset, + limit: queryString.limit, + type: queryString.type, + }; + + return this.dataLayer.findAll(filter).catch((error) => { + throw httpError(500, error.message); + }); + } +}; /** * Validates the data in a User. diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 2a5b487..40311d7 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -10,13 +10,13 @@ exports.login = async (req, res) => { .then((data) => { req.session.token = data.token; req.session.username = data.username; - req.session.role = data.role; + req.session.type = data.type; req.session.id = data.id; res.status(200).send({ message: "Successfully logged in.", username: data.username, - role: data.role, + type: data.type, id: data.id, }); }) diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js new file mode 100644 index 0000000..2cfc2d5 --- /dev/null +++ b/server/controllers/user.controller.js @@ -0,0 +1,13 @@ +const UserBusiness = require("../business/user.business"); +const userBusiness = new UserBusiness(); + +/** + * Get all users + */ +exports.getAllUsers = async (req, res) => { + userBusiness.findAllUsers(req.query) + .then((data) => {return res.status(200).send(data)}) + .catch((error) => { + res.status(error.status).send({message: error.message}) + }) +} diff --git a/server/database/seed.js b/server/database/seed.js index 4d010d0..879f814 100644 --- a/server/database/seed.js +++ b/server/database/seed.js @@ -34,6 +34,13 @@ const users = [ password: bcrypt.hashSync("test1", 8), type: "Driver", }, + { + _id: "123456789111", + username: "operator_username", + email: "operator@email.com", + password: bcrypt.hashSync("test1", 8), + type: "Toll Operator", + } ]; const locations = [ diff --git a/server/datalayer/mongo.js b/server/datalayer/mongo.js index 2bc8eae..3c9813a 100644 --- a/server/datalayer/mongo.js +++ b/server/datalayer/mongo.js @@ -8,33 +8,47 @@ class DataLayer { * Find all records in the database. */ async findAllAndPopulate(filter, populateFilter) { - return this.model.find(JSON.parse(JSON.stringify(filter))) - .limit(filter.limit) - .skip(filter.offset * filter.limit) - .populate(JSON.parse(JSON.stringify(populateFilter))) - .then((bills) => { - return this.model.countDocuments().then((count) => { - return {bills: bills, count: count} - }) - }) + return this.model + .find(JSON.parse(JSON.stringify(filter))) + .limit(filter.limit) + .skip(filter.offset * filter.limit) + .populate(JSON.parse(JSON.stringify(populateFilter))) + .then((bills) => { + return this.model.countDocuments().then((count) => { + return { bills: bills, count: count }; + }); + }); + } + + async findAll(filter) { + return this.model + .find(JSON.parse(JSON.stringify(filter))) + .limit(filter.limit) + .skip(filter.offset * filter.limit) + .then((users) => { + return this.model.countDocuments().then((count) => { + return { users: users, count: count }; + }); + }); } /** * Find all records in the database. */ async findByPropertyAndPopulate(id, populateFilter) { - return this.model.findById(id) - .orFail(new Error("Record can't be found in the database.")) - .populate(JSON.parse(JSON.stringify(populateFilter))) + return this.model + .findById(id) + .orFail(new Error("Record can't be found in the database.")) + .populate(JSON.parse(JSON.stringify(populateFilter))); } - + /** * Find a record by property in the database. */ async findByProperty(propertyToFind) { return this.model.find(propertyToFind); } - + /** * Create and save the record to the database. */ @@ -46,10 +60,12 @@ class DataLayer { * Update and save the record to the database. */ async update(recordId, recordToUpdate) { - return this.model.findByIdAndUpdate(recordId, recordToUpdate) - .orFail(new Error("Bill can't be found in the database.")) - .catch(error => {throw new Error(error.message)}); - + return this.model + .findByIdAndUpdate(recordId, recordToUpdate) + .orFail(new Error("Bill can't be found in the database.")) + .catch((error) => { + throw new Error(error.message); + }); } } diff --git a/server/models/user.model.js b/server/models/user.model.js index 4f0b158..4d1cbbe 100644 --- a/server/models/user.model.js +++ b/server/models/user.model.js @@ -22,7 +22,7 @@ module.exports = (mongoose) => { required: [true, "You must supply the user's role."], enum: { values: ["Driver", "Toll Operator"], - message: "Type is not valid. Must be 'Driver'.", + message: "Type is not valid. Must be 'Driver' or 'Toll Operator'.", }, }, }); diff --git a/server/routes/user.routes.js b/server/routes/user.routes.js new file mode 100644 index 0000000..b9adb37 --- /dev/null +++ b/server/routes/user.routes.js @@ -0,0 +1,11 @@ +const express = require("express"); +const router = express.Router(); +const { checkJwtToken } = require("../middleware/auth/authJwt"); + +// Get the Bill controller +const userController = require("../controllers/user.controller"); + +// Get All Users +router.get("/", checkJwtToken, userController.getAllUsers); + +module.exports = router; diff --git a/server/test/integration/bill.controller.test.js b/server/test/integration/bill.controller.test.js index a601ecf..cdfd0f5 100644 --- a/server/test/integration/bill.controller.test.js +++ b/server/test/integration/bill.controller.test.js @@ -8,7 +8,6 @@ let authCookie; let authCookieSig; before(function (done) { - chai.request(server) .post("/auth/login") .send({ @@ -95,7 +94,7 @@ describe("Testing /bill paths", () => { it("Should get bill by id", (done) => { // Arrange - const billId = '123456789105'; + const billId = "123456789105"; const url = `/bill/${billId}`; // Act @@ -107,10 +106,7 @@ describe("Testing /bill paths", () => { // Assert res.should.have.status(200); res.should.be.a("object"); - res.body.should.haveOwnProperty( - "cost", - 72.93887106726764 - ); + res.body.should.haveOwnProperty("cost", 72.93887106726764); res.body.should.haveOwnProperty("paid", false); res.body.driver.should.haveOwnProperty( "username", @@ -120,10 +116,7 @@ describe("Testing /bill paths", () => { "email", "test@email.com" ); - res.body.driver.should.haveOwnProperty( - "type", - "Driver" - ); + res.body.driver.should.haveOwnProperty("type", "Driver"); res.body.journey.should.haveOwnProperty( "regNumber", "test_reg_number" @@ -443,7 +436,7 @@ describe("Testing /bill paths", () => { it("Should get a bill by id but does not have authorisation", (done) => { // Arrange - const billId = '123456789105' + const billId = "123456789105"; const url = `/bill/${billId}`; // Act @@ -482,7 +475,7 @@ describe("Testing /bill paths", () => { it("Should pay for a bill but does not have authorisation", (done) => { // Arrange - const billId = '123456789105'; + const billId = "123456789105"; const requestBody = { paid: true, }; @@ -506,7 +499,7 @@ describe("Testing /bill paths", () => { it("Should gets a bill by id, but cookie has expired", (done) => { // Arrange - const billId = '123456789105' + const billId = "123456789105"; const url = `/bill/${billId}`; // Act @@ -523,5 +516,4 @@ describe("Testing /bill paths", () => { done(); }); }); - }); diff --git a/ui/src/api/api.js b/ui/src/api/api.js index abcaf2f..6729754 100644 --- a/ui/src/api/api.js +++ b/ui/src/api/api.js @@ -27,17 +27,37 @@ const api = class Api { }); } + async getAllUsers(queryString) { + const query = { + limit: queryString.limit, + offset: queryString.offset, + type: queryString.type, + }; + + return axios + .get(`${this.baseUrl}/user/`, { + params: JSON.parse(JSON.stringify(query)), + withCredentials: true, + }) + .then((response) => { + return response.data; + }) + .catch((error) => { + throw error; + }); + } + async getBillById(billId) { return axios - .get(`${this.baseUrl}/bill/${billId}`, { - withCredentials: true, - }) - .then((response) => { - return response.data; - }) - .catch((error) => { - throw error; - }); + .get(`${this.baseUrl}/bill/${billId}`, { + withCredentials: true, + }) + .then((response) => { + return response.data; + }) + .catch((error) => { + throw error; + }); } async payBill(billId) { diff --git a/ui/src/auth/index.js b/ui/src/auth/index.js index 1557b3e..5e9c61f 100644 --- a/ui/src/auth/index.js +++ b/ui/src/auth/index.js @@ -15,7 +15,7 @@ export const isAuthenticated = (to, from, next) => { * Check if the user transitioning the route is an admin. */ export const isOperator = (to, from, next) => { - if (store.getters.user.type == "Operator") { + if (store.getters.user.type == "Toll Operator") { next(); } else { next({ path: "/forbidden" }); diff --git a/ui/src/components/navbar.vue b/ui/src/components/navbar.vue index 8cfb66c..e077086 100644 --- a/ui/src/components/navbar.vue +++ b/ui/src/components/navbar.vue @@ -4,7 +4,11 @@ id="navbar" v-if="loggedIn" > - + Self Service Portal LogoSelf Service Portal - + support icon { this.$bvToast.toast(error.message, { diff --git a/ui/src/views/MyBills.vue b/ui/src/views/MyBills.vue index 969aed1..e1c5076 100644 --- a/ui/src/views/MyBills.vue +++ b/ui/src/views/MyBills.vue @@ -1,52 +1,100 @@  \ No newline at end of file From 94b4bd333f9b3f8f81af78599bf2f740e9d0ba8d Mon Sep 17 00:00:00 2001 From: Lenton99 <49190812+Lenton99@users.noreply.github.com> Date: Thu, 10 Feb 2022 12:57:21 +0000 Subject: [PATCH 2/9] HT-29 Implemented server testing --- server/.nyc_output/processinfo/index.json | 2 +- server/coverage/lcov.info | 233 +++++++++++------- server/middleware/auth/authJwt.js | 24 +- server/routes/user.routes.js | 4 +- .../test/integration/user.controller.test.js | 73 ++++++ server/test/unit/auth.test.js | 58 +++++ 6 files changed, 294 insertions(+), 100 deletions(-) create mode 100644 server/test/integration/user.controller.test.js create mode 100644 server/test/unit/auth.test.js diff --git a/server/.nyc_output/processinfo/index.json b/server/.nyc_output/processinfo/index.json index c23d26d..39c296d 100644 --- a/server/.nyc_output/processinfo/index.json +++ b/server/.nyc_output/processinfo/index.json @@ -1 +1 @@ -{"processes":{"50560bfc-9d99-4dfb-92f6-1329d287dafe":{"parent":null,"children":[]}},"files":{"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\app.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\database\\index.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\config\\db.config.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\journey.model.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\bill.model.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\utilities.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\location.model.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\user.model.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\auth.routes.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\auth.controller.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\user.business.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\datalayer\\mongo.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\bill.routes.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\middleware\\auth\\authJwt.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\bill.controller.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\bill.business.js":["50560bfc-9d99-4dfb-92f6-1329d287dafe"]},"externalIds":{}} \ No newline at end of file +{"processes":{"e285f173-7f01-4ca1-be5b-403c6759180b":{"parent":null,"children":[]}},"files":{"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\app.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\database\\index.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\config\\db.config.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\journey.model.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\bill.model.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\utilities.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\location.model.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\user.model.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\auth.routes.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\auth.controller.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\user.business.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\datalayer\\mongo.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\bill.routes.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\middleware\\auth\\authJwt.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\bill.controller.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\bill.business.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\user.routes.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\user.controller.js":["e285f173-7f01-4ca1-be5b-403c6759180b"]},"externalIds":{}} \ No newline at end of file diff --git a/server/coverage/lcov.info b/server/coverage/lcov.info index 708a31e..bc25b2d 100644 --- a/server/coverage/lcov.info +++ b/server/coverage/lcov.info @@ -1,6 +1,6 @@ TN: SF:app.js -FN:31,(anonymous_0) +FN:32,(anonymous_0) FNF:1 FNH:0 FNDA:0,(anonymous_0) @@ -21,7 +21,7 @@ DA:29,1 DA:30,1 DA:31,1 DA:32,1 -DA:37,1 +DA:33,1 DA:38,1 DA:39,1 DA:40,1 @@ -29,11 +29,13 @@ DA:41,1 DA:42,1 DA:43,1 DA:44,1 -DA:47,1 +DA:45,1 DA:48,1 +DA:49,1 DA:50,1 -LF:28 -LH:28 +DA:52,1 +LF:30 +LH:30 BRF:0 BRH:0 end_of_record @@ -108,27 +110,31 @@ FN:8,(anonymous_0) FN:16,(anonymous_1) FN:18,(anonymous_2) FN:50,(anonymous_3) -FN:57,(anonymous_4) -FN:63,(anonymous_5) -FN:71,(anonymous_6) -FN:82,(anonymous_7) -FN:94,(anonymous_8) -FN:97,(anonymous_9) -FN:101,(anonymous_10) -FN:110,isUserDataValid -FNF:12 +FN:58,(anonymous_4) +FN:64,(anonymous_5) +FN:72,(anonymous_6) +FN:83,(anonymous_7) +FN:95,(anonymous_8) +FN:98,(anonymous_9) +FN:102,(anonymous_10) +FN:110,(anonymous_11) +FN:117,(anonymous_12) +FN:126,isUserDataValid +FNF:14 FNH:5 -FNDA:1,(anonymous_0) -FNDA:1,(anonymous_1) -FNDA:1,(anonymous_2) +FNDA:2,(anonymous_0) +FNDA:2,(anonymous_1) +FNDA:2,(anonymous_2) FNDA:0,(anonymous_3) FNDA:0,(anonymous_4) FNDA:0,(anonymous_5) FNDA:0,(anonymous_6) FNDA:0,(anonymous_7) -FNDA:1,(anonymous_8) -FNDA:1,(anonymous_9) +FNDA:2,(anonymous_8) +FNDA:2,(anonymous_9) FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) FNDA:0,isUserDataValid DA:1,1 DA:2,1 @@ -136,43 +142,46 @@ DA:3,1 DA:4,1 DA:5,1 DA:7,1 -DA:10,1 -DA:17,1 -DA:19,1 -DA:24,1 +DA:10,2 +DA:17,2 +DA:19,2 +DA:24,2 DA:25,0 -DA:31,1 -DA:43,1 -DA:50,0 -DA:58,0 -DA:64,0 -DA:72,0 +DA:31,2 +DA:43,2 +DA:51,0 +DA:59,0 +DA:65,0 DA:73,0 -DA:75,0 -DA:82,0 +DA:74,0 +DA:76,0 DA:83,0 DA:84,0 DA:85,0 DA:86,0 DA:87,0 -DA:95,1 -DA:99,1 -DA:102,0 +DA:88,0 +DA:96,2 +DA:100,2 +DA:103,0 DA:111,0 -LF:29 +DA:117,0 +DA:118,0 +DA:127,0 +LF:32 LH:14 BRDA:24,0,0,0 -BRDA:24,0,1,1 -BRDA:72,1,0,0 -BRDA:72,1,1,0 -BRDA:83,2,0,0 -BRDA:83,2,1,0 -BRDA:85,3,0,0 -BRDA:85,3,1,0 -BRDA:111,4,0,0 -BRDA:111,4,1,0 -BRDA:111,4,2,0 -BRDA:111,4,3,0 +BRDA:24,0,1,2 +BRDA:73,1,0,0 +BRDA:73,1,1,0 +BRDA:84,2,0,0 +BRDA:84,2,1,0 +BRDA:86,3,0,0 +BRDA:86,3,1,0 +BRDA:127,4,0,0 +BRDA:127,4,1,0 +BRDA:127,4,2,0 +BRDA:127,4,3,0 BRF:12 BRH:1 end_of_record @@ -196,33 +205,33 @@ FN:34,(anonymous_4) FN:39,(anonymous_5) FN:47,(anonymous_6) FNF:7 -FNH:3 -FNDA:1,(anonymous_0) -FNDA:1,(anonymous_1) +FNH:2 +FNDA:2,(anonymous_0) +FNDA:2,(anonymous_1) FNDA:0,(anonymous_2) FNDA:0,(anonymous_3) FNDA:0,(anonymous_4) FNDA:0,(anonymous_5) -FNDA:1,(anonymous_6) +FNDA:0,(anonymous_6) DA:1,1 DA:2,1 DA:7,1 -DA:8,1 -DA:11,1 -DA:12,1 -DA:13,1 -DA:14,1 -DA:16,1 +DA:8,2 +DA:11,2 +DA:12,2 +DA:13,2 +DA:14,2 +DA:16,2 DA:24,0 DA:31,1 DA:32,0 DA:35,0 DA:40,0 DA:47,1 -DA:48,1 -DA:49,1 +DA:48,0 +DA:49,0 LF:17 -LH:13 +LH:11 BRF:0 BRH:0 end_of_record @@ -268,6 +277,27 @@ BRF:0 BRH:0 end_of_record TN: +SF:controllers\user.controller.js +FN:7,(anonymous_0) +FN:9,(anonymous_1) +FN:10,(anonymous_2) +FNF:3 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +DA:1,1 +DA:2,1 +DA:7,1 +DA:8,0 +DA:9,0 +DA:11,0 +LF:6 +LH:3 +BRF:0 +BRH:0 +end_of_record +TN: SF:database\index.js FN:25,(anonymous_0) FN:29,setRunValidators @@ -316,35 +346,44 @@ TN: SF:datalayer\mongo.js FN:2,(anonymous_0) FN:10,(anonymous_1) -FN:15,(anonymous_2) -FN:16,(anonymous_3) -FN:25,(anonymous_4) -FN:34,(anonymous_5) -FN:41,(anonymous_6) -FN:48,(anonymous_7) -FN:51,(anonymous_8) -FNF:9 +FN:16,(anonymous_2) +FN:17,(anonymous_3) +FN:23,(anonymous_4) +FN:28,(anonymous_5) +FN:29,(anonymous_6) +FN:38,(anonymous_7) +FN:48,(anonymous_8) +FN:55,(anonymous_9) +FN:62,(anonymous_10) +FN:66,(anonymous_11) +FNF:12 FNH:2 -FNDA:2,(anonymous_0) +FNDA:3,(anonymous_0) FNDA:0,(anonymous_1) FNDA:0,(anonymous_2) FNDA:0,(anonymous_3) FNDA:0,(anonymous_4) -FNDA:1,(anonymous_5) +FNDA:0,(anonymous_5) FNDA:0,(anonymous_6) FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -DA:4,2 +FNDA:2,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +DA:4,3 DA:11,0 -DA:16,0 DA:17,0 -DA:26,0 -DA:35,1 -DA:42,0 -DA:49,0 -DA:51,0 -DA:56,1 -LF:10 +DA:18,0 +DA:24,0 +DA:29,0 +DA:30,0 +DA:39,0 +DA:49,2 +DA:56,0 +DA:63,0 +DA:67,0 +DA:72,1 +LF:13 LH:3 BRF:0 BRH:0 @@ -353,10 +392,12 @@ TN: SF:middleware\auth\authJwt.js FN:4,(anonymous_0) FN:12,(anonymous_1) -FNF:2 -FNH:0 +FN:26,(anonymous_2) +FNF:3 +FNH:1 FNDA:0,(anonymous_0) FNDA:0,(anonymous_1) +FNDA:1,(anonymous_2) DA:1,1 DA:4,1 DA:5,0 @@ -370,17 +411,24 @@ DA:19,0 DA:20,0 DA:21,0 DA:22,0 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,0 +DA:34,1 DA:37,1 -LF:14 -LH:3 +LF:19 +LH:7 BRDA:5,0,0,0 BRDA:5,0,1,0 BRDA:5,1,0,0 BRDA:5,1,1,0 BRDA:13,2,0,0 BRDA:13,2,1,0 -BRF:6 -BRH:0 +BRDA:28,3,0,0 +BRDA:28,3,1,1 +BRF:8 +BRH:1 end_of_record TN: SF:models\bill.model.js @@ -481,3 +529,18 @@ LH:8 BRF:0 BRH:0 end_of_record +TN: +SF:routes\user.routes.js +FNF:0 +FNH:0 +DA:1,1 +DA:2,1 +DA:3,1 +DA:6,1 +DA:9,1 +DA:11,1 +LF:6 +LH:6 +BRF:0 +BRH:0 +end_of_record diff --git a/server/middleware/auth/authJwt.js b/server/middleware/auth/authJwt.js index 07efcd4..aca540f 100644 --- a/server/middleware/auth/authJwt.js +++ b/server/middleware/auth/authJwt.js @@ -23,18 +23,18 @@ const checkJwtToken = (req, res, next) => { }); }; -// const isOperator = (req, res, next) => { -// const type = req.type; -// if (type !== "Toll Operator") { -// return res.status(403).send({ -// message: -// "Unauthorized: You not do have permission to view this page.", -// }); -// } -// return next(); -// }; +const isOperator = (req, res, next) => { + const type = req.type; + if (type !== "Toll Operator") { + return res.status(403).send({ + message: + "Unauthorized: You not do have permission to view this page.", + }); + } + return next(); +}; module.exports = { - checkJwtToken - //isOperator, + checkJwtToken, + isOperator, }; diff --git a/server/routes/user.routes.js b/server/routes/user.routes.js index b9adb37..18c3768 100644 --- a/server/routes/user.routes.js +++ b/server/routes/user.routes.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { checkJwtToken } = require("../middleware/auth/authJwt"); +const { checkJwtToken, isOperator } = require("../middleware/auth/authJwt"); // Get the Bill controller const userController = require("../controllers/user.controller"); // Get All Users -router.get("/", checkJwtToken, userController.getAllUsers); +router.get("/", checkJwtToken, isOperator, userController.getAllUsers); module.exports = router; diff --git a/server/test/integration/user.controller.test.js b/server/test/integration/user.controller.test.js new file mode 100644 index 0000000..7f95a4f --- /dev/null +++ b/server/test/integration/user.controller.test.js @@ -0,0 +1,73 @@ +let chai = require("chai"); +let chaiHttp = require("chai-http"); +const { ListIndexesCursor } = require("mongoose/node_modules/mongodb"); +let server = require("../../app"); +let should = chai.should(); +chai.use(chaiHttp); + +before(function (done) { + chai.request(server) + .post("/auth/login") + .send({ + email: "operator@email.com", + password: "test1", + }) + .end((err, res) => { + authCookie = res.headers["set-cookie"].pop().split(";")[0]; + authCookieSig = res.headers["set-cookie"].pop().split(";")[0]; + done(); + }); +}); + +describe("Testing /user paths", () => { + it("Should get all users", (done) => { + // Arrange + const url = "/user/"; + // Act + chai.request(server) + .get(url) + .set("Cookie", authCookie + "; " + authCookieSig) + .end((err, res) => { + // Assert + res.should.have.status(200); + res.should.be.a("object"); + + done(); + }); + }); +}); + +describe("Testing /user paths", () => { + before(function (done) { + chai.request(server) + .post("/auth/login") + .send({ + email: "test@email.com", + password: "test1", + }) + .end((err, res) => { + authCookie = res.headers["set-cookie"].pop().split(";")[0]; + authCookieSig = res.headers["set-cookie"].pop().split(";")[0]; + done(); + }); + }); + + it("Should not get all users", (done) => { + // Arrange + const url = "/user/"; + // Act + chai.request(server) + .get(url) + .set("Cookie", authCookie + "; " + authCookieSig) + .end((err, res) => { + // Assert + res.should.have.status(403); + res.should.be.a("object"); + res.body.message.should.be.eql( + "Unauthorized: You not do have permission to view this page." + ); + + done(); + }); + }); +}); diff --git a/server/test/unit/auth.test.js b/server/test/unit/auth.test.js new file mode 100644 index 0000000..17cc680 --- /dev/null +++ b/server/test/unit/auth.test.js @@ -0,0 +1,58 @@ +let chai = require("chai"); +const { isOperator } = require("../../middleware/auth/authJwt"); +let should = chai.should(); +let expect = chai.expect; + +describe("Testing auth functions", () => { + it("Testing isOperator with user Driver", (done) => { + // Arrange + let called = false; + let res = { + send: function (response) { + expect(response.message).to.be.equal( + "Unauthorized: You not do have permission to view this page." + ); + }, + status: function () { + return this; + }, + }; + let next = function () { + called = true; + }; + + // Act + isOperator({ type: "Driver" }, res, next); + + // Assert + expect(called).to.be.false; + + done(); + }); + + it("Testing isOperator with user Toll Operator", (done) => { + // Arrange + let called = false; + let res = { + send: function (response) { + expect(response.message).to.be.equal( + "Unauthorized: You not do have permission to view this page." + ); + }, + status: function () { + return this; + }, + }; + let next = function () { + called = true; + }; + + // Act + isOperator({ type: "Toll Operator" }, res, next); + + // Assert + expect(called).to.be.true; + + done(); + }); +}); From fd64b73e9e5cec193ce36962bf68baba07a169ab Mon Sep 17 00:00:00 2001 From: Lenton99 <49190812+Lenton99@users.noreply.github.com> Date: Thu, 10 Feb 2022 13:00:24 +0000 Subject: [PATCH 3/9] HT-29 Fixed code smells --- server/test/integration/user.controller.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/test/integration/user.controller.test.js b/server/test/integration/user.controller.test.js index 7f95a4f..23723e8 100644 --- a/server/test/integration/user.controller.test.js +++ b/server/test/integration/user.controller.test.js @@ -5,6 +5,9 @@ let server = require("../../app"); let should = chai.should(); chai.use(chaiHttp); +let authCookie; +let authCookieSig; + before(function (done) { chai.request(server) .post("/auth/login") From 90c40e96993b8f66b4cb3f72cd16904f5c3db9d3 Mon Sep 17 00:00:00 2001 From: Lenton99 <49190812+Lenton99@users.noreply.github.com> Date: Thu, 10 Feb 2022 13:10:18 +0000 Subject: [PATCH 4/9] HT-29 Added console log --- server/.nyc_output/processinfo/index.json | 2 +- server/business/user.business.js | 1 + server/coverage/lcov.info | 334 +++++++++++----------- 3 files changed, 169 insertions(+), 168 deletions(-) diff --git a/server/.nyc_output/processinfo/index.json b/server/.nyc_output/processinfo/index.json index 39c296d..34001e0 100644 --- a/server/.nyc_output/processinfo/index.json +++ b/server/.nyc_output/processinfo/index.json @@ -1 +1 @@ -{"processes":{"e285f173-7f01-4ca1-be5b-403c6759180b":{"parent":null,"children":[]}},"files":{"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\app.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\database\\index.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\config\\db.config.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\journey.model.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\bill.model.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\utilities.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\location.model.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\user.model.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\auth.routes.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\auth.controller.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\user.business.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\datalayer\\mongo.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\bill.routes.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\middleware\\auth\\authJwt.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\bill.controller.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\bill.business.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\user.routes.js":["e285f173-7f01-4ca1-be5b-403c6759180b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\user.controller.js":["e285f173-7f01-4ca1-be5b-403c6759180b"]},"externalIds":{}} \ No newline at end of file +{"processes":{"8dae436d-f72b-4a29-ad3b-73229128d647":{"parent":null,"children":[]}},"files":{"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\app.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\database\\index.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\config\\db.config.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\journey.model.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\bill.model.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\utilities.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\location.model.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\user.model.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\auth.routes.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\auth.controller.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\user.business.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\datalayer\\mongo.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\bill.routes.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\middleware\\auth\\authJwt.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\bill.controller.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\bill.business.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\user.routes.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\user.controller.js":["8dae436d-f72b-4a29-ad3b-73229128d647"]},"externalIds":{}} \ No newline at end of file diff --git a/server/business/user.business.js b/server/business/user.business.js index 446bfc3..f888810 100644 --- a/server/business/user.business.js +++ b/server/business/user.business.js @@ -115,6 +115,7 @@ module.exports = class UserBusiness { }; return this.dataLayer.findAll(filter).catch((error) => { + console.log(error); throw httpError(500, error.message); }); } diff --git a/server/coverage/lcov.info b/server/coverage/lcov.info index bc25b2d..ebe1ae7 100644 --- a/server/coverage/lcov.info +++ b/server/coverage/lcov.info @@ -44,24 +44,24 @@ SF:utilities.js FN:6,(anonymous_0) FN:10,(anonymous_1) FNF:2 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) +FNH:2 +FNDA:1,(anonymous_0) +FNDA:3,(anonymous_1) DA:1,1 DA:2,1 DA:3,1 DA:5,1 -DA:7,0 -DA:11,0 -DA:12,0 +DA:7,1 +DA:11,3 +DA:12,3 DA:14,0 DA:17,1 LF:9 -LH:5 -BRDA:11,0,0,0 +LH:8 +BRDA:11,0,0,3 BRDA:11,0,1,0 BRF:2 -BRH:0 +BRH:1 end_of_record TN: SF:business\bill.business.js @@ -73,36 +73,36 @@ FN:34,(anonymous_4) FN:42,(anonymous_5) FN:47,(anonymous_6) FNF:7 -FNH:1 +FNH:5 FNDA:1,(anonymous_0) -FNDA:0,(anonymous_1) +FNDA:5,(anonymous_1) FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) +FNDA:1,(anonymous_3) FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) +FNDA:2,(anonymous_5) +FNDA:1,(anonymous_6) DA:1,1 DA:2,1 DA:3,1 DA:4,1 DA:6,1 DA:9,1 -DA:16,0 -DA:22,0 +DA:16,5 +DA:22,5 DA:25,0 -DA:32,0 +DA:32,1 DA:35,0 -DA:43,0 -DA:46,0 -DA:47,0 +DA:43,2 +DA:46,2 +DA:47,1 LF:14 -LH:6 -BRDA:19,0,0,0 -BRDA:19,0,1,0 -BRDA:20,1,0,0 -BRDA:20,1,1,0 +LH:12 +BRDA:19,0,0,5 +BRDA:19,0,1,4 +BRDA:20,1,0,5 +BRDA:20,1,1,4 BRF:4 -BRH:0 +BRH:4 end_of_record TN: SF:business\user.business.js @@ -121,21 +121,21 @@ FN:110,(anonymous_11) FN:117,(anonymous_12) FN:126,isUserDataValid FNF:14 -FNH:5 +FNH:12 FNDA:2,(anonymous_0) -FNDA:2,(anonymous_1) -FNDA:2,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:2,(anonymous_8) -FNDA:2,(anonymous_9) +FNDA:5,(anonymous_1) +FNDA:5,(anonymous_2) +FNDA:1,(anonymous_3) +FNDA:4,(anonymous_4) +FNDA:3,(anonymous_5) +FNDA:4,(anonymous_6) +FNDA:2,(anonymous_7) +FNDA:5,(anonymous_8) +FNDA:5,(anonymous_9) FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) +FNDA:1,(anonymous_11) FNDA:0,(anonymous_12) -FNDA:0,isUserDataValid +FNDA:4,isUserDataValid DA:1,1 DA:2,1 DA:3,1 @@ -143,47 +143,47 @@ DA:4,1 DA:5,1 DA:7,1 DA:10,2 -DA:17,2 -DA:19,2 -DA:24,2 -DA:25,0 -DA:31,2 -DA:43,2 -DA:51,0 -DA:59,0 -DA:65,0 -DA:73,0 -DA:74,0 -DA:76,0 -DA:83,0 -DA:84,0 -DA:85,0 -DA:86,0 -DA:87,0 +DA:17,5 +DA:19,5 +DA:24,5 +DA:25,1 +DA:31,4 +DA:43,4 +DA:51,1 +DA:59,4 +DA:65,3 +DA:73,4 +DA:74,1 +DA:76,3 +DA:83,3 +DA:84,2 +DA:85,1 +DA:86,1 +DA:87,1 DA:88,0 -DA:96,2 -DA:100,2 +DA:96,5 +DA:100,5 DA:103,0 -DA:111,0 -DA:117,0 +DA:111,1 +DA:117,1 DA:118,0 -DA:127,0 +DA:127,4 LF:32 -LH:14 -BRDA:24,0,0,0 -BRDA:24,0,1,2 -BRDA:73,1,0,0 -BRDA:73,1,1,0 -BRDA:84,2,0,0 -BRDA:84,2,1,0 -BRDA:86,3,0,0 +LH:29 +BRDA:24,0,0,1 +BRDA:24,0,1,4 +BRDA:73,1,0,1 +BRDA:73,1,1,3 +BRDA:84,2,0,1 +BRDA:84,2,1,1 +BRDA:86,3,0,1 BRDA:86,3,1,0 -BRDA:127,4,0,0 -BRDA:127,4,1,0 -BRDA:127,4,2,0 -BRDA:127,4,3,0 +BRDA:127,4,0,4 +BRDA:127,4,1,4 +BRDA:127,4,2,3 +BRDA:127,4,3,3 BRF:12 -BRH:1 +BRH:11 end_of_record TN: SF:config\db.config.js @@ -205,33 +205,33 @@ FN:34,(anonymous_4) FN:39,(anonymous_5) FN:47,(anonymous_6) FNF:7 -FNH:2 -FNDA:2,(anonymous_0) -FNDA:2,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) +FNH:7 +FNDA:5,(anonymous_0) +FNDA:4,(anonymous_1) +FNDA:1,(anonymous_2) +FNDA:4,(anonymous_3) +FNDA:1,(anonymous_4) +FNDA:3,(anonymous_5) +FNDA:1,(anonymous_6) DA:1,1 DA:2,1 DA:7,1 -DA:8,2 -DA:11,2 -DA:12,2 -DA:13,2 -DA:14,2 -DA:16,2 -DA:24,0 +DA:8,5 +DA:11,4 +DA:12,4 +DA:13,4 +DA:14,4 +DA:16,4 +DA:24,1 DA:31,1 -DA:32,0 -DA:35,0 -DA:40,0 +DA:32,4 +DA:35,1 +DA:40,3 DA:47,1 -DA:48,0 -DA:49,0 +DA:48,1 +DA:49,1 LF:17 -LH:11 +LH:17 BRF:0 BRH:0 end_of_record @@ -247,32 +247,32 @@ FN:27,(anonymous_6) FN:29,(anonymous_7) FN:30,(anonymous_8) FNF:9 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) +FNH:7 +FNDA:5,(anonymous_0) +FNDA:5,(anonymous_1) FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) +FNDA:1,(anonymous_3) +FNDA:1,(anonymous_4) FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) +FNDA:2,(anonymous_6) +FNDA:1,(anonymous_7) +FNDA:1,(anonymous_8) DA:1,1 DA:2,1 DA:7,1 -DA:8,0 -DA:9,0 +DA:8,5 +DA:9,5 DA:11,0 DA:18,1 -DA:19,0 -DA:20,0 +DA:19,1 +DA:20,1 DA:21,0 DA:27,1 -DA:28,0 -DA:29,0 -DA:30,0 +DA:28,2 +DA:29,1 +DA:30,1 LF:14 -LH:5 +LH:12 BRF:0 BRH:0 end_of_record @@ -282,18 +282,18 @@ FN:7,(anonymous_0) FN:9,(anonymous_1) FN:10,(anonymous_2) FNF:3 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) +FNH:2 +FNDA:1,(anonymous_0) +FNDA:1,(anonymous_1) FNDA:0,(anonymous_2) DA:1,1 DA:2,1 DA:7,1 -DA:8,0 -DA:9,0 +DA:8,1 +DA:9,1 DA:11,0 LF:6 -LH:3 +LH:5 BRF:0 BRH:0 end_of_record @@ -357,34 +357,34 @@ FN:55,(anonymous_9) FN:62,(anonymous_10) FN:66,(anonymous_11) FNF:12 -FNH:2 +FNH:12 FNDA:3,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:2,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) +FNDA:5,(anonymous_1) +FNDA:5,(anonymous_2) +FNDA:5,(anonymous_3) +FNDA:1,(anonymous_4) +FNDA:1,(anonymous_5) +FNDA:1,(anonymous_6) +FNDA:1,(anonymous_7) +FNDA:5,(anonymous_8) +FNDA:3,(anonymous_9) +FNDA:2,(anonymous_10) +FNDA:1,(anonymous_11) DA:4,3 -DA:11,0 -DA:17,0 -DA:18,0 -DA:24,0 -DA:29,0 -DA:30,0 -DA:39,0 -DA:49,2 -DA:56,0 -DA:63,0 -DA:67,0 +DA:11,5 +DA:17,5 +DA:18,5 +DA:24,1 +DA:29,1 +DA:30,1 +DA:39,1 +DA:49,5 +DA:56,3 +DA:63,2 +DA:67,1 DA:72,1 LF:13 -LH:3 +LH:13 BRF:0 BRH:0 end_of_record @@ -394,41 +394,41 @@ FN:4,(anonymous_0) FN:12,(anonymous_1) FN:26,(anonymous_2) FNF:3 -FNH:1 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:1,(anonymous_2) +FNH:3 +FNDA:14,(anonymous_0) +FNDA:10,(anonymous_1) +FNDA:4,(anonymous_2) DA:1,1 DA:4,1 -DA:5,0 -DA:6,0 -DA:10,0 -DA:12,0 -DA:13,0 +DA:5,14 +DA:6,4 +DA:10,10 +DA:12,10 +DA:13,10 DA:14,0 -DA:18,0 -DA:19,0 -DA:20,0 -DA:21,0 -DA:22,0 +DA:18,10 +DA:19,10 +DA:20,10 +DA:21,10 +DA:22,10 DA:26,1 -DA:27,1 -DA:28,1 -DA:29,0 -DA:34,1 +DA:27,4 +DA:28,4 +DA:29,2 +DA:34,2 DA:37,1 LF:19 -LH:7 -BRDA:5,0,0,0 -BRDA:5,0,1,0 -BRDA:5,1,0,0 -BRDA:5,1,1,0 +LH:18 +BRDA:5,0,0,4 +BRDA:5,0,1,10 +BRDA:5,1,0,14 +BRDA:5,1,1,14 BRDA:13,2,0,0 -BRDA:13,2,1,0 -BRDA:28,3,0,0 -BRDA:28,3,1,1 +BRDA:13,2,1,10 +BRDA:28,3,0,2 +BRDA:28,3,1,2 BRF:8 -BRH:1 +BRH:7 end_of_record TN: SF:models\bill.model.js From fbf99f87aa8db6ef1396a4791ed3f6c2471ebff4 Mon Sep 17 00:00:00 2001 From: Lenton99 <49190812+Lenton99@users.noreply.github.com> Date: Thu, 10 Feb 2022 13:16:53 +0000 Subject: [PATCH 5/9] HT-29 Added fix to the get all users test --- server/.nyc_output/processinfo/index.json | 2 +- server/business/user.business.js | 1 - server/coverage/lcov.info | 15 ++++++++------- server/test/integration/user.controller.test.js | 4 +++- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/server/.nyc_output/processinfo/index.json b/server/.nyc_output/processinfo/index.json index 34001e0..7e7c6cb 100644 --- a/server/.nyc_output/processinfo/index.json +++ b/server/.nyc_output/processinfo/index.json @@ -1 +1 @@ -{"processes":{"8dae436d-f72b-4a29-ad3b-73229128d647":{"parent":null,"children":[]}},"files":{"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\app.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\database\\index.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\config\\db.config.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\journey.model.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\bill.model.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\utilities.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\location.model.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\user.model.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\auth.routes.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\auth.controller.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\user.business.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\datalayer\\mongo.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\bill.routes.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\middleware\\auth\\authJwt.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\bill.controller.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\bill.business.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\user.routes.js":["8dae436d-f72b-4a29-ad3b-73229128d647"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\user.controller.js":["8dae436d-f72b-4a29-ad3b-73229128d647"]},"externalIds":{}} \ No newline at end of file +{"processes":{"076bf10b-2570-48ae-ba89-4c94269b643b":{"parent":null,"children":[]}},"files":{"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\app.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\database\\index.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\config\\db.config.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\journey.model.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\bill.model.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\utilities.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\location.model.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\models\\user.model.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\auth.routes.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\auth.controller.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\user.business.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\datalayer\\mongo.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\bill.routes.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\middleware\\auth\\authJwt.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\bill.controller.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\business\\bill.business.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\routes\\user.routes.js":["076bf10b-2570-48ae-ba89-4c94269b643b"],"E:\\UniWork\\CSSD\\CSSD-Assignment\\server\\controllers\\user.controller.js":["076bf10b-2570-48ae-ba89-4c94269b643b"]},"externalIds":{}} \ No newline at end of file diff --git a/server/business/user.business.js b/server/business/user.business.js index f888810..446bfc3 100644 --- a/server/business/user.business.js +++ b/server/business/user.business.js @@ -115,7 +115,6 @@ module.exports = class UserBusiness { }; return this.dataLayer.findAll(filter).catch((error) => { - console.log(error); throw httpError(500, error.message); }); } diff --git a/server/coverage/lcov.info b/server/coverage/lcov.info index ebe1ae7..1c6967b 100644 --- a/server/coverage/lcov.info +++ b/server/coverage/lcov.info @@ -119,7 +119,7 @@ FN:98,(anonymous_9) FN:102,(anonymous_10) FN:110,(anonymous_11) FN:117,(anonymous_12) -FN:126,isUserDataValid +FN:127,isUserDataValid FNF:14 FNH:12 FNDA:2,(anonymous_0) @@ -167,8 +167,9 @@ DA:103,0 DA:111,1 DA:117,1 DA:118,0 -DA:127,4 -LF:32 +DA:119,0 +DA:128,4 +LF:33 LH:29 BRDA:24,0,0,1 BRDA:24,0,1,4 @@ -178,10 +179,10 @@ BRDA:84,2,0,1 BRDA:84,2,1,1 BRDA:86,3,0,1 BRDA:86,3,1,0 -BRDA:127,4,0,4 -BRDA:127,4,1,4 -BRDA:127,4,2,3 -BRDA:127,4,3,3 +BRDA:128,4,0,4 +BRDA:128,4,1,4 +BRDA:128,4,2,3 +BRDA:128,4,3,3 BRF:12 BRH:11 end_of_record diff --git a/server/test/integration/user.controller.test.js b/server/test/integration/user.controller.test.js index 23723e8..386d7ac 100644 --- a/server/test/integration/user.controller.test.js +++ b/server/test/integration/user.controller.test.js @@ -25,7 +25,9 @@ before(function (done) { describe("Testing /user paths", () => { it("Should get all users", (done) => { // Arrange - const url = "/user/"; + const limit = "10"; + const offset = "0"; + const url = `/user?limit=${limit}&offset=${offset}`; // Act chai.request(server) .get(url) From 10cf510f4619d5bc6620ef7eb95f9be8bb96a435 Mon Sep 17 00:00:00 2001 From: Lenton99 <49190812+Lenton99@users.noreply.github.com> Date: Thu, 10 Feb 2022 16:57:57 +0000 Subject: [PATCH 6/9] HT-29 Review comments --- server/datalayer/mongo.js | 4 +++- server/middleware/auth/authJwt.js | 2 +- server/routes/user.routes.js | 2 +- ui/src/views/MyBills.vue | 32 ++++++++++++++++++------------- ui/src/views/ViewUsers.vue | 9 +++++++-- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/server/datalayer/mongo.js b/server/datalayer/mongo.js index 3c9813a..6bc76a2 100644 --- a/server/datalayer/mongo.js +++ b/server/datalayer/mongo.js @@ -19,7 +19,9 @@ class DataLayer { }); }); } - + /** + * Find all users in the database. + */ async findAll(filter) { return this.model .find(JSON.parse(JSON.stringify(filter))) diff --git a/server/middleware/auth/authJwt.js b/server/middleware/auth/authJwt.js index aca540f..0b8732e 100644 --- a/server/middleware/auth/authJwt.js +++ b/server/middleware/auth/authJwt.js @@ -22,7 +22,7 @@ const checkJwtToken = (req, res, next) => { return next(); }); }; - +// Check if the active user is an operator const isOperator = (req, res, next) => { const type = req.type; if (type !== "Toll Operator") { diff --git a/server/routes/user.routes.js b/server/routes/user.routes.js index 18c3768..1f326a0 100644 --- a/server/routes/user.routes.js +++ b/server/routes/user.routes.js @@ -2,7 +2,7 @@ const router = express.Router(); const { checkJwtToken, isOperator } = require("../middleware/auth/authJwt"); -// Get the Bill controller +// Get the user controller const userController = require("../controllers/user.controller"); // Get All Users diff --git a/ui/src/views/MyBills.vue b/ui/src/views/MyBills.vue index e1c5076..ba34710 100644 --- a/ui/src/views/MyBills.vue +++ b/ui/src/views/MyBills.vue @@ -1,7 +1,7 @@