Files
kami-parse-server/spec/OAuth1.spec.js
Florent Vilmart d83a0b6808 Use Prettier JS (#5017)
* Adds prettier

* Run lint before tests
2018-09-01 13:58:06 -04:00

160 lines
4.5 KiB
JavaScript

const OAuth = require('../lib/Adapters/Auth/OAuth1Client');
describe('OAuth', function() {
it('Nonce should have right length', done => {
jequal(OAuth.nonce().length, 30);
done();
});
it('Should properly build parameter string', done => {
const string = OAuth.buildParameterString({ c: 1, a: 2, b: 3 });
jequal(string, 'a=2&b=3&c=1');
done();
});
it('Should properly build empty parameter string', done => {
const string = OAuth.buildParameterString();
jequal(string, '');
done();
});
it('Should properly build signature string', done => {
const string = OAuth.buildSignatureString('get', 'http://dummy.com', '');
jequal(string, 'GET&http%3A%2F%2Fdummy.com&');
done();
});
it('Should properly generate request signature', done => {
let request = {
host: 'dummy.com',
path: 'path',
};
const oauth_params = {
oauth_timestamp: 123450000,
oauth_nonce: 'AAAAAAAAAAAAAAAAA',
oauth_consumer_key: 'hello',
oauth_token: 'token',
};
const consumer_secret = 'world';
const auth_token_secret = 'secret';
request = OAuth.signRequest(
request,
oauth_params,
consumer_secret,
auth_token_secret
);
jequal(
request.headers['Authorization'],
'OAuth oauth_consumer_key="hello", oauth_nonce="AAAAAAAAAAAAAAAAA", oauth_signature="8K95bpQcDi9Nd2GkhumTVcw4%2BXw%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="123450000", oauth_token="token", oauth_version="1.0"'
);
done();
});
it('Should properly build request', done => {
const options = {
host: 'dummy.com',
consumer_key: 'hello',
consumer_secret: 'world',
auth_token: 'token',
auth_token_secret: 'secret',
// Custom oauth params for tests
oauth_params: {
oauth_timestamp: 123450000,
oauth_nonce: 'AAAAAAAAAAAAAAAAA',
},
};
const path = 'path';
const method = 'get';
const oauthClient = new OAuth(options);
const req = oauthClient.buildRequest(method, path, { query: 'param' });
jequal(req.host, options.host);
jequal(req.path, '/' + path + '?query=param');
jequal(req.method, 'GET');
jequal(req.headers['Content-Type'], 'application/x-www-form-urlencoded');
jequal(
req.headers['Authorization'],
'OAuth oauth_consumer_key="hello", oauth_nonce="AAAAAAAAAAAAAAAAA", oauth_signature="wNkyEkDE%2F0JZ2idmqyrgHdvC0rs%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="123450000", oauth_token="token", oauth_version="1.0"'
);
done();
});
function validateCannotAuthenticateError(data, done) {
jequal(typeof data, 'object');
jequal(typeof data.errors, 'object');
const errors = data.errors;
jequal(typeof errors[0], 'object');
// Cannot authenticate error
jequal(errors[0].code, 32);
done();
}
it('Should fail a GET request', done => {
const options = {
host: 'api.twitter.com',
consumer_key: 'XXXXXXXXXXXXXXXXXXXXXXXXX',
consumer_secret: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
};
const path = '/1.1/help/configuration.json';
const params = { lang: 'en' };
const oauthClient = new OAuth(options);
oauthClient.get(path, params).then(function(data) {
validateCannotAuthenticateError(data, done);
});
});
it('Should fail a POST request', done => {
const options = {
host: 'api.twitter.com',
consumer_key: 'XXXXXXXXXXXXXXXXXXXXXXXXX',
consumer_secret: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
};
const body = {
lang: 'en',
};
const path = '/1.1/account/settings.json';
const oauthClient = new OAuth(options);
oauthClient.post(path, null, body).then(function(data) {
validateCannotAuthenticateError(data, done);
});
});
it('Should fail a request', done => {
const options = {
host: 'localhost',
consumer_key: 'XXXXXXXXXXXXXXXXXXXXXXXXX',
consumer_secret: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
};
const body = {
lang: 'en',
};
const path = '/';
const oauthClient = new OAuth(options);
oauthClient
.post(path, null, body)
.then(function() {
jequal(false, true);
done();
})
.catch(function() {
jequal(true, true);
done();
});
});
it('Should fail with missing options', done => {
const options = undefined;
try {
new OAuth(options);
} catch (error) {
jequal(error.message, 'No options passed to OAuth');
done();
}
});
});