Fixing URL path resolution handling forward-slashes.
diff --git a/lib/base_operation.js b/lib/base_operation.js
index 3a54450..900c840 100644
--- a/lib/base_operation.js
+++ b/lib/base_operation.js
@@ -2,6 +2,8 @@
const messages = require('./messages')
const rp = require('request-promise')
+const url = require('url')
+const path = require('path')
class BaseOperation {
constructor (options) {
@@ -16,13 +18,19 @@
return {
json: true,
method: method,
- url: `${this.options.api}${path}`,
+ url: this.path_url(path),
headers: {
Authorization: this.auth_header()
}
}
}
+ path_url (url_path) {
+ const endpoint = url.parse(this.options.api)
+ endpoint.pathname = path.resolve(endpoint.pathname, url_path)
+ return url.format(endpoint)
+ }
+
namespace (options) {
if (options && options.hasOwnProperty('namespace')) {
return options.namespace
diff --git a/package.json b/package.json
index 611010b..ce3caf0 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,7 @@
},
"homepage": "https://github.com/openwhisk/openwhisk-client-js#readme",
"devDependencies": {
- "ava": "^0.13.0",
+ "ava": "^0.15.2",
"proxyquire": "1.7.4"
},
"dependencies": {
diff --git a/test/integration/actions.test.js b/test/integration/actions.test.js
index 612bb55..47e5bdd 100644
--- a/test/integration/actions.test.js
+++ b/test/integration/actions.test.js
@@ -107,7 +107,7 @@
const actions = new Actions(params)
return actions.create({actionName: 'random_invoke_test', action: 'function main(params) {return params}'}).then(result => {
return actions.invoke({actionName: 'random_invoke_test', params: {hello: 'world'}, blocking: true}).then(invoke_result => {
- t.same(invoke_result.response.result, {hello: 'world'})
+ t.deepEqual(invoke_result.response.result, {hello: 'world'})
t.true(invoke_result.response.success)
t.pass()
return actions.delete({actionName: 'random_invoke_test'}).catch(errors)
diff --git a/test/integration/packages.test.js b/test/integration/packages.test.js
index 9258bac..fe1f30c 100644
--- a/test/integration/packages.test.js
+++ b/test/integration/packages.test.js
@@ -63,7 +63,7 @@
return packages.create({packageName: 'random_package_test'}).then(result => {
t.is(result.name, 'random_package_test')
t.is(result.namespace, NAMESPACE)
- t.same(result.annotations, [])
+ t.deepEqual(result.annotations, [])
t.is(result.version, '0.0.1')
return packages.get({packageName: 'random_package_test'}).then(package_result => {
t.is(package_result.name, 'random_package_test')
@@ -86,7 +86,7 @@
return packages.create({packageName: 'random_package_update_test'}).then(result => {
t.is(result.name, 'random_package_update_test')
t.is(result.namespace, NAMESPACE)
- t.same(result.annotations, [])
+ t.deepEqual(result.annotations, [])
t.is(result.version, '0.0.1')
return packages.update({packageName: 'random_package_update_test'}).then(update_result => {
t.is(update_result.version, '0.0.2')
diff --git a/test/integration/triggers.test.js b/test/integration/triggers.test.js
index bcf77c5..9ed4e1e 100644
--- a/test/integration/triggers.test.js
+++ b/test/integration/triggers.test.js
@@ -63,9 +63,9 @@
return triggers.create({triggerName: 'random_trigger_test'}).then(result => {
t.is(result.name, 'random_trigger_test')
t.is(result.namespace, NAMESPACE)
- t.same(result.annotations, [])
+ t.deepEqual(result.annotations, [])
t.is(result.version, '0.0.1')
- t.same(result.limits, {})
+ t.deepEqual(result.limits, {})
t.pass()
return triggers.get({triggerName: result.name}).then(trigger_result => {
t.is(trigger_result.name, result.name)
@@ -88,9 +88,9 @@
return triggers.create({triggerName: 'random_create_update_test'}).then(result => {
t.is(result.name, 'random_create_update_test')
t.is(result.namespace, NAMESPACE)
- t.same(result.annotations, [])
+ t.deepEqual(result.annotations, [])
t.is(result.version, '0.0.1')
- t.same(result.limits, {})
+ t.deepEqual(result.limits, {})
return triggers.update({triggerName: 'random_create_update_test'}).then(update_result => {
t.is(update_result.version, '0.0.2')
t.pass()
diff --git a/test/unit/actions.test.js b/test/unit/actions.test.js
index 125319a..2ae0f87 100644
--- a/test/unit/actions.test.js
+++ b/test/unit/actions.test.js
@@ -31,7 +31,7 @@
stub.request = req => {
t.is(req.url, `${params.api}namespaces/${params.namespace}/actions`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
- t.same(req.qs, options)
+ t.deepEqual(req.qs, options)
t.is(req.method, 'GET')
return Promise.resolve()
}
@@ -193,8 +193,8 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/actions/${action_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, {exec: {kind: 'nodejs', code: action}})
- t.same(req.qs, {})
+ t.deepEqual(req.body, {exec: {kind: 'nodejs', code: action}})
+ t.deepEqual(req.qs, {})
return Promise.resolve()
}
@@ -214,8 +214,8 @@
t.is(req.url, `${params.api}namespaces/${namespace}/actions/${action_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, {exec: {kind: 'nodejs', code: action}})
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.body, {exec: {kind: 'nodejs', code: action}})
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
@@ -236,8 +236,8 @@
t.is(req.url, `${params.api}namespaces/${namespace}/actions/${action_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, {exec: {kind: 'swift', code: code}})
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.body, {exec: {kind: 'swift', code: code}})
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
@@ -289,8 +289,8 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/actions/${action_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, {exec: {kind: 'nodejs', code: action}})
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.body, {exec: {kind: 'nodejs', code: action}})
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
@@ -308,7 +308,7 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/actions/${action_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'POST')
- t.same(req.body, {})
+ t.deepEqual(req.body, {})
return Promise.resolve()
}
@@ -326,7 +326,7 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/actions/${action_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'POST')
- t.same(req.body, {})
+ t.deepEqual(req.body, {})
return Promise.resolve()
}
@@ -344,7 +344,7 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/actions/${action_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'POST')
- t.same(req.body, {a: 1, b: 2})
+ t.deepEqual(req.body, {a: 1, b: 2})
return Promise.resolve()
}
@@ -362,8 +362,8 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/actions/${action_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'POST')
- t.same(req.body, {})
- t.same(req.qs, {blocking: true})
+ t.deepEqual(req.body, {})
+ t.deepEqual(req.qs, {blocking: true})
return Promise.resolve()
}
diff --git a/test/unit/activations.test.js b/test/unit/activations.test.js
index 637fc96..c40ab0a 100644
--- a/test/unit/activations.test.js
+++ b/test/unit/activations.test.js
@@ -33,7 +33,7 @@
t.is(req.url, `${params.api}namespaces/options_namespace/activations`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'GET')
- t.same(req.qs, {name: 'Hello', limit: 100, skip: 100, upto: 100, docs: true})
+ t.deepEqual(req.qs, {name: 'Hello', limit: 100, skip: 100, upto: 100, docs: true})
return Promise.resolve()
}
@@ -49,7 +49,7 @@
const params = {api: 'https://openwhisk.ng.bluemix.net/api/v1/', api_key: 'user_authorisation_key', namespace: namespace}
stub.request = req => {
- t.is(req.url, `${params.api}namespaces/${namespace}/activations/${activation_id}/`)
+ t.is(req.url, `${params.api}namespaces/${namespace}/activations/${activation_id}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'GET')
return Promise.resolve()
diff --git a/test/unit/base_operation.test.js b/test/unit/base_operation.test.js
index 4a01a82..cc98e2d 100644
--- a/test/unit/base_operation.test.js
+++ b/test/unit/base_operation.test.js
@@ -26,10 +26,10 @@
test('should extract available query string parameters', t => {
const base_operation = new BaseOperation()
- t.same(base_operation.qs({}, ['a', 'b', 'c']), {})
- t.same(base_operation.qs({a: 1}, ['a', 'b', 'c']), {a: 1})
- t.same(base_operation.qs({a: 1, c: 2}, ['a', 'b', 'c']), {a: 1, c: 2})
- t.same(base_operation.qs({a: 1, c: 2, d: 3}, ['a', 'b', 'c']), {a: 1, c: 2})
+ t.deepEqual(base_operation.qs({}, ['a', 'b', 'c']), {})
+ t.deepEqual(base_operation.qs({a: 1}, ['a', 'b', 'c']), {a: 1})
+ t.deepEqual(base_operation.qs({a: 1, c: 2}, ['a', 'b', 'c']), {a: 1, c: 2})
+ t.deepEqual(base_operation.qs({a: 1, c: 2, d: 3}, ['a', 'b', 'c']), {a: 1, c: 2})
})
test('should return provided namespace', t => {
@@ -50,9 +50,18 @@
})
test('should return request parameters from path', t => {
- const base_operation = new BaseOperation({api: 'https://api.com/', api_key: 'default'})
+ const base_operation = new BaseOperation({api: 'https://api.com/api/v1/', api_key: 'default'})
const params = base_operation.params('method', 'some/path')
- t.is(params.url, 'https://api.com/some/path')
+ t.is(params.url, 'https://api.com/api/v1/some/path')
+ t.is(params.method, 'method')
+ t.true(params.json, true)
+ t.true(params.headers.hasOwnProperty('Authorization'))
+})
+
+test('should return request parameters from path without ending forward slash', t => {
+ const base_operation = new BaseOperation({api: 'https://api.com/api/v1', api_key: 'default'})
+ const params = base_operation.params('method', 'some/path')
+ t.is(params.url, 'https://api.com/api/v1/some/path')
t.is(params.method, 'method')
t.true(params.json, true)
t.true(params.headers.hasOwnProperty('Authorization'))
diff --git a/test/unit/packages.test.js b/test/unit/packages.test.js
index c2fd758..1baa1b5 100644
--- a/test/unit/packages.test.js
+++ b/test/unit/packages.test.js
@@ -31,7 +31,7 @@
stub.request = req => {
t.is(req.url, `${params.api}namespaces/${options.namespace}/packages`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
- t.same(req.qs, {limit: 100, skip: 50, public: true})
+ t.deepEqual(req.qs, {limit: 100, skip: 50, public: true})
t.is(req.method, 'GET')
return Promise.resolve()
}
@@ -176,8 +176,8 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/packages/${package_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, packageBody)
- t.same(req.qs, {})
+ t.deepEqual(req.body, packageBody)
+ t.deepEqual(req.qs, {})
return Promise.resolve()
}
@@ -197,8 +197,8 @@
t.is(req.url, `${params.api}namespaces/${namespace}/packages/${package_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, packageBody)
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.body, packageBody)
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
@@ -239,8 +239,8 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/packages/${package_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, packageBody)
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.body, packageBody)
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
diff --git a/test/unit/rules.test.js b/test/unit/rules.test.js
index 2111256..a71f1e6 100644
--- a/test/unit/rules.test.js
+++ b/test/unit/rules.test.js
@@ -31,7 +31,7 @@
stub.request = req => {
t.is(req.url, `${params.api}namespaces/${options.namespace}/rules`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
- t.same(req.qs, {limit: 100, skip: 50})
+ t.deepEqual(req.qs, {limit: 100, skip: 50})
t.is(req.method, 'GET')
return Promise.resolve()
}
@@ -176,8 +176,8 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/rules/${rule_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, {action: rule.action, trigger: rule.trigger})
- t.same(req.qs, {})
+ t.deepEqual(req.body, {action: rule.action, trigger: rule.trigger})
+ t.deepEqual(req.qs, {})
return Promise.resolve()
}
@@ -197,8 +197,8 @@
t.is(req.url, `${params.api}namespaces/${namespace}/rules/${rule_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, {action: rule.action, trigger: rule.trigger})
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.body, {action: rule.action, trigger: rule.trigger})
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
@@ -261,8 +261,8 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/rules/${rule_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
- t.same(req.body, {action: rule.action, trigger: rule.trigger})
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.body, {action: rule.action, trigger: rule.trigger})
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
@@ -280,7 +280,7 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/rules/${rule_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'POST')
- t.same(req.body, {status: 'active'})
+ t.deepEqual(req.body, {status: 'active'})
return Promise.resolve()
}
@@ -298,7 +298,7 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/rules/${rule_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'POST')
- t.same(req.body, {status: 'inactive'})
+ t.deepEqual(req.body, {status: 'inactive'})
return Promise.resolve()
}
diff --git a/test/unit/triggers.test.js b/test/unit/triggers.test.js
index 1cb7fd0..2b7bab4 100644
--- a/test/unit/triggers.test.js
+++ b/test/unit/triggers.test.js
@@ -31,7 +31,7 @@
stub.request = req => {
t.is(req.url, `${params.api}namespaces/${options.namespace}/triggers`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
- t.same(req.qs, {limit: 100, skip: 50})
+ t.deepEqual(req.qs, {limit: 100, skip: 50})
t.is(req.method, 'GET')
return Promise.resolve()
}
@@ -176,7 +176,7 @@
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
t.is(Object.keys(req.body).length, 0)
- t.same(req.qs, {})
+ t.deepEqual(req.qs, {})
return Promise.resolve()
}
@@ -196,7 +196,7 @@
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
t.is(Object.keys(req.body).length, 0)
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
@@ -237,7 +237,7 @@
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'PUT')
t.is(Object.keys(req.body).length, 0)
- t.same(req.qs, {overwrite: true})
+ t.deepEqual(req.qs, {overwrite: true})
return Promise.resolve()
}
@@ -273,7 +273,7 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/triggers/${trigger_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'POST')
- t.same(req.body, {})
+ t.deepEqual(req.body, {})
return Promise.resolve()
}
@@ -291,7 +291,7 @@
t.is(req.url, `${params.api}namespaces/${params.namespace}/triggers/${trigger_name}`)
t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
t.is(req.method, 'POST')
- t.same(req.body, {a: 1, b: 2})
+ t.deepEqual(req.body, {a: 1, b: 2})
return Promise.resolve()
}