j-toker
Version:
Simple, secure token authentication for jQuery.
141 lines (116 loc) • 3.6 kB
JavaScript
(function ($) {
var sinon = window.sinon;
QUnit.module('jQuery.auth.emailSignIn', {
beforeEach: function() {
this.server = sinon.fakeServer.create();
$.auth.configure(null, true);
sinon.spy($.auth, 'broadcastEvent');
},
afterEach: function() {
this.server = sinon.fakeServer.restore();
$.auth.broadcastEvent.restore();
$.auth.reset();
}
});
QUnit.test(
'`emailSignIn` makes request to the API using default params',
function(assert) {
var firstToken = 'xxx',
validEmail = 'test@test.com',
validPwd = 'secret123',
validUid = validEmail,
firstName = 'stimpy',
clientId = '123xyz',
done = assert.async(),
userObj = {
email: validEmail,
uid: validUid,
first_name: firstName
};
// mock success response to sign in
this.server.respondWith('POST', '/api/auth/sign_in', [
200, {
'access-token': firstToken,
'uid': validUid,
'client': clientId,
'Content-Type': 'application/json'
}, JSON.stringify({data: userObj})]);
$.auth.emailSignIn({
email: validEmail,
password: validPwd
})
.then(function() {
assert.ok(
$.auth.broadcastEvent.calledWith('auth.emailSignIn.success'),
'`auth.emailSignIn.success` event was broadcast'
);
assert.ok(
$.auth.broadcastEvent.calledWith('auth.validation.success'),
'`auth.validation.success` event was broadcast'
);
assert.ok(
$.auth.broadcastEvent.calledWith('auth.signIn.success'),
'`auth.signIn.success` event was broadcast'
);
done();
});
this.server.respond();
assert.strictEqual(
1,
this.server.requests.length,
"only one request was made"
);
assert.strictEqual(
firstToken,
$.auth.retrieveData('authHeaders')['access-token'],
"new token was saved for next request"
);
assert.deepEqual(
$.extend(userObj, {
configName: 'default',
signedIn: true
}),
$.auth.user,
"user attributes were loaded into $.auth.user"
);
}
);
QUnit.test(
'`emailSignIn` rejects promise when bogus creds are used',
function(assert) {
var done = assert.async(),
server = this.server;
// mock failure response
this.server.respondWith('POST', '/api/auth/sign_in', [401, {
'Content-Type': 'application/json'
}, JSON.stringify({message: 'bad creds'})]);
$.auth.emailSignIn({
email: 'test@test.com',
password: 'secret123'
})
.fail(function() {
assert.strictEqual(
1,
server.requests.length,
"1 API request was made"
);
assert.strictEqual(
undefined,
$.auth.retrieveData('authHeaders'),
'no creds were saved'
);
assert.strictEqual(
undefined,
$.auth.retrieveData('currentConfigName'),
'currentConfigName was not set'
);
assert.ok(
$.auth.broadcastEvent.calledWith('auth.emailSignIn.error'),
'`auth.emailSignIn.error` event was broadcast'
);
done();
});
this.server.respond();
}
);
}(jQuery));