From 77a4c28757f3a7cb69ae1cf021f8e3e2eee63542 Mon Sep 17 00:00:00 2001 From: ruihildt Date: Fri, 2 Aug 2019 01:18:56 +0200 Subject: [PATCH] Fix dailyAverages query on session update & test - Add dailyAverages seeds - Start implementing testing --- .eslintrc.js | 32 ++++---- data/dbConfig.js | 2 +- ...eateUsersSessionsAndDailyAveragesTables.js | 3 +- data/seeds/addDailyAverages.js | 77 ++++++++++++++++++ data/sleep-tracker.db3 | Bin 36864 -> 40960 bytes package.json | 5 +- services/dailyAverages/dailyAveragesModel.js | 4 +- services/dailyAverages/dailyAveragesRouter.js | 2 +- services/sessions/sessionsModel.js | 32 +++++++- services/sessions/sessionsRouter.js | 1 + services/users/users.spec.js | 45 ++++++++++ services/users/usersRouter.js | 1 + 12 files changed, 180 insertions(+), 24 deletions(-) create mode 100644 data/seeds/addDailyAverages.js create mode 100644 services/users/users.spec.js diff --git a/.eslintrc.js b/.eslintrc.js index 5f63b0c..71a753e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,17 +1,19 @@ module.exports = { - "env": { - "commonjs": true, - "es6": true, - "node": true - }, - "extends": "eslint:recommended", - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly" - }, - "parserOptions": { - "ecmaVersion": 2018 - }, - "rules": { - } + "env": { + "commonjs": true, + "es6": true, + "node": true, + jest: true + }, + "extends": "eslint:recommended", + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2018 + }, + "rules": { + semi: 1 + } }; \ No newline at end of file diff --git a/data/dbConfig.js b/data/dbConfig.js index 97968b8..93af946 100644 --- a/data/dbConfig.js +++ b/data/dbConfig.js @@ -3,6 +3,6 @@ require("dotenv").config(); const knex = require('knex'); const config = require('../knexfile'); -const environment = process.env.DB_ENV || 'development'; +const environment = process.env.DB_ENV || 'test'; module.exports = knex(config[environment]); diff --git a/data/migrations/01-createUsersSessionsAndDailyAveragesTables.js b/data/migrations/01-createUsersSessionsAndDailyAveragesTables.js index edaa281..7921b14 100644 --- a/data/migrations/01-createUsersSessionsAndDailyAveragesTables.js +++ b/data/migrations/01-createUsersSessionsAndDailyAveragesTables.js @@ -52,6 +52,7 @@ exports.up = function(knex) { .unsigned() .notNullable() .references('sessions.id') + .unique() .onUpdate('CASCADE') .onDelete('CASCADE'); tbl @@ -66,7 +67,7 @@ exports.up = function(knex) { .unsigned(); tbl .float('average_mood'); - }) + }); }; exports.down = function(knex) { diff --git a/data/seeds/addDailyAverages.js b/data/seeds/addDailyAverages.js new file mode 100644 index 0000000..5a963e3 --- /dev/null +++ b/data/seeds/addDailyAverages.js @@ -0,0 +1,77 @@ +exports.seed = function(knex) { + return knex('dailyAverages').truncate() + .then(function () { + return knex('dailyAverages').insert([ + { + "id": 1, + "session_id": 1, + "user_id": 1, + "sleep_duration": 9, + "average_mood": 3 + }, + { + "id": 2, + "session_id": 2, + "user_id": 1, + "sleep_duration": 7.67, + "average_mood": 4 + }, + { + "id": 3, + "session_id": 3, + "user_id": 1, + "sleep_duration": 7.67, + "average_mood": 4 + }, + { + "id": 4, + "session_id": 4, + "user_id": 1, + "sleep_duration": 6.67, + "average_mood": 3 + }, + { + "id": 5, + "session_id": 5, + "user_id": 1, + "sleep_duration": 9.5, + "average_mood": 4 + }, + { + "id": 6, + "session_id": 6, + "user_id": 1, + "sleep_duration": 7.5, + "average_mood": 4 + }, + { + "id": 7, + "session_id": 7, + "user_id": 1, + "sleep_duration": 8.58, + "average_mood": 2.67 + }, + { + "id": 8, + "session_id": 8, + "user_id": 1, + "sleep_duration": 8.42, + "average_mood": 4.33 + }, + { + "id": 9, + "session_id": 9, + "user_id": 1, + "sleep_duration": 6.25, + "average_mood": 3.33 + }, + { + "id": 10, + "session_id": 10, + "user_id": 1, + "sleep_duration": 11.25, + "average_mood": 3.67 + } + ]); + }); +}; diff --git a/data/sleep-tracker.db3 b/data/sleep-tracker.db3 index 559357f1ed9dad86e9842faa618e85cd62f191f9..00479014f5bec2d7df97a9168af96b1a6f61c286 100644 GIT binary patch delta 914 zcmah|OH30{6n$@I`gsGL+bUR5gc^uK)H<|Kerl!#seCI`q$VV7X@`D<@);n=LLkPt zR8v>#!UTh10g1A~jUmS1MqL;Qt_&CxjV6c-jSCmP>43(SlbMrw=iGbdp7%0S_n4_= z=Eik`A6Jp)9$%j|u1>6jSp*;9H9UvMFuQ0m--7gmqvE zx4RXdu&fo2D)O+x>}J>__+m;P5B4Ww!{HG+x58L4TS3w{gq%krHfK>^1_B7?AwV5l zfb%nYl|(d=`!$>+xET}@-6zs2io=tz13a&>RO-zg5( z+51~Zy8P*RUx9n#bXRq+JJJvpSC(e%DY>Q#=yr42$O-y>%XE zOUgCe>TYigt0%?4I)ZihwrCOGK>A70SnQDc6nkW#pApz15)1dp+iR_Q6Twf|q}A`i zPH1Yiz`+>U+)SyuXS~26cnP;52IYW-SHc}3F1Q4aX8mMZ%d92E|+ ztooQ(NpG82S>sHvOrF}yLluG_@PTgoGAzJdxB^LNhbn5250h42k1#P9cVERDg5Vboy9J+V;CJwrhJFDnH0m7G>U1o|Jg*`lDjJO{8VoAx^(yKzH5{kDv#g2? I!?J|@1|WIix&QzG delta 1188 zcmZXTPfXiZ9LN19A$gAdeuM%Ug@krxQm1yY^M|zbL=C0E6bPjO79lYMUjC2(iNgpv zkXAkPxNcrA`_t|)wQ40e6iwQ8sHRHmx=QN~6_=i>YEsq1y6rHj`*WE63@U2;Gw(b0%MNCl$@1aruZwkbG?f5(b&N$BFg@nq2U zmbdX;w6%@?XrXE2UT3Uz`1x05YqAq=Q1A>M!F~7+ZkW@qfN@=HiU_=e_0zhh>)EA6 zy%Vvlk6zKWlJ00?*du6RQLD@pvgwjqw!DvKyOD7jH{X`%MgW##@FoQtc++ZT=v7=B zcQjCM`7Suq>Z}&+&FjIrr2^@9h1IT*)D@0SW~5LxcCJuKPejV8YD$a^YH~4hDnF(r zlLHk!Q5eaT#EB_Yp4ZZ+m;2&VF|&YMyP=Uip^=@?a;`YGGB+*`NMfIOP7~$+p2TD! zm#}rO3y|s)&6)@R)WiusCm;12w0HFM)O!FV#` zR(3bcVJ_`WYu9#*Wz7MvH4xsZp26%PWDV>*bMUK~`Iv&2@YrfwUg-fCFP7Z%Q7f#O zgjp#ZNnu=U3whl-8v#zF;Ai+0(hvn2Kg6Hm431%k@KX3e_*j?`j`Dx=_jrSUkAKJW zkLO3vCmz)ktWhY*g@D%xSz0%@C`yAVJl$^ zVKd=A!X`p5VIv_BVnTtCHyPqNkDEe*KqH!Aw;by?Y2!)FZ#<}-2=Mr+b?P6&*YG)9 zgdB{)ap;5w{2P9Xe==8n3)k9cBAb|Ee!nPyhe` diff --git a/package.json b/package.json index 764e61b..f628dc1 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,10 @@ "main": "index.js", "scripts": { "start": "node index.js", - "test": "node test" + "test": "jest --watch" + }, + "jest": { + "testEnvironment": "node" }, "repository": { "type": "git", diff --git a/services/dailyAverages/dailyAveragesModel.js b/services/dailyAverages/dailyAveragesModel.js index 89edeb8..b9929f2 100644 --- a/services/dailyAverages/dailyAveragesModel.js +++ b/services/dailyAverages/dailyAveragesModel.js @@ -2,9 +2,9 @@ const db = require('../../data/dbConfig'); module.exports = { getDailyAverages -} +}; function getDailyAverages(id) { return db('dailyAverages') - .where({ id }); + .where({user_id : id }); } \ No newline at end of file diff --git a/services/dailyAverages/dailyAveragesRouter.js b/services/dailyAverages/dailyAveragesRouter.js index 892d357..1f4dfd0 100644 --- a/services/dailyAverages/dailyAveragesRouter.js +++ b/services/dailyAverages/dailyAveragesRouter.js @@ -4,7 +4,7 @@ const router = require('express').Router(); const Averages = require('./dailyAveragesModel'); router.get('/:id/averages', (req, res) => { - Averages.getDailyAverages(req.params.id) + Averages.getDailyAverages(req.params.id) .then(averages => { res.status(200).json(averages); }) diff --git a/services/sessions/sessionsModel.js b/services/sessions/sessionsModel.js index eb272fd..3da984c 100644 --- a/services/sessions/sessionsModel.js +++ b/services/sessions/sessionsModel.js @@ -12,7 +12,7 @@ async function addSession(session) { .insert(session); const newSession = await findSessionById(id) - computeSession(newSession); + addDailyAverage(newSession); return newSession; } @@ -33,7 +33,7 @@ async function updateSession(id, changes) { .where({ id }) .update(changes, '*'); const updatedSession = await findSessionById(id); - computeSession(updatedSession); + updateDailyAverage(id, updatedSession); return updatedSession; } @@ -43,7 +43,8 @@ async function removeSession(id) { .del(); } -async function computeSession(session) { +//TODO: Refactor code +async function addDailyAverage(session) { if ( session.bed_tiredness && session.day_mood && session.wake_mood) { // Calculate the sleep duration let date1 = new Date(session.bed_time); @@ -65,4 +66,29 @@ async function computeSession(session) { }) .catch(err => console.log(err)); } +} + +async function updateDailyAverage(id, session) { + if ( session.bed_tiredness && session.day_mood && session.wake_mood) { + // Calculate the sleep duration + let date1 = new Date(session.bed_time); + let date2 = new Date(session.wake_time); + let diffTime = Math.abs(date1.getTime() - date2.getTime()); + diffTime = diffTime/(1000*60*60); + let sleep_duration = Math.round( diffTime * 100) / 100; + + // Calculate the average mood + let average_mood = (session.bed_tiredness + session.wake_mood + session.day_mood) / 3; + let new_average_mood = Math.round( average_mood * 100) / 100; + + await db('dailyAverages') + .where({ session_id: id }) + .update({ + session_id: session.id, + user_id: session.user_id, + sleep_duration: sleep_duration, + average_mood: new_average_mood, + }, '*') + .catch(err => console.log(err)); + } } \ No newline at end of file diff --git a/services/sessions/sessionsRouter.js b/services/sessions/sessionsRouter.js index fa3a7fd..8ecdf6b 100644 --- a/services/sessions/sessionsRouter.js +++ b/services/sessions/sessionsRouter.js @@ -2,6 +2,7 @@ const router = require('express').Router(); const Sessions = require('../sessions/sessionsModel'); +// TODO: add validation router.post('/sessions', (req, res) => { Sessions.addSession(req.body) .then(response => { diff --git a/services/users/users.spec.js b/services/users/users.spec.js new file mode 100644 index 0000000..4b36e38 --- /dev/null +++ b/services/users/users.spec.js @@ -0,0 +1,45 @@ +const db = require('../../data/dbConfig'); +const Users = require('./usersModel'); + +beforeEach(async () => { + await db('users').truncate(); +}); + +describe('Users.addUser', () => { + + it('is able to insert user to the db', async () => { + await Users.addUser({ + email: "gabetest@ls.com", + username: "gabetest", + password: "1234" + }); + await Users.addUser({ + email: "gabetest2@ls.com", + username: "gabetest2", + password: "1234" + }); + + let users = await Users.findUserById(2); + expect(users.username).toBe('gabetest2'); + }); + + // it('is only able to insert user as a string', async () => { + // let users = await Users.addUser({ username: 13 }); + + // let user = await Users.findUserById(1); + // expect(user.name).toBe('13'); + // }); +}); + +// describe('Users.remove', () => { +// it('is able to remove an user', async () => { +// await Users.insert({ name: 'dragon' }); +// await Users.insert({ name: 'phoenix' }); +// let users = await Users.get(); + +// users = await Users.remove(2); +// users = await Users.get(); +// expect(users).toHaveLength(1); +// expect(users[0].name).toBe('dragon'); +// }); +// }); \ No newline at end of file diff --git a/services/users/usersRouter.js b/services/users/usersRouter.js index e1240ee..67b4100 100644 --- a/services/users/usersRouter.js +++ b/services/users/usersRouter.js @@ -2,6 +2,7 @@ const router = require('express').Router(); const Users = require('../users/usersModel'); +// TODO: add validation router.get('/:id', (req, res) => { Users.findUserById(req.params.id) .then(users => {