From 5cf80066406a20db687ea2558c9d3e4d628f8457 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 1 Dec 2016 18:05:48 +0300 Subject: [PATCH 1/6] fix style --- src/groups/search.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/groups/search.js b/src/groups/search.js index 4826579f6c..3b6bfab9cd 100644 --- a/src/groups/search.js +++ b/src/groups/search.js @@ -1,10 +1,10 @@ 'use strict'; -var async = require('async'), +var async = require('async'); + +var user = require('../user'); +var db = require('./../database'); - user = require('../user'), - db = require('./../database'), - groups = module.parent.exports; module.exports = function (Groups) { @@ -17,7 +17,7 @@ module.exports = function (Groups) { async.apply(db.getObjectValues, 'groupslug:groupname'), function (groupNames, next) { // Ephemeral groups and the registered-users groups are searchable - groupNames = groups.getEphemeralGroups().concat(groupNames).concat('registered-users'); + groupNames = Groups.getEphemeralGroups().concat(groupNames).concat('registered-users'); groupNames = groupNames.filter(function (name) { return name.toLowerCase().indexOf(query) !== -1 && name !== 'administrators' && !Groups.isPrivilegeGroup(name); }); From c3980d0c2ef4baf802d9a36c9d17c50498503d26 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 1 Dec 2016 18:36:43 +0300 Subject: [PATCH 2/6] follow tests --- src/user/follow.js | 39 ++++++++++++++++++--------------------- test/controllers.js | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 21 deletions(-) diff --git a/src/user/follow.js b/src/user/follow.js index 0812c1004d..e6c9624018 100644 --- a/src/user/follow.js +++ b/src/user/follow.js @@ -1,9 +1,9 @@ 'use strict'; -var async = require('async'), - plugins = require('../plugins'), - db = require('../database'); +var async = require('async'); +var plugins = require('../plugins'); +var db = require('../database'); module.exports = function (User) { @@ -73,25 +73,22 @@ module.exports = function (User) { if (!parseInt(uid, 10)) { return callback(null, []); } - - db.getSortedSetRevRange(type + ':' + uid, start, stop, function (err, uids) { - if (err) { - return callback(err); + async.waterfall([ + function (next) { + db.getSortedSetRevRange(type + ':' + uid, start, stop, next); + }, + function (uids, next) { + plugins.fireHook('filter:user.' + type, { + uids: uids, + uid: uid, + start: start, + stop: stop + }, next); + }, + function (data, next) { + User.getUsers(data.uids, uid, next); } - - plugins.fireHook('filter:user.' + type, { - uids: uids, - uid: uid, - start: start, - stop: stop - }, function (err, data) { - if (err) { - return callback(err); - } - - User.getUsers(data.uids, uid, callback); - }); - }); + ], callback); } User.isFollowing = function (uid, theirid, callback) { diff --git a/test/controllers.js b/test/controllers.js index 04bbf26c1b..03d7d38e11 100644 --- a/test/controllers.js +++ b/test/controllers.js @@ -785,7 +785,47 @@ describe('Controllers', function () { done(); }); }); + }); + describe('account follow page', function () { + var uid; + before(function (done) { + user.create({username: 'follower'}, function (err, _uid) { + assert.ifError(err); + uid = _uid; + user.follow(uid, fooUid, done); + }); + }); + + it('should get followers page', function (done) { + request(nconf.get('url') + '/api/user/foo/followers', {json: true}, function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert.equal(body.users[0].username, 'follower'); + done(); + }); + }); + + it('should get following page', function (done) { + request(nconf.get('url') + '/api/user/follower/following', {json: true}, function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert.equal(body.users[0].username, 'foo'); + done(); + }); + }); + + it('should return empty after unfollow', function (done ) { + user.unfollow(uid, fooUid, function (err) { + assert.ifError(err); + request(nconf.get('url') + '/api/user/foo/followers', {json: true}, function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert.equal(body.users.length, 0); + done(); + }); + }); + }); }); after(function (done) { From 7f90e31a3876cfa14c371b1a55738ae55f63bd04 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 1 Dec 2016 18:59:24 +0300 Subject: [PATCH 3/6] more socket user tests --- src/socket.io/user.js | 2 +- test/controllers.js | 5 +++-- test/user.js | 48 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 41c2e9c2c5..69b229b4b1 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -46,7 +46,7 @@ SocketUser.deleteAccount = function (socket, data, callback) { user.deleteAccount(socket.uid, next); }, function (next) { - socket.broadcast.emit('event:user_status_change', {uid: socket.uid, status: 'offline'}); + require('./index').server.sockets.emit('event:user_status_change', {uid: socket.uid, status: 'offline'}); events.log({ type: 'user-delete', diff --git a/test/controllers.js b/test/controllers.js index 03d7d38e11..cd08039557 100644 --- a/test/controllers.js +++ b/test/controllers.js @@ -788,12 +788,13 @@ describe('Controllers', function () { }); describe('account follow page', function () { + var socketUser = require('../src/socket.io/user'); var uid; before(function (done) { user.create({username: 'follower'}, function (err, _uid) { assert.ifError(err); uid = _uid; - user.follow(uid, fooUid, done); + socketUser.follow({uid: uid}, {uid: fooUid}, done); }); }); @@ -816,7 +817,7 @@ describe('Controllers', function () { }); it('should return empty after unfollow', function (done ) { - user.unfollow(uid, fooUid, function (err) { + socketUser.unfollow({uid: uid}, {uid: fooUid}, function (err) { assert.ifError(err); request(nconf.get('url') + '/api/user/foo/followers', {json: true}, function (err, res, body) { assert.ifError(err); diff --git a/test/user.js b/test/user.js index 114c4dfdc3..c2f67ef709 100644 --- a/test/user.js +++ b/test/user.js @@ -610,7 +610,55 @@ describe('User', function () { }); }); }); + }); + describe('socket methods', function () { + var socketUser = require('../src/socket.io/user'); + + it('should fail with invalid data', function (done) { + socketUser.exists({uid: testUid}, null, function (err) { + assert.equal(err.message, '[[error:invalid-data]]'); + done(); + }); + }); + + it('should return true if user/group exists', function (done) { + socketUser.exists({uid: testUid}, {username: 'registered-users'}, function (err, exists) { + assert.ifError(err); + assert(exists); + done(); + }); + }); + + it('should return true if user/group exists', function (done) { + socketUser.exists({uid: testUid}, {username: 'John Smith'}, function (err, exists) { + assert.ifError(err); + assert(exists); + done(); + }); + }); + + it('should return false if user/group does not exists', function (done) { + socketUser.exists({uid: testUid}, {username: 'doesnot exist'}, function (err, exists) { + assert.ifError(err); + assert(!exists); + done(); + }); + }); + + it('should delete user', function (done) { + User.create({username: 'tobedeleted'}, function (err, _uid) { + assert.ifError(err); + socketUser.deleteAccount({uid: _uid}, {}, function (err) { + assert.ifError(err); + socketUser.exists({uid: testUid}, {username: 'doesnot exist'}, function (err, exists) { + assert.ifError(err); + assert(!exists); + done(); + }); + }); + }); + }); }); From fb42b83e1ba41df755de365ff9b9ef1b1152155b Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 1 Dec 2016 18:59:50 +0300 Subject: [PATCH 4/6] remove hardcoded value @pichalite --- src/views/admin/settings/post.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/admin/settings/post.tpl b/src/views/admin/settings/post.tpl index 95f39c829a..0a58e3a3cf 100644 --- a/src/views/admin/settings/post.tpl +++ b/src/views/admin/settings/post.tpl @@ -90,7 +90,7 @@
- +

Dates & times will be shown in a relative manner (e.g. "3 hours ago" / "5 days ago"), and localised into various languages. After a certain point, this text can be switched to display the localised date itself From bcb3903446e9b40be899d9606d26ca490afcc69e Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 1 Dec 2016 16:07:40 -0500 Subject: [PATCH 5/6] priv table headers --- public/less/admin/manage/categories.less | 27 +++++++++++++++++++ .../admin/partials/categories/privileges.tpl | 16 +++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/public/less/admin/manage/categories.less b/public/less/admin/manage/categories.less index 76e68f340a..0f13af4deb 100644 --- a/public/less/admin/manage/categories.less +++ b/public/less/admin/manage/categories.less @@ -88,3 +88,30 @@ div.categories { } } + +.category { + .privilege-table { + tr > th:first-child { + min-width: 150px; + } + + .privilege-table-header { + background: white; + + th { + text-align: center; + border-top: 0; + text-transform: uppercase; + font-size: 9px; + } + + .arrowed:after { + border-bottom: 1px dashed #ccc; + content: ""; + width: 100%; + display: block; + padding-top: 5px; + } + } + } +} \ No newline at end of file diff --git a/src/views/admin/partials/categories/privileges.tpl b/src/views/admin/partials/categories/privileges.tpl index 497fa71ac0..28b5f0849f 100644 --- a/src/views/admin/partials/categories/privileges.tpl +++ b/src/views/admin/partials/categories/privileges.tpl @@ -1,4 +1,10 @@ - +
+ + + + + + @@ -34,7 +40,13 @@
Viewing PrivilegesPosting PrivilegesModeration Privileges
User
- +
+ + + + + + From a54a9b512a6e2c419f28f30430151d0e616045a0 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 1 Dec 2016 16:29:45 -0500 Subject: [PATCH 6/6] v1.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bf9fb0049e..3978707596 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "1.3.0", + "version": "1.4.0", "homepage": "http://www.nodebb.org", "repository": { "type": "git",
Viewing PrivilegesPosting PrivilegesModeration Privileges
Group