Server: allow user to get its informations (/users/me)
authorChocobozzz <florian.bigard@gmail.com>
Fri, 5 Aug 2016 15:19:08 +0000 (17:19 +0200)
committerChocobozzz <florian.bigard@gmail.com>
Fri, 5 Aug 2016 15:19:08 +0000 (17:19 +0200)
server/controllers/api/v1/users.js
server/tests/api/checkParams.js
server/tests/api/users.js
server/tests/api/utils.js

index fdbcc3ff5bcea580619c0e885606c957c0ab04a9..d831a0de67d7c35a01711bd8e6f47b020ab806c1 100644 (file)
@@ -19,6 +19,7 @@ const Video = mongoose.model('Video')
 const router = express.Router()
 
 router.get('/', listUsers)
+router.get('/me', oAuth.authenticate, getUserInformation)
 
 router.post('/',
   oAuth.authenticate,
@@ -63,6 +64,14 @@ function createUser (req, res, next) {
   })
 }
 
+function getUserInformation (req, res, next) {
+  User.loadByUsername(res.locals.oauth.token.user.username, function (err, user) {
+    if (err) return next(err)
+
+    return res.json(user.toFormatedJSON())
+  })
+}
+
 function listUsers (req, res, next) {
   User.list(function (err, usersList) {
     if (err) return next(err)
index bd7227e9c2f7046687ea4aee1bdd3fd03bd931cf..8b49f5f36b87dac3fcd5dec4a70ee0668614e5b2 100644 (file)
@@ -504,6 +504,8 @@ describe('Test parameters validator', function () {
 
   describe('Of the users API', function () {
     const path = '/api/v1/users/'
+    let userId = null
+    let userAccessToken = null
 
     describe('When adding a new user', function () {
       it('Should fail with a too small username', function (done) {
@@ -580,19 +582,19 @@ describe('Test parameters validator', function () {
         utils.loginAndGetAccessToken(server, function (err, accessToken) {
           if (err) throw err
 
+          userAccessToken = accessToken
+
           const data = {
             username: 'user2',
             password: 'my super password'
           }
 
-          makePostBodyRequest(path, accessToken, data, done, 403)
+          makePostBodyRequest(path, userAccessToken, data, done, 403)
         })
       })
     })
 
     describe('When updating a user', function () {
-      let userId = null
-
       before(function (done) {
         utils.getUsersList(server.url, function (err, res) {
           if (err) throw err
@@ -607,7 +609,7 @@ describe('Test parameters validator', function () {
           password: 'bla'
         }
 
-        makePutBodyRequest(path + '/' + userId, server.accessToken, data, done)
+        makePutBodyRequest(path + userId, userAccessToken, data, done)
       })
 
       it('Should fail with a too long password', function (done) {
@@ -617,7 +619,7 @@ describe('Test parameters validator', function () {
                     'very very very very very very very very very very very very very very very very very very very very long'
         }
 
-        makePutBodyRequest(path + '/' + userId, server.accessToken, data, done)
+        makePutBodyRequest(path + userId, userAccessToken, data, done)
       })
 
       it('Should fail with an non authenticated user', function (done) {
@@ -625,7 +627,7 @@ describe('Test parameters validator', function () {
           password: 'my super password'
         }
 
-        makePutBodyRequest(path + '/' + userId, 'super token', data, done, 401)
+        makePutBodyRequest(path + userId, 'super token', data, done, 401)
       })
 
       it('Should succeed with the correct params', function (done) {
@@ -633,7 +635,25 @@ describe('Test parameters validator', function () {
           password: 'my super password'
         }
 
-        makePutBodyRequest(path + '/' + userId, server.accessToken, data, done, 204)
+        makePutBodyRequest(path + userId, userAccessToken, data, done, 204)
+      })
+    })
+
+    describe('When getting my information', function () {
+      it('Should fail with a non authenticated user', function (done) {
+        request(server.url)
+          .get(path + 'me')
+          .set('Authorization', 'Bearer faketoken')
+          .set('Accept', 'application/json')
+          .expect(401, done)
+      })
+
+      it('Should success with the correct parameters', function (done) {
+        request(server.url)
+          .get(path + 'me')
+          .set('Authorization', 'Bearer ' + userAccessToken)
+          .set('Accept', 'application/json')
+          .expect(200, done)
       })
     })
 
index c711d6b64c443be888eade57ac89e221162d32de..e1d4a8cf4c744e554d2614653225a8bba21b3b3c 100644 (file)
@@ -179,6 +179,19 @@ describe('Test users', function () {
     })
   })
 
+  it('Should be able to get the user informations', function (done) {
+    utils.getUserInformation(server.url, accessTokenUser, function (err, res) {
+      if (err) throw err
+
+      const user = res.body
+
+      expect(user.username).to.equal('user_1')
+      expect(user.id).to.exist
+
+      done()
+    })
+  })
+
   it('Should be able to upload a video with this user', function (done) {
     this.timeout(5000)
 
index f34b81e4a435e023c73873f16b0e7ccfac479515..0dc309328470026460c79f1b0cace36a6d27480b 100644 (file)
@@ -14,6 +14,7 @@ const testUtils = {
   getAllVideosListBy: getAllVideosListBy,
   getClient: getClient,
   getFriendsList: getFriendsList,
+  getUserInformation: getUserInformation,
   getUsersList: getUsersList,
   getVideo: getVideo,
   getVideosList: getVideosList,
@@ -93,6 +94,18 @@ function getClient (url, end) {
     .end(end)
 }
 
+function getUserInformation (url, accessToken, end) {
+  const path = '/api/v1/users/me'
+
+  request(url)
+    .get(path)
+    .set('Accept', 'application/json')
+    .set('Authorization', 'Bearer ' + accessToken)
+    .expect(200)
+    .expect('Content-Type', /json/)
+    .end(end)
+}
+
 function getUsersList (url, end) {
   const path = '/api/v1/users'