action: function (params) { return ask({ url: config.yandexLocator.host, method: 'POST', bodyEncoding: 'multipart', allowGzip: true, body: { json: { common: { version: '1.0', api_key: config.yandexLocator.key }, ip: { address_v4: params.ip } } }, timeout: config.timeout }) .then(function (response) { var json = JSON.parse(response.data); return json.position; }) .fail(function () { throw new bla.ApiError('GEOLOCATION_ERROR', 'Your city isn\'t found'); }); }
.setAction(function () { return asker({ host: 'api.flickr.com', protocol: 'https:', path: '/services/rest/', query: { method: 'flickr.photos.search', tags: 'kittens', api_key: FLICKR_API_KEY, format: 'json', nojsoncallback: 1, per_page: 3 }, timeout: 5000 }) .then(function (response) { var data = JSON.parse(response.data); return data.photos.photo.map(function (photo) { return { title: photo.title, url: getPhotoUrl(photo) }; }); }) .fail(function (error) { throw new bla.ApiError(bla.ApiError.INTERNAL_ERROR, error.message); }); });
action: function (params) { return ask({ url: config.openWeatherMapApi.host, query: { lat: params.latitude, lon: params.longitude, appid: '2cf1ffcfe7564c8c1583eca95384bd9e', format: 'json' }, timeout: config.timeout }).then(function (response) { var json = JSON.parse(response.data); if (json.cod !== 200) { throw new bla.ApiError('WEATHER_ERROR', json.message); } // convert to Celsius json.main.temp = convertToCelsius(json.main.temp); json.main.temp_min = convertToCelsius(json.main.temp_min); json.main.temp_max = convertToCelsius(json.main.temp_max); return json; }); }
module.exports = function (params, handle) { var promise; var server; try { fs.unlinkSync(sock); } catch (e) {} server = http.createServer(handle).listen(sock); params.socketPath = sock; params.statusFilter = function filter () { return { accept: true, isRetryAllowed: false }; }; promise = vowAsker(params).then(function (res) { if ( null === res.data ) { res.data = new Buffer(0); } return res; }); promise.always(function () { server.close(); }); return promise; };
it('Should respond with expected value (1)', function (done) { var app = fist(); var origServer; app.route('/', 'front'); app.route('/backend/', 'back'); app.unit({ path: 'front', deps: ['model'], data: function (track, context) { assert.ok(!context.getErr('model')); return context.track.send(context.getRes('model')); } }); app.unit({ path: 'model', base: '_contrib-asker', _$options: function (context) { return _.extend(this.__base(context), { path: '/<token>/', socketPath: sock, vars: { token: 'backend' } }); } }); app.unit({ path: 'back', data: function (track, context) { return context.track.send({x: 42}); } }); unlink(); origServer = app.listen(sock); vowAsker({ path: '/', socketPath: sock }).done(function (res) { assert.deepEqual(res.data, new Buffer('{"x":42}')); origServer.close(); done(); }); });
it('Should respond with expected value (3)', function (done) { var app = fist(); var origServer; app.route('/', 'front'); app.unit({ path: 'front', deps: ['model'], data: function (track, context) { return context.track.send(context.getErr('model')); } }); app.unit({ path: 'model', base: '_contrib-asker', _$request: function () { throw 42; } }); unlink(); origServer = app.listen(sock); vowAsker({ path: '/', socketPath: sock, statusFilter: function () { return { accept: true }; } }).done(function (res) { assert.deepEqual(res.data, new Buffer('42')); origServer.close(); done(); }); });
action: function (params, request) { var ip = params.ip || request && request.ip; if (!ip) { return vow.reject(new bla.ApiError('BAD_REQUEST', 'IP address is not specified')); } return asker({ url: LOCATOR_URL, method: 'POST', bodyEncoding: 'multipart', allowGzip: true, body: { json: { common: { version: '1.0', api_key: LOCATOR_KEY }, ip: { address_v4: ip } } }, timeout: 5000 }) .then(function (response) { var data = JSON.parse(response.data); if (data.error) { throw new bla.ApiError('GEOLOCATION_ERROR', data.error); } return data.position; }) .fail(function (error) { if (error.data && error.data.statusCode === 404) { throw new bla.ApiError(bla.ApiError.NOT_FOUND, 'Cannot detect your location'); } else { throw new bla.ApiError(bla.ApiError.INTERNAL_ERROR, error.message); } }); }
it('Should respond with expected value (4)', function (done) { var app = fist(); var origServer; app.route('/', 'front'); app.unit({ path: 'front', deps: ['model'], data: function (track, context) { assert.ok(context.getErr('model')); throw context.getErr('model'); } }); app.unit({ path: 'model', base: '_contrib-asker', _$options: function () { return { path: '/foo-bar/', sock: sock }; } }); unlink(); origServer = app.listen(sock); vowAsker({ path: '/', socketPath: sock }).done(null, function (err) { assert.ok(err); origServer.close(); done(); }); });