Test case and fix for #121 (#122)
authorLars Trieloff <lars@trieloff.net>
Wed, 11 Jul 2018 13:29:25 +0000 (15:29 +0200)
committerJames Thomas <jthomas.uk@gmail.com>
Wed, 11 Jul 2018 13:29:25 +0000 (14:29 +0100)
* Simple fix and tests for apache/incubator-openwhisk-client-js#121

- if an `options.exec` object is provided, use it
- override derived or inferred values in `body.exec` in the process

lib/actions.js
test/unit/actions.test.js

index 06f205d..58ee064 100644 (file)
@@ -50,6 +50,11 @@ class Actions extends Resources {
     }
     const body = {exec: {kind: options.kind || 'nodejs:default', code: options.action}}
 
+    // allow options to override the derived exec object
+    if (options.exec) {
+      body.exec = Object.assign(body.exec, options.exec)
+    }
+
     if (options.action instanceof Buffer) {
       body.exec.code = options.action.toString('base64')
     } else if (typeof options.action === 'object') {
index c3a6455..4873d32 100644 (file)
@@ -444,3 +444,51 @@ test('should pass through requested User-Agent header', t => {
 
   return actions.create({name: '12345', action, version, 'User-Agent': userAgent})
 })
+
+test('should pass through exec.image parameter', t => {
+  t.plan(1)
+  const image = 'openwhisk/action-nodejs-v8:latest'
+  const exec = { image: image }
+  const client = {}
+  const actions = new Actions(client)
+  const action = 'function main() { // main function body};'
+  const version = '1.0.0'
+
+  client.request = (method, path, options) => {
+    t.is(options.body.exec.image, image)
+  }
+
+  return actions.create({name: '12345', action, version, exec, kind: 'blackbox'})
+})
+
+test('should pass through exec.image parameter (for all kinds)', t => {
+  t.plan(1)
+  const image = 'openwhisk/action-nodejs-v8:latest'
+  const exec = { image: image }
+  const client = {}
+  const actions = new Actions(client)
+  const action = 'function main() { // main function body};'
+  const version = '1.0.0'
+
+  client.request = (method, path, options) => {
+    t.is(options.body.exec.image, image)
+  }
+
+  return actions.create({name: '12345', action, version, exec, kind: 'xyz'})
+})
+
+test('should not reset kind parameter when passing through exec.image parameter', t => {
+  t.plan(1)
+  const image = 'openwhisk/action-nodejs-v8:latest'
+  const exec = { image: image }
+  const client = {}
+  const actions = new Actions(client)
+  const action = 'function main() { // main function body};'
+  const version = '1.0.0'
+
+  client.request = (method, path, options) => {
+    t.is(options.body.exec.kind, 'xyz')
+  }
+
+  return actions.create({name: '12345', action, version, exec, kind: 'xyz'})
+})