Skip to content

Commit

Permalink
translate: support GOOGLE_CLOUD_TRANSLATE_ENDPOINT env var (#1674)
Browse files Browse the repository at this point in the history
  • Loading branch information
stephenplusplus authored and callmehiphop committed Oct 9, 2016
1 parent 466e589 commit c679b69
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 12 deletions.
19 changes: 16 additions & 3 deletions packages/google-cloud-translate/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ var PKG = require('../package.json');
*
* @param {object} options - [Configuration object](#/docs).
* @param {string} options.key - An API key.
*
* @example
* //-
* // <h3>Custom Translate API</h3>
* //
* // The environment variable, `GOOGLE_CLOUD_TRANSLATE_ENDPOINT`, is honored as
* // a custom backend which our library will send requests to.
* //-
*/
function Translate(options) {
if (!(this instanceof Translate)) {
Expand All @@ -66,6 +74,13 @@ function Translate(options) {
throw new Error('An API key is required to use the Translate API.');
}

this.baseUrl = 'https://www.googleapis.com/language/translate/v2';

if (process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT) {
this.baseUrl = process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT
.replace(/\/+$/, '');
}

this.options = options;
this.key = options.key;
}
Expand Down Expand Up @@ -382,9 +397,7 @@ Translate.prototype.translate = function(input, options, callback) {
* @param {function} callback - The callback function passed to `request`.
*/
Translate.prototype.request = function(reqOpts, callback) {
var BASE_URL = 'https://www.googleapis.com/language/translate/v2';

reqOpts.uri = BASE_URL + reqOpts.uri;
reqOpts.uri = this.baseUrl + reqOpts.uri;

reqOpts = extend(true, {}, reqOpts, {
qs: {
Expand Down
52 changes: 43 additions & 9 deletions packages/google-cloud-translate/test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ var fakeUtil = extend({}, util, {
});

describe('Translate', function() {
var API_KEY = 'api-key';
var OPTIONS = {
key: 'api-key'
};

var Translate;
var translate;
Expand All @@ -49,16 +51,14 @@ describe('Translate', function() {
beforeEach(function() {
makeRequestOverride = null;

translate = new Translate({
key: API_KEY
});
translate = new Translate(OPTIONS);
});

describe('instantiation', function() {
it('should normalize the arguments', function() {
var normalizeArguments = fakeUtil.normalizeArguments;
var normalizeArgumentsCalled = false;
var fakeOptions = { key: API_KEY };
var fakeOptions = extend({}, OPTIONS);
var fakeContext = {};

fakeUtil.normalizeArguments = function(context, options, cfg) {
Expand All @@ -81,14 +81,48 @@ describe('Translate', function() {
}, /An API key is required to use the Translate API\./);
});

it('should default baseUrl correctly', function() {
assert.strictEqual(
translate.baseUrl,
'https://www.googleapis.com/language/translate/v2'
);
});

it('should localize the options', function() {
var options = { key: API_KEY };
var options = { key: '...' };
var translate = new Translate(options);
assert.strictEqual(translate.options, options);
});

it('should localize the api key', function() {
assert.equal(translate.key, API_KEY);
assert.equal(translate.key, OPTIONS.key);
});

describe('GOOGLE_CLOUD_TRANSLATE_ENDPOINT', function() {
var CUSTOM_ENDPOINT = '...';
var translate;

before(function() {
process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT = CUSTOM_ENDPOINT;
translate = new Translate(OPTIONS);
});

after(function() {
delete process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT;
});

it('should correctly set the baseUrl', function() {
assert.strictEqual(translate.baseUrl, CUSTOM_ENDPOINT);
});

it('should remove trailing slashes', function() {
var expectedBaseUrl = 'http://localhost:8080';

process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT = 'http://localhost:8080//';

var translate = new Translate(OPTIONS);
assert.strictEqual(translate.baseUrl, expectedBaseUrl);
});
});
});

Expand Down Expand Up @@ -446,8 +480,8 @@ describe('Translate', function() {
'User-Agent': userAgent
}
});
var BASE_URL = 'https://www.googleapis.com/language/translate/v2';
expectedReqOpts.uri = BASE_URL + reqOpts.uri;

expectedReqOpts.uri = translate.baseUrl + reqOpts.uri;

makeRequestOverride = function(reqOpts, options, callback) {
assert.deepEqual(reqOpts, expectedReqOpts);
Expand Down

0 comments on commit c679b69

Please sign in to comment.