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(); } }); });