Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

Commit 3438231

Browse files
author
Miroslav Bajtoš
committed
Merge branch 'release/1.0.0' into production
2 parents 3977b64 + de5b60b commit 3438231

File tree

2 files changed

+105
-5
lines changed

2 files changed

+105
-5
lines changed

lib/helpers.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var helpers = exports = module.exports = {
88
};
99
var assert = require('assert');
1010
var request = require('supertest');
11+
var expect = require('chai').expect;
1112

1213
_beforeEach.withApp = function(app) {
1314
if (app.models.User) {
@@ -109,6 +110,54 @@ _beforeEach.givenModel = function(modelName, attrs, optionalHandler) {
109110

110111
_beforeEach.givenUser = function(attrs, optionalHandler) {
111112
_beforeEach.givenModel('user', attrs, optionalHandler);
113+
}
114+
115+
_beforeEach.givenUserWithRole = function (attrs, role, optionalHandler) {
116+
_beforeEach.givenUser(attrs, function (done) {
117+
var test = this;
118+
test.app.models.Role.create({name: role}, function (err, result) {
119+
if(err) {
120+
console.error(err.message);
121+
if(err.details) console.error(err.details);
122+
return done(err);
123+
}
124+
125+
test.userRole = result;
126+
test.app.models.roleMapping.create(
127+
{principalId: test.user.id,
128+
principalType: test.app.models.roleMapping.USER,
129+
roleId: result.id},
130+
function (err, result) {
131+
if(err) {
132+
console.error(err.message);
133+
if(err.details) console.error(err.details);
134+
return done(err);
135+
}
136+
137+
test.userRoleMapping = result;
138+
done();
139+
}
140+
);
141+
});
142+
});
143+
144+
if(typeof optionalHandler === 'function') {
145+
beforeEach(optionalHandler);
146+
}
147+
148+
afterEach(function(done) {
149+
var test = this;
150+
this.userRole.destroy(function(err) {
151+
if(err) return done(err);
152+
test.userRole = undefined;
153+
154+
test.userRoleMapping.destroy(function(err) {
155+
if(err) return done(err);
156+
test.userRoleMapping = undefined;
157+
done();
158+
});
159+
});
160+
});
112161
}
113162

114163
_beforeEach.givenLoggedInUser = function(credentials, optionalHandler) {
@@ -134,6 +183,29 @@ _beforeEach.givenLoggedInUser = function(credentials, optionalHandler) {
134183
});
135184
}
136185

186+
_beforeEach.givenLoggedInUserWithRole = function(credentials, role, optionalHandler){
187+
_beforeEach.givenUserWithRole(credentials, role, function(done) {
188+
var test = this;
189+
this.user.constructor.login(credentials, function(err, token) {
190+
if(err) {
191+
done(err);
192+
} else {
193+
test.loggedInAccessToken = token;
194+
done();
195+
}
196+
});
197+
});
198+
199+
afterEach(function(done) {
200+
var test = this;
201+
this.loggedInAccessToken.destroy(function(err) {
202+
if(err) return done(err);
203+
test.loggedInAccessToken = undefined;
204+
done();
205+
});
206+
});
207+
}
208+
137209
_beforeEach.givenAnUnauthenticatedToken = function(attrs, optionalHandler) {
138210
_beforeEach.givenModel('accessToken', attrs, optionalHandler);
139211
}
@@ -197,13 +269,27 @@ _describe.whenLoggedInAsUser = function(credentials, cb) {
197269
});
198270
}
199271

272+
_describe.whenLoggedInAsUserWithRole = function(credentials, role, cb) {
273+
describe('when logged in as user', function () {
274+
_beforeEach.givenLoggedInUser(credentials, role);
275+
cb();
276+
});
277+
}
278+
200279
_describe.whenCalledByUser = function(credentials, verb, url, data, cb) {
201280
describe('when called by logged in user', function () {
202281
_beforeEach.givenLoggedInUser(credentials);
203282
_describe.whenCalledRemotely(verb, url, data, cb);
204283
});
205284
}
206285

286+
_describe.whenCalledByUserWithRole = function (credentials, role, verb, url, data, cb) {
287+
describe('when called by logged in user with role ' + role, function () {
288+
_beforeEach.givenLoggedInUserWithRole(credentials, role);
289+
_describe.whenCalledRemotely(verb, url, data, cb);
290+
});
291+
}
292+
207293
_describe.whenCalledAnonymously = function(verb, url, data, cb) {
208294
describe('when called anonymously', function () {
209295
_beforeEach.givenAnAnonymousToken();
@@ -285,3 +371,17 @@ function(credentials, verb, url) {
285371
_it.shouldBeDenied();
286372
});
287373
}
374+
375+
_it.shouldBeAllowedWhenCalledByUserWithRole =
376+
function(credentials, role, verb, url, data) {
377+
_describe.whenCalledByUserWithRole(credentials, role, verb, url, data, function() {
378+
_it.shouldBeAllowed();
379+
});
380+
}
381+
382+
_it.shouldBeDeniedWhenCalledByUserWithRole =
383+
function(credentials, role, verb, url) {
384+
_describe.whenCalledByUserWithRole(credentials, role, verb, url, function() {
385+
_it.shouldBeDenied();
386+
});
387+
}

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "loopback-testing",
3-
"version": "0.2.1",
3+
"version": "1.0.0",
44
"description": "Utilities for testing LoopBack applications",
55
"main": "index.js",
66
"scripts": {
@@ -9,13 +9,13 @@
99
"repository": "",
1010
"author": "Ritchie Martori",
1111
"dependencies": {
12-
"supertest": "~0.9.0",
13-
"mocha": "~1.20.1",
14-
"async": "~0.2.10"
12+
"supertest": "~0.13.0",
13+
"mocha": "~1.21.4",
14+
"async": "~0.9.0"
1515
},
1616
"devDependencies": {
1717
"chai": "~1.9.0",
18-
"loopback": "^1.6.1"
18+
"loopback": "^2.2.0"
1919
},
2020
"repository": {
2121
"type": "git",

0 commit comments

Comments
 (0)