style: add .editorconfig, eslint and reformat js file (#63)
authorRóbert Kiss <erT78gb@gmail.com>
Tue, 3 Apr 2018 08:22:47 +0000 (10:22 +0200)
committerJames Thomas <jthomas.uk@gmail.com>
Tue, 3 Apr 2018 08:22:47 +0000 (09:22 +0100)
* style: add .editorconfig and reformat js file

use 2 space indent in every file

* style: add eslint and reformat code to apply style

* ci: add 'npm run lint' to travis and as pre-commit hook

* ci: move 'npm run lint' -> tools/travis/build.sh

* doc: Add standard code style badge

* style: Apply standard style rules

* doc: replace eslint part in contributing.md

* build: Add lint script to package.json

* update: type definitions

* add backward compatibility of client options

* change method names

* delete "deprecated" mark from main.d.ts file

* fix integration test options

38 files changed:
.editorconfig [new file with mode: 0644]
CONTRIBUTING.md
README.md
lib/actions.js
lib/activations.js
lib/base_operation.js
lib/client.js
lib/feeds.js
lib/main.d.ts
lib/names.js
lib/openwhisk_error.js
lib/packages.js
lib/resources.js
lib/routes.js
lib/rules.js
package.json
test/integration/actions.test.js
test/integration/activations.test.js
test/integration/feeds.test.js
test/integration/namespaces.test.js
test/integration/packages.test.js
test/integration/routes.test.js
test/integration/rules.test.js
test/integration/triggers.test.js
test/integration/utils.js
test/unit/actions.test.js
test/unit/activations.test.js
test/unit/base_operation.test.js
test/unit/client.test.js
test/unit/feeds.test.js
test/unit/names.test.js
test/unit/namespaces.test.js
test/unit/packages.test.js
test/unit/resources.test.js
test/unit/routes.test.js
test/unit/rules.test.js
test/unit/triggers.test.js
tools/travis/build.sh

diff --git a/.editorconfig b/.editorconfig
new file mode 100644 (file)
index 0000000..6e87a00
--- /dev/null
@@ -0,0 +1,13 @@
+# Editor configuration, see http://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false
index fcb1d0e..9167b53 100644 (file)
@@ -65,3 +65,4 @@ code base. Some basic rules include:
 
  - all files must have the Apache license in the header.
  - all PRs must have passing builds for all operating systems.
+ - follow the [standard](https://standardjs.com) style rules. Linter run on CI and automatically as [pre-commit hook](http://githooks.com/). For automatic fixing run `npm run standard-fix`.  
index 3ce22fe..280440f 100644 (file)
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@
 [![Build Status](https://travis-ci.org/apache/incubator-openwhisk-client-js.svg?branch=master)](https://travis-ci.org/apache/incubator-openwhisk-client-js)
 [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)
 [![codecov](https://codecov.io/gh/apache/incubator-openwhisk-client-js/branch/master/graph/badge.svg)](https://codecov.io/gh/apache/incubator-openwhisk-client-js)
+[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)
 
 JavaScript client library for the [Apache OpenWhisk](https://github.com/apache/incubator-openwhisk) platform.
 Provides a wrapper around the [OpenWhisk APIs](https://github.com/apache/incubator-openwhisk/blob/fb001afa237476eda0c0f6494ee92702e5986538/core/controller/src/main/resources/apiv1swagger.json) (Swagger JSON).
@@ -33,7 +34,9 @@ exports.main = action
 _All methods return a Promise resolved asynchronously with the results. Failures are available through the catch method._
 
 ```javascript
-ow.resource.operation().then(function () { // success! }).catch(function (err) { // failed! })
+ow.resource.operation()
+  .then(function () { /* success! */ })
+  .catch(function (err) { /* failed! */ })
 ```
 
 Users can override default constructor parameters by passing in explicit options as shown in the example below.
@@ -158,7 +161,7 @@ ow.actions.get(name).then(action => {
 ```javascript
 ow.actions.list()
   .then(actions => ow.actions.invoke(actions))
-  .then(result => ...)
+  .then(result => { /* ... */ })
 ```
 
 ### list packages
index 77a1a57..06f205d 100644 (file)
@@ -22,10 +22,10 @@ class Actions extends Resources {
   }
 
   get (options) {
-    options = this.parse_options(options)
+    options = this.parseOptions(options)
     options.qs = this.qs(options, ['code'])
 
-    return this.operation_with_id('GET', options)
+    return this.operationWithId('GET', options)
   }
 
   invoke (options) {
@@ -39,16 +39,16 @@ class Actions extends Resources {
 
   create (options) {
     options.qs = this.qs(options, ['overwrite'])
-    options.body = this.action_body(options)
+    options.body = this.actionBody(options)
 
     return super.create(options)
   }
 
-  action_body (options) {
+  actionBody (options) {
     if (!options.hasOwnProperty('action')) {
       throw new Error(messages.MISSING_ACTION_BODY_ERROR)
     }
-    const body = { exec: { kind: options.kind || 'nodejs:default', code: options.action } }
+    const body = {exec: {kind: options.kind || 'nodejs:default', code: options.action}}
 
     if (options.action instanceof Buffer) {
       body.exec.code = options.action.toString('base64')
@@ -57,15 +57,15 @@ class Actions extends Resources {
     }
 
     if (typeof options.params === 'object') {
-      body.parameters = Object.keys(options.params).map(key => ({ key, value: options.params[key] }))
+      body.parameters = Object.keys(options.params).map(key => ({key, value: options.params[key]}))
     }
 
-    if(options.version){
-      body.version = options.version;
+    if (options.version) {
+      body.version = options.version
     }
 
     if (options.limits) {
-      body.limits = options.limits;
+      body.limits = options.limits
     }
 
     if (typeof options.annotations === 'object') {
index 9cd3fe1..055d479 100644 (file)
@@ -27,13 +27,13 @@ class Activations extends BaseOperation {
   }
 
   activation (options, path) {
-    const id = this.get_activation(options)
+    const id = this.getActivation(options)
     const namespace = this.namespace(options)
-    const url_path = `namespaces/${namespace}/activations/${id}` + (path ? `/${path}` : '')
-    return this.client.request('GET', url_path)
+    const urlPath = `namespaces/${namespace}/activations/${id}` + (path ? `/${path}` : '')
+    return this.client.request('GET', urlPath)
   }
 
-  get_activation (options) {
+  getActivation (options) {
     if (typeof options === 'string') return options
     options = options || {}
 
index d8be106..ebdb074 100644 (file)
@@ -12,11 +12,11 @@ class BaseOperation {
 
   request (params) {
     const namespace = this.namespace(params.options)
-    const path = this.resource_path(namespace, params.id)
+    const path = this.resourcePath(namespace, params.id)
     return this.client.request(params.method, path, params.options)
   }
 
-  resource_path (namespace, id) {
+  resourcePath (namespace, id) {
     let path = `namespaces/${namespace}/${this.resource}`
 
     if (id) {
@@ -35,7 +35,7 @@ class BaseOperation {
       return encodeURIComponent(this.client.options.namespace)
     }
 
-    return encodeURIComponent(names.default_namespace())
+    return encodeURIComponent(names.defaultNamespace())
   }
 
   qs (options, names) {
index 73dfe4a..337fb22 100644 (file)
@@ -17,75 +17,86 @@ const http = require('http')
  *
  */
 const rp = opts => {
-    if (opts.qs) {
-        // we turn the qs struct into a query string over the url
-        let first = true
-        for (let key in opts.qs) {
-            const str = `${encodeURIComponent(key)}=${encodeURIComponent(opts.qs[key])}`
-            if (first) {
-                opts.url += `?${str}`
-                first = false
-            } else {
-                opts.url += `&${str}`
-            }
-        }
+  if (opts.qs) {
+    // we turn the qs struct into a query string over the url
+    let first = true
+    for (let key in opts.qs) {
+      const str = `${encodeURIComponent(key)}=${encodeURIComponent(opts.qs[key])}`
+      if (first) {
+        opts.url += `?${str}`
+        first = false
+      } else {
+        opts.url += `&${str}`
+      }
     }
+  }
 
-    // it appears that certain call paths from our code do not set the
-    // opts.json field to true; rp is apparently more resilient to
-    // this situation than needle
-    opts.json = true
-
-    return needle(opts.method.toLowerCase(), // needle takes e.g. 'put' not 'PUT'
-                  opts.url,
-                  opts.body || opts.params,
-                  opts)
-        .then(resp => {
-            if (resp.statusCode >= 400) {
-                // we turn >=400 statusCode responses into exceptions
-                const error = new Error(resp.body.error || resp.statusMessage)
-                error.statusCode = resp.statusCode   // the http status code
-                error.options = opts                 // the code below requires access to the input opts
-                error.error = resp.body              // the error body
-                throw error
-            } else {
-                // otherwise, the response body is the expected return value
-                return resp.body
-            }
-        })
+  // it appears that certain call paths from our code do not set the
+  // opts.json field to true; rp is apparently more resilient to
+  // this situation than needle
+  opts.json = true
+
+  return needle(opts.method.toLowerCase(), // needle takes e.g. 'put' not 'PUT'
+    opts.url,
+    opts.body || opts.params,
+    opts)
+    .then(resp => {
+      if (resp.statusCode >= 400) {
+        // we turn >=400 statusCode responses into exceptions
+        const error = new Error(resp.body.error || resp.statusMessage)
+        error.statusCode = resp.statusCode // the http status code
+        error.options = opts // the code below requires access to the input opts
+        error.error = resp.body // the error body
+        throw error
+      } else {
+        // otherwise, the response body is the expected return value
+        return resp.body
+      }
+    })
 }
 
 class Client {
+  /**
+   * @constructor
+   * @param {Object} options - options of the Client
+   * @param {string} [options.api]
+   * @param {string} [options.api_key]
+   * @param {string} [options.apihost]
+   * @param {string} [options.namespace]
+   * @param {boolean} [options.ignore_certs]
+   * @param {string} [options.apigw_token]
+   * @param {string} [options.apigw_space_guid]
+   */
   constructor (options) {
-    this.options = this.parse_options(options || {})
+    this.options = this.parseOptions(options || {})
   }
 
-  parse_options (options) {
-    const api_key = options.api_key || process.env['__OW_API_KEY']
-    const ignore_certs = options.ignore_certs || false
+  parseOptions (options) {
+    const apiKey = options.api_key || process.env['__OW_API_KEY']
+    const ignoreCerts = options.ignore_certs || false
     // if apihost is available, parse this into full API url
     const api = options.api ||
-      this.url_from_apihost(options.apihost || process.env['__OW_API_HOST'])
+      this.urlFromApihost(options.apihost || process.env['__OW_API_HOST'])
 
     // optional tokens for API GW service
-    const apigw_token = options.apigw_token || process.env['__OW_APIGW_TOKEN']
-    let apigw_space_guid = options.apigw_space_guid || process.env['__OW_APIGW_SPACE_GUID']
+    const apigwToken = options.apigw_token || process.env['__OW_APIGW_TOKEN']
+    let apigwSpaceGuid = options.apigw_space_guid || process.env['__OW_APIGW_SPACE_GUID']
 
     // unless space is explicitly passed, default to using auth uuid.
-    if (apigw_token && !apigw_space_guid) {
-      apigw_space_guid = api_key.split(':')[0]
+    if (apigwToken && !apigwSpaceGuid) {
+      apigwSpaceGuid = apiKey.split(':')[0]
     }
 
-    if (!api_key) {
+    if (!apiKey) {
       throw new Error(`${messages.INVALID_OPTIONS_ERROR} Missing api_key parameter.`)
     } else if (!api) {
       throw new Error(`${messages.INVALID_OPTIONS_ERROR} Missing either api or apihost parameters.`)
     }
 
-    return {api_key, api, ignore_certs, namespace: options.namespace, apigw_token, apigw_space_guid}
+    return {apiKey: apiKey, api, ignoreCerts: ignoreCerts, namespace: options.namespace, apigwToken: apigwToken, apigwSpaceGuid: apigwSpaceGuid}
   }
 
-  url_from_apihost (apihost) {
+  urlFromApihost (apihost) {
     if (!apihost) return apihost
     let url = `${apihost}/api/v1/`
 
@@ -99,42 +110,42 @@ class Client {
 
   request (method, path, options) {
     const req = this.params(method, path, options)
-    return rp(req).catch(err => this.handle_errors(err))
+    return rp(req).catch(err => this.handleErrors(err))
   }
 
   params (method, path, options) {
     return Object.assign({
       json: true,
       method: method,
-      url: this.path_url(path),
-      rejectUnauthorized: !this.options.ignore_certs,
+      url: this.pathUrl(path),
+      rejectUnauthorized: !this.options.ignoreCerts,
       headers: {
-        Authorization: this.auth_header()
+        Authorization: this.authHeader()
       }
     }, options)
   }
 
-  path_url (url_path) {
-    const endpoint = this.api_url()
-    endpoint.pathname = url.resolve(endpoint.pathname, url_path)
+  pathUrl (urlPath) {
+    const endpoint = this.apiUrl()
+    endpoint.pathname = url.resolve(endpoint.pathname, urlPath)
     return url.format(endpoint)
   }
 
-  api_url () {
+  apiUrl () {
     return url.parse(
       this.options.api.endsWith('/') ? this.options.api : this.options.api + '/'
     )
   }
 
-  auth_header () {
-    const api_key_base64 = Buffer.from(this.options.api_key).toString('base64')
-    return `Basic ${api_key_base64}`
+  authHeader () {
+    const apiKeyBase64 = Buffer.from(this.options.apiKey).toString('base64')
+    return `Basic ${apiKeyBase64}`
   }
 
-  handle_errors (reason) {
+  handleErrors (reason) {
     let message = `Unknown Error From API: ${reason.message}`
     if (reason.hasOwnProperty('statusCode')) {
-      const responseError = this.err_message(reason.error)
+      const responseError = this.errMessage(reason.error)
       message = `${reason.options.method} ${reason.options.url} Returned HTTP ${reason.statusCode} (${http.STATUS_CODES[reason.statusCode]}) --> "${responseError}"`
     }
 
@@ -143,7 +154,7 @@ class Client {
 
   // Error messages might be returned from platform or using custom
   // invocation result response from action.
-  err_message (error) {
+  errMessage (error) {
     if (!error) return 'Response Missing Error Message.'
 
     if (typeof error.error === 'string') {
index 1ecc151..6c79104 100644 (file)
@@ -30,49 +30,49 @@ class Feeds {
   }
 
   feed (event, options) {
-    if (!this.feed_name(options)) {
+    if (!this.feedName(options)) {
       throw new Error(messages.MISSING_FEED_NAME_ERROR)
     }
 
-    if (!this.trigger_name(options)) {
+    if (!this.triggerName(options)) {
       throw new Error(messages.MISSING_FEED_TRIGGER_ERROR)
     }
 
-    const invoke_options = this.invoke_options(event, options)
-    return this.actions.invoke(invoke_options)
+    const invokeOptions = this.invokeOptions(event, options)
+    return this.actions.invoke(invokeOptions)
   }
 
-  feed_name (options) {
+  feedName (options) {
     return options.feedName || options.name
   }
 
-  trigger_name (options) {
+  triggerName (options) {
     if (!options.trigger) return
     if (options.trigger.startsWith('/')) return options.trigger
 
-    const ns = this.client.options.namespace || names.default_namespace()
+    const ns = this.client.options.namespace || names.defaultNamespace()
 
     return `/${ns}/${options.trigger}`
   }
 
-  invoke_options (event, options) {
-    const params = this.invoke_params(event, options)
+  invokeOptions (event, options) {
+    const params = this.invokeParams(event, options)
 
-    const invoke_options = {
-      name: this.feed_name(options),
+    const invokeOptions = {
+      name: this.feedName(options),
       namespace: options.namespace,
       blocking: true,
       params
     }
 
-    return invoke_options
+    return invokeOptions
   }
 
-  invoke_params (event, options) {
+  invokeParams (event, options) {
     const params = {
       lifecycleEvent: event,
-      authKey: this.client.options.api_key,
-      triggerName: this.trigger_name(options)
+      authKey: this.client.options.apiKey,
+      triggerName: this.triggerName(options)
     }
 
     // Add user-provided invocation parameters
index 94ea0e3..289129e 100644 (file)
@@ -294,4 +294,4 @@ declare namespace openwhisk {
         apidoc: Swagger.Spec;
     }
 
-}
\ No newline at end of file
+}
index 391d54a..8f69b6a 100644 (file)
@@ -3,24 +3,24 @@
 
 const messages = require('./messages')
 
-const default_namespace = () => {
+const defaultNamespace = () => {
   return process.env['__OW_NAMESPACE'] || '_'
 }
 
 // valid resource identifiers
-// - resource_name
-// - package/resource_name
-// - /namespace/resource_name
-// - /namespace/package/resource_name
-// - namespace/package/resource_name
-const parse_id_and_ns = resource => {
+// - resourceName
+// - package/resourceName
+// - /namespace/resourceName
+// - /namespace/package/resourceName
+// - namespace/package/resourceName
+const parseIdAndNs = resource => {
   const parts = (resource.match(/\//g) || []).length
   const names = resource.split('/')
 
   // checking for `resource_name` and `package/resource_name`
   if (parts === 0 ||
      (parts === 1 && !resource.startsWith('/'))) {
-    return { namespace: default_namespace(), id: resource }
+    return { namespace: defaultNamespace(), id: resource }
   }
 
   // checking for `/namespace/resource_name` and `namespace/package/resource_name`
@@ -40,11 +40,11 @@ const parse_id_and_ns = resource => {
   throw new Error(messages.INVALID_RESOURCE_ERROR)
 }
 
-const parse_namespace = id => parse_id_and_ns(id).namespace
-const parse_id = id => parse_id_and_ns(id).id
+const parseNamespace = id => parseIdAndNs(id).namespace
+const parseId = id => parseIdAndNs(id).id
 
 module.exports = {
-  default_namespace,
-  parse_namespace,
-  parse_id
+  defaultNamespace: defaultNamespace,
+  parseNamespace: parseNamespace,
+  parseId: parseId
 }
index eb64e17..6780726 100644 (file)
@@ -1,14 +1,14 @@
 // Licensed to the Apache Software Foundation (ASF) under one or more contributor
 // license agreements; and to You under the Apache License, Version 2.0.
 
-'use strict';
+'use strict'
 
-module.exports = function OpenWhiskError(message, error, statusCode) {
-  Error.captureStackTrace(this, this.constructor);
-  this.name = this.constructor.name;
-  this.message = message;
-  this.error = error;
-  this.statusCode = statusCode;
-};
+module.exports = function OpenWhiskError (message, error, statusCode) {
+  Error.captureStackTrace(this, this.constructor)
+  this.name = this.constructor.name
+  this.message = message
+  this.error = error
+  this.statusCode = statusCode
+}
 
-require('util').inherits(module.exports, Error);
+require('util').inherits(module.exports, Error)
index 27391b6..fc649e9 100644 (file)
@@ -24,7 +24,7 @@ class Packages extends Resources {
   }
 
   create (options) {
-    options = this.parse_options(options)
+    options = this.parseOptions(options)
     options.qs = this.qs(options, ['overwrite'])
     options.body = options.package || {}
 
index 15cf720..de32c26 100644 (file)
@@ -18,7 +18,7 @@ class Resources extends BaseOperation {
   }
 
   get (options) {
-    return this.operation_with_id('GET', options)
+    return this.operationWithId('GET', options)
   }
 
   invoke (options) {
@@ -27,64 +27,64 @@ class Resources extends BaseOperation {
       options.qs = this.qs(options, this.qs_options.invoke || [])
       options.body = this.payload(options)
     }
-    return this.operation_with_id('POST', options)
+    return this.operationWithId('POST', options)
   }
 
   create (options) {
-    return this.operation_with_id('PUT', options)
+    return this.operationWithId('PUT', options)
   }
 
   delete (options) {
-    return this.operation_with_id('DELETE', options)
+    return this.operationWithId('DELETE', options)
   }
 
   update (options) {
-    options = this.parse_options(options)
+    options = this.parseOptions(options)
     options.overwrite = true
     return this.create(options)
   }
 
   operation (method, options) {
-    options = this.parse_options(options)
+    options = this.parseOptions(options)
     const id = options.id
-    return this.request({ method, id, options })
+    return this.request({method, id, options})
   }
 
-  operation_with_id (method, options) {
+  operationWithId (method, options) {
     if (Array.isArray(options)) {
-      return Promise.all(options.map(i => this.operation_with_id(method, i)))
+      return Promise.all(options.map(i => this.operationWithId(method, i)))
     }
 
-    options = this.parse_options(options)
-    options.namespace = this.parse_namespace(options)
-    options.id = this.parse_id(options)
+    options = this.parseOptions(options)
+    options.namespace = this.parseNamespace(options)
+    options.id = this.parseId(options)
     return this.operation(method, options)
   }
 
-  parse_options (options) {
+  parseOptions (options) {
     if (typeof options === 'string') {
-      options = { name: options }
+      options = {name: options}
     }
 
     return options || {}
   }
 
-  parse_id (options) {
-    const id = this.retrieve_id(options)
-    return names.parse_id(id)
+  parseId (options) {
+    const id = this.retrieveId(options)
+    return names.parseId(id)
   }
 
-  parse_namespace (options) {
-    const id = this.retrieve_id(options)
+  parseNamespace (options) {
+    const id = this.retrieveId(options)
 
     if (id.startsWith('/')) {
-      return names.parse_namespace(id)
+      return names.parseNamespace(id)
     }
 
     return options.namespace
   }
 
-  retrieve_id (options) {
+  retrieveId (options) {
     options = options || {}
     const id = this.identifiers.find(name => options.hasOwnProperty(name))
 
index eb55026..a40e85e 100644 (file)
@@ -22,8 +22,8 @@ class Routes extends BaseOperation {
 
   list (options) {
     options = options || {}
-    if (this.has_basepath(options)) {
-      options.basepath = this.calculate_basepath(options)
+    if (this.hasBasepath(options)) {
+      options.basepath = this.calculateBasepath(options)
     }
 
     const qs = this.qs(options, ['relpath', 'basepath', 'operation', 'limit', 'skip'])
@@ -33,27 +33,27 @@ class Routes extends BaseOperation {
   qs (options, names) {
     const result = super.qs(options, names)
 
-    if (this.has_access_token()) {
-      result.accesstoken = this.client.options.apigw_token
-      result.spaceguid = this.client.options.apigw_space_guid
+    if (this.hasAccessToken()) {
+      result.accesstoken = this.client.options.apigwToken
+      result.spaceguid = this.client.options.apigwSpaceGuid
     }
 
     return result
   }
 
-  has_basepath (options) {
+  hasBasepath (options) {
     return !!(options.name || options.basepath)
   }
 
   basepath (options) {
-    if (!this.has_basepath(options)) {
+    if (!this.hasBasepath(options)) {
       throw new Error(messages.MISSING_BASEPATH_ERROR)
     }
 
-    return this.calculate_basepath(options)
+    return this.calculateBasepath(options)
   }
 
-  calculate_basepath (options) {
+  calculateBasepath (options) {
     if (options.name && options.basepath) {
       throw new Error(messages.INVALID_BASEPATH_ERROR)
     }
@@ -61,7 +61,7 @@ class Routes extends BaseOperation {
     return options.basepath || options.name
   }
 
-  missing_basepath (options) {
+  missingBasepath (options) {
     return !(options.name || options.basepath)
   }
 
@@ -75,12 +75,12 @@ class Routes extends BaseOperation {
   }
 
   create (options) {
-    const body = this.create_body(options || {})
+    const body = this.createBody(options || {})
     const qs = this.qs(options, ['responsetype'])
     return this.client.request('POST', this.routeMgmtApiPath('createApi'), { body, qs })
   }
 
-  create_body (options) {
+  createBody (options) {
     if (options.swagger) {
       return { apidoc: { namespace: '_', swagger: options.swagger } }
     }
@@ -91,17 +91,17 @@ class Routes extends BaseOperation {
       throw new Error(`Missing mandatory parameters: ${missing.join(', ')}`)
     }
 
-    return this.route_swagger_definition(options)
+    return this.routeSwaggerDefinition(options)
   }
 
-  route_swagger_definition (params) {
+  routeSwaggerDefinition (params) {
     const apidoc = {
       namespace: '_',
-      gatewayBasePath: this.route_base_path(params),
+      gatewayBasePath: this.routeBasepath(params),
       gatewayPath: params.relpath,
       gatewayMethod: params.operation,
-      id: `API:_:${this.route_base_path(params)}`,
-      action: this.route_swagger_action(params)
+      id: `API:_:${this.routeBasepath(params)}`,
+      action: this.routeSwaggerAction(params)
     }
 
     if (params.name) {
@@ -111,37 +111,37 @@ class Routes extends BaseOperation {
     return { apidoc }
   }
 
-  route_swagger_action (params) {
-    const id = names.parse_id(params.action)
+  routeSwaggerAction (params) {
+    const id = names.parseId(params.action)
     let namespace = decodeURIComponent(this.namespace(params))
     if (params.action.startsWith('/')) {
-      namespace = names.parse_namespace(params.action)
+      namespace = names.parseNamespace(params.action)
     }
     return {
       name: id,
       namespace: namespace,
       backendMethod: `GET`,
-      backendUrl: this.action_url_path(id, namespace),
-      authkey: this.client.options.api_key
+      backendUrl: this.actionUrlPath(id, namespace),
+      authkey: this.client.options.apiKey
     }
   }
 
-  route_base_path (params) {
+  routeBasepath (params) {
     return params.basepath || '/'
   }
 
-  action_url_path (id, namespace) {
+  actionUrlPath (id, namespace) {
     // web action path must contain package identifier. uses default for
     // non-explicit package.
     if (!id.includes('/')) {
       id = `default/${id}`
     }
 
-    return this.client.path_url(`web/${namespace}/${id}.http`)
+    return this.client.pathUrl(`web/${namespace}/${id}.http`)
   }
 
-  has_access_token () {
-    return !!this.client.options.apigw_token
+  hasAccessToken () {
+    return !!this.client.options.apigwToken
   }
 }
 
index 4d09291..6bacdec 100644 (file)
@@ -27,12 +27,12 @@ class Rules extends Resources {
 
   create (options) {
     options.qs = this.qs(options, ['overwrite'])
-    options.body = this.rule_body(options)
+    options.body = this.ruleBody(options)
 
     return super.create(options)
   }
 
-  rule_body (options) {
+  ruleBody (options) {
     options = options || {}
 
     if (!options.hasOwnProperty('action')) {
@@ -43,25 +43,28 @@ class Rules extends Resources {
       throw new Error(messages.MISSING_RULE_TRIGGER_ERROR)
     }
 
-    return {action: this.convert_to_fqn(options.action, options.namespace), trigger: this.convert_to_fqn(options.trigger, options.namespace)}
+    return {
+      action: this.convertToFqn(options.action, options.namespace),
+      trigger: this.convertToFqn(options.trigger, options.namespace)
+    }
   }
 
   enable (options) {
     options = options || {}
-    options.params = { status: 'active' }
+    options.params = {status: 'active'}
     return super.invoke(options)
   }
 
   disable (options) {
     options = options || {}
-    options.params = { status: 'inactive' }
+    options.params = {status: 'inactive'}
     return super.invoke(options)
   }
 
-  convert_to_fqn (identifier, namespace) {
+  convertToFqn (identifier, namespace) {
     if (identifier.startsWith('/')) return identifier
 
-    const ns = namespace || this.client.options.namespace || names.default_namespace()
+    const ns = namespace || this.client.options.namespace || names.defaultNamespace()
     return `/${ns}/${identifier}`
   }
 }
index cc3c540..54d84cd 100644 (file)
     "test": "tests"
   },
   "scripts": {
-    "test": "ava test/unit",
+    "test": "standard && ava test/unit",
     "test-integration": "ava test/integration/*.test.js",
     "code-coverage-build": "babel --out-dir=ecma5 lib",
     "code-coverage-run": "./tools/merge-coverage.sh",
-    "coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov"
+    "coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov",
+    "pre-commit-message": "Pre-commit tasks running ... & exit 0",
+    "lint": "standard",
+    "standard-fix": "standard --fix"
   },
+  "pre-commit": [
+    "pre-commit-message",
+    "standard-fix"
+  ],
   "repository": {
     "type": "git",
     "url": "git+https://github.com/openwhisk/openwhisk-client-js.git"
@@ -42,7 +49,9 @@
     "codecov": "^3.0.0",
     "jszip": "^3.1.3",
     "nyc": "^11.0.3",
-    "proxyquire": "2.0.1"
+    "pre-commit": "^1.2.2",
+    "proxyquire": "2.0.1",
+    "standard": "^11.0.1"
   },
   "dependencies": {
     "needle": "^2.1.0"
index 86b92f0..9533fce 100644 (file)
@@ -8,7 +8,7 @@ const Actions = require('../../lib/actions.js')
 const Client = require('../../lib/client.js')
 const JSZip = require('jszip')
 const Utils = require('./utils.js')
-const options = Utils.autoOptions();
+const options = Utils.autoOptions()
 
 const envParams = ['API_KEY', 'API_HOST', 'NAMESPACE']
 
@@ -53,24 +53,24 @@ test('list all actions using options namespace', t => {
 test('get a non-existing action, expecting 404', async t => {
   const actions = new Actions(new Client(options))
   await actions.get({name: 'glorfindel'}).catch(err => {
-      t.is(err.statusCode, 404)
+    t.is(err.statusCode, 404)
   })
 })
 
 test('delete a non-existing action, expecting 404', async t => {
   const actions = new Actions(new Client(options))
   await actions.delete({name: 'glorfindel'}).catch(err => {
-      t.is(err.statusCode, 404)
+    t.is(err.statusCode, 404)
   })
 })
 
 test('create with an existing action, expecting 409', async t => {
   const actions = new Actions(new Client(options))
-    await actions.create({name: 'glorfindel2', action: 'x=>x'})
-        .then(() => actions.create({name: 'glorfindel2', action: 'x=>x'}))
-        .catch(err => {
-            t.is(err.statusCode, 409)
-        })
+  await actions.create({name: 'glorfindel2', action: 'x=>x'})
+    .then(() => actions.create({name: 'glorfindel2', action: 'x=>x'}))
+    .catch(err => {
+      t.is(err.statusCode, 409)
+    })
 })
 
 test('create, get and delete an action', t => {
@@ -80,14 +80,17 @@ test('create, get and delete an action', t => {
   }
 
   const actions = new Actions(new Client(options))
-  return actions.create({actionName: 'random_action_test', action: 'function main() {return {payload:"testing"}}'}).then(result => {
+  return actions.create({
+    actionName: 'random_action_test',
+    action: 'function main() {return {payload:"testing"}}'
+  }).then(result => {
     t.is(result.name, 'random_action_test')
     t.is(result.namespace, NAMESPACE)
     t.is(result.exec.kind, 'nodejs:6')
     t.is(result.exec.code, 'function main() {return {payload:"testing"}}')
-    return actions.get({actionName: 'random_action_test'}).then(action_result => {
-      t.is(action_result.name, 'random_action_test')
-      t.is(action_result.namespace, NAMESPACE)
+    return actions.get({actionName: 'random_action_test'}).then(actionResult => {
+      t.is(actionResult.name, 'random_action_test')
+      t.is(actionResult.namespace, NAMESPACE)
       t.pass()
       return actions.delete({actionName: 'random_action_test'}).catch(errors)
     }).catch(errors)
@@ -101,13 +104,16 @@ test('create and update an action', t => {
   }
 
   const actions = new Actions(new Client(options))
-  return actions.create({actionName: 'random_update_tested', action: 'function main() {return {payload:"testing"}}'}).then(result => {
+  return actions.create({
+    actionName: 'random_update_tested',
+    action: 'function main() {return {payload:"testing"}}'
+  }).then(result => {
     t.is(result.name, 'random_update_tested')
     t.is(result.namespace, NAMESPACE)
     t.is(result.exec.kind, 'nodejs:6')
     t.is(result.exec.code, 'function main() {return {payload:"testing"}}')
-    return actions.update({actionName: 'random_update_tested', action: 'update test'}).then(update_result => {
-      t.is(update_result.exec.code, 'update test')
+    return actions.update({actionName: 'random_update_tested', action: 'update test'}).then(updateResult => {
+      t.is(updateResult.exec.code, 'update test')
       t.pass()
       return actions.delete({actionName: 'random_update_tested'}).catch(errors)
     }).catch(errors)
@@ -121,16 +127,24 @@ test('create, get and delete with parameters an action', t => {
   }
 
   const actions = new Actions(new Client(options))
-  return actions.create({name: 'random_action_params_test', params: { hello: 'world' }, action: 'function main() {return {payload:"testing"}}'}).then(result => {
+  return actions.create({
+    name: 'random_action_params_test',
+    params: {hello: 'world'},
+    action: 'function main() {return {payload:"testing"}}'
+  }).then(result => {
     t.is(result.name, 'random_action_params_test')
     t.is(result.namespace, NAMESPACE)
     t.deepEqual(result.parameters, [{key: 'hello', value: 'world'}])
     t.is(result.exec.kind, 'nodejs:6')
     t.is(result.exec.code, 'function main() {return {payload:"testing"}}')
-    return actions.update({actionName: 'random_action_params_test', params: { foo: 'bar' }, action: 'update test'}).then(update_result => {
-      t.is(update_result.name, 'random_action_params_test')
-      t.is(update_result.namespace, NAMESPACE)
-      t.deepEqual(update_result.parameters, [{key: 'foo', value: 'bar'}])
+    return actions.update({
+      actionName: 'random_action_params_test',
+      params: {foo: 'bar'},
+      action: 'update test'
+    }).then(updateResult => {
+      t.is(updateResult.name, 'random_action_params_test')
+      t.is(updateResult.namespace, NAMESPACE)
+      t.deepEqual(updateResult.parameters, [{key: 'foo', value: 'bar'}])
       t.pass()
       return actions.delete({name: 'random_action_params_test'}).catch(errors)
     }).catch(errors)
@@ -149,18 +163,18 @@ test('get an action with and without its code', t => {
     t.is(result.namespace, NAMESPACE)
     t.is(result.exec.kind, 'nodejs:6')
     t.is(result.exec.code, 'function main() {return {payload:"testing"}}')
-    return actions.get({actionName: 'random_action_get_test', code: false}).then(action_result => {
-      t.is(action_result.name, 'random_action_get_test')
-      t.is(action_result.namespace, NAMESPACE)
-      t.is(action_result.exec.code, undefined)
-      return actions.get({actionName: 'random_action_get_test', code: true}).then(action_result => {
-        t.is(action_result.name, 'random_action_get_test')
-        t.is(action_result.namespace, NAMESPACE)
-        t.is(action_result.exec.code, 'function main() {return {payload:"testing"}}')
-        return actions.get({actionName: 'random_action_get_test'}).then(action_result => {
-          t.is(action_result.name, 'random_action_get_test')
-          t.is(action_result.namespace, NAMESPACE)
-          t.is(action_result.exec.code, 'function main() {return {payload:"testing"}}')
+    return actions.get({actionName: 'random_action_get_test', code: false}).then(actionResult => {
+      t.is(actionResult.name, 'random_action_get_test')
+      t.is(actionResult.namespace, NAMESPACE)
+      t.is(actionResult.exec.code, undefined)
+      return actions.get({actionName: 'random_action_get_test', code: true}).then(actionResult => {
+        t.is(actionResult.name, 'random_action_get_test')
+        t.is(actionResult.namespace, NAMESPACE)
+        t.is(actionResult.exec.code, 'function main() {return {payload:"testing"}}')
+        return actions.get({actionName: 'random_action_get_test'}).then(actionTesult => {
+          t.is(actionTesult.name, 'random_action_get_test')
+          t.is(actionTesult.namespace, NAMESPACE)
+          t.is(actionTesult.exec.code, 'function main() {return {payload:"testing"}}')
           t.pass()
           return actions.delete({actionName: 'random_action_get_test'}).catch(errors)
         }).catch(errors)
@@ -177,8 +191,8 @@ test('invoke action with fully-qualified name', t => {
   }
 
   const actions = new Actions(new Client(options))
-  return actions.invoke({actionName: '/whisk.system/utils/sort', blocking: true}).then(invoke_result => {
-    t.true(invoke_result.response.success)
+  return actions.invoke({actionName: '/whisk.system/utils/sort', blocking: true}).then(invokeResult => {
+    t.true(invokeResult.response.success)
     t.pass()
   }).catch(errors)
 })
@@ -197,9 +211,13 @@ test('create, invoke and remove package action', t => {
   return zip.generateAsync({type: 'nodebuffer'}).then(content => {
     const actions = new Actions(new Client(options))
     return actions.create({actionName: 'random_package_action_test', action: content}).then(result => {
-      return actions.invoke({actionName: 'random_package_action_test', params: {hello: 'world'}, blocking: true}).then(invoke_result => {
-        t.deepEqual(invoke_result.response.result, {hello: 'world'})
-        t.true(invoke_result.response.success)
+      return actions.invoke({
+        actionName: 'random_package_action_test',
+        params: {hello: 'world'},
+        blocking: true
+      }).then(invokeResult => {
+        t.deepEqual(invokeResult.response.result, {hello: 'world'})
+        t.true(invokeResult.response.success)
         t.pass()
         return actions.delete({actionName: 'random_package_action_test'}).catch(errors)
       })
index 5c3d87f..56ef163 100644 (file)
@@ -7,7 +7,7 @@ const test = require('ava')
 const Activations = require('../../lib/activations.js')
 const Client = require('../../lib/client.js')
 const Utils = require('./utils.js')
-const options = Utils.autoOptions();
+const options = Utils.autoOptions()
 
 const envParams = ['API_KEY', 'API_HOST', 'NAMESPACE']
 
index d2ea95c..63ecd79 100644 (file)
@@ -8,7 +8,7 @@ const Feeds = require('../../lib/feeds.js')
 const Triggers = require('../../lib/triggers.js')
 const Client = require('../../lib/client.js')
 const Utils = require('./utils.js')
-const options = Utils.autoOptions();
+const options = Utils.autoOptions()
 
 const envParams = ['API_KEY', 'API_HOST', 'NAMESPACE']
 
@@ -21,7 +21,7 @@ envParams.forEach(key => {
 })
 
 const NAMESPACE = process.env.__OW_NAMESPACE
-var tempTest = Utils.getInsecureFlag() ? test.skip : test;
+const tempTest = Utils.getInsecureFlag() ? test.skip : test
 
 tempTest('create, get, update, and delete a feed', t => {
   const errors = err => {
@@ -31,19 +31,19 @@ tempTest('create, get, update, and delete a feed', t => {
 
   const feeds = new Feeds(new Client(options))
   const triggers = new Triggers(new Client(options))
-  const feed_params = {
+  const feedParams = {
     feedName: '/whisk.system/alarms/alarm',
     trigger: `/${NAMESPACE}/sample_feed_trigger`,
     params: {cron: '*/8 * * * * *', trigger_payload: {name: 'test', place: 'hello'}}
   }
-  return triggers.create({triggerName: 'sample_feed_trigger'}).then(() => feeds.create(feed_params)).then(result => {
+  return triggers.create({triggerName: 'sample_feed_trigger'}).then(() => feeds.create(feedParams)).then(result => {
     t.is(result.response.success, true)
-    return feeds.get(feed_params).then(get_result => {
-      t.is(get_result.response.success, true)
-      return feeds.delete(feed_params).then(feed_result => {
-        t.is(feed_result.response.success, true)
-        return feeds.update(feed_params).then(update_result => {
-          t.is(feed_result.response.success, false) // alarms does not currently support update, hence should fail
+    return feeds.get(feedParams).then(getTesult => {
+      t.is(getTesult.response.success, true)
+      return feeds.delete(feedParams).then(feedResult => {
+        t.is(feedResult.response.success, true)
+        return feeds.update(feedParams).then(() => {
+          t.is(feedResult.response.success, false) // alarms does not currently support update, hence should fail
           return triggers.delete({triggerName: 'sample_feed_trigger'}).then(() => {
             t.pass()
           })
index 9506619..08a461a 100644 (file)
@@ -7,7 +7,7 @@ const test = require('ava')
 const Namespaces = require('../../lib/namespaces.js')
 const Client = require('../../lib/client.js')
 const Utils = require('./utils.js')
-const options = Utils.autoOptions();
+const options = Utils.autoOptions()
 
 const envParams = ['API_KEY', 'API_HOST', 'NAMESPACE']
 
@@ -19,8 +19,6 @@ envParams.forEach(key => {
   }
 })
 
-const NAMESPACE = process.env.__OW_NAMESPACE
-
 test('list all namespaces', t => {
   const namespaces = new Namespaces(new Client(options))
   return namespaces.list().then(result => {
index d0a66e0..068a88b 100644 (file)
@@ -7,7 +7,7 @@ const test = require('ava')
 const Packages = require('../../lib/packages.js')
 const Client = require('../../lib/client.js')
 const Utils = require('./utils.js')
-const options = Utils.autoOptions();
+const options = Utils.autoOptions()
 
 const envParams = ['API_KEY', 'API_HOST', 'NAMESPACE']
 
@@ -52,7 +52,7 @@ test('list all packages using options namespace', t => {
 test('get a non-existing package, expecting 404', async t => {
   const packages = new Packages(new Client(options))
   await packages.get({name: 'glorfindel'}).catch(err => {
-      t.is(err.statusCode, 404)
+    t.is(err.statusCode, 404)
   })
 })
 
@@ -68,9 +68,9 @@ test('create, get and delete an package', t => {
     t.is(result.namespace, NAMESPACE)
     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')
-      t.is(package_result.namespace, NAMESPACE)
+    return packages.get({packageName: 'random_package_test'}).then(packageResult => {
+      t.is(packageResult.name, 'random_package_test')
+      t.is(packageResult.namespace, NAMESPACE)
       t.pass()
       return packages.delete({packageName: 'random_package_test'}).catch(errors)
     }).catch(errors)
@@ -89,8 +89,8 @@ test('create and update an package', t => {
     t.is(result.namespace, NAMESPACE)
     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')
+    return packages.update({packageName: 'random_package_update_test'}).then(updateResult => {
+      t.is(updateResult.version, '0.0.2')
       t.pass()
       return packages.delete({packageName: 'random_package_update_test'}).catch(errors)
     }).catch(errors)
index 949e07c..2195865 100644 (file)
@@ -8,7 +8,7 @@ const Actions = require('../../lib/actions.js')
 const Routes = require('../../lib/routes.js')
 const Client = require('../../lib/client.js')
 const Utils = require('./utils.js')
-const options = Utils.autoOptions();
+const options = Utils.autoOptions()
 
 const envParams = ['API_KEY', 'API_HOST', 'APIGW_TOKEN']
 
@@ -25,7 +25,12 @@ test.serial('create, retrieve and delete action route using token', t => {
   const actions = new Actions(new Client(options))
 
   return actions.create({actionName: 'routeAction', action: ''}).then(() => {
-    return routes.create({action: 'routeAction', basepath: '/testing', relpath: '/foo/bar', operation: 'POST'}).then(() => {
+    return routes.create({
+      action: 'routeAction',
+      basepath: '/testing',
+      relpath: '/foo/bar',
+      operation: 'POST'
+    }).then(() => {
       return routes.list({basepath: '/testing'}).then(results => {
         t.is(results.apis.length, 1)
         const apidoc = results.apis[0].value.apidoc
index 434bab9..7499b82 100644 (file)
@@ -9,7 +9,7 @@ const Triggers = require('../../lib/triggers.js')
 const Actions = require('../../lib/actions.js')
 const Client = require('../../lib/client.js')
 const Utils = require('./utils.js')
-const options = Utils.autoOptions();
+const options = Utils.autoOptions()
 
 const envParams = ['API_KEY', 'API_HOST', 'NAMESPACE']
 
@@ -54,7 +54,7 @@ test('list all rules using options namespace', t => {
 test('get a non-existing rule, expecting 404', async t => {
   const rules = new Rules(new Client(options))
   await rules.get({name: 'glorfindel'}).catch(err => {
-      t.is(err.statusCode, 404)
+    t.is(err.statusCode, 404)
   })
 })
 
@@ -70,14 +70,18 @@ test.serial('create, get and delete a rule', t => {
   const actions = new Actions(new Client(options))
   return actions.create({actionName: 'hello', action: 'function main() {return {payload:"Hello world"}}'}).then(() => {
     return triggers.create({triggerName: 'sample_rule_trigger'}).then(() => {
-      return rules.create({ruleName: 'random_rule_test', action: `/${NAMESPACE}/hello`, trigger: `/${NAMESPACE}/sample_rule_trigger`}).then(result => {
+      return rules.create({
+        ruleName: 'random_rule_test',
+        action: `/${NAMESPACE}/hello`,
+        trigger: `/${NAMESPACE}/sample_rule_trigger`
+      }).then(result => {
         t.is(result.name, 'random_rule_test')
         t.is(result.namespace, NAMESPACE)
         t.deepEqual(result.action, {path: NAMESPACE, name: 'hello'})
         t.deepEqual(result.trigger, {path: NAMESPACE, name: 'sample_rule_trigger'})
-        return rules.get({ruleName: result.name}).then(rule_result => {
-          t.is(rule_result.name, result.name)
-          t.is(rule_result.namespace, NAMESPACE)
+        return rules.get({ruleName: result.name}).then(ruleResult => {
+          t.is(ruleResult.name, result.name)
+          t.is(ruleResult.namespace, NAMESPACE)
           t.pass()
           return rules.disable({ruleName: 'random_rule_test'})
             .then(() => rules.delete({ruleName: 'random_rule_test'}))
@@ -99,17 +103,27 @@ test.serial('create and update a rule', t => {
   const triggers = new Triggers(new Client(options))
   const actions = new Actions(new Client(options))
   return actions.create({actionName: 'hello', action: 'function main() {return {payload:"Hello world"}}'}).then(() => {
-
-    return actions.create({actionName: 'tests', action: 'function main() {return {payload:"Hello world"}}' }).then(() => {
+    return actions.create({
+      actionName: 'tests',
+      action: 'function main() {return {payload:"Hello world"}}'
+    }).then(() => {
       return triggers.create({triggerName: 'sample_rule_trigger'}).then(() => {
-        return rules.create({ruleName: 'random_update_test', action: `/${NAMESPACE}/hello`, trigger: `/${NAMESPACE}/sample_rule_trigger`}).then(result => {
+        return rules.create({
+          ruleName: 'random_update_test',
+          action: `/${NAMESPACE}/hello`,
+          trigger: `/${NAMESPACE}/sample_rule_trigger`
+        }).then(result => {
           t.is(result.name, 'random_update_test')
           t.is(result.namespace, NAMESPACE)
           t.deepEqual(result.action, {path: NAMESPACE, name: 'hello'})
           t.deepEqual(result.trigger, {path: NAMESPACE, name: 'sample_rule_trigger'})
           return rules.disable({ruleName: 'random_update_test'}).then(() => {
-            return rules.update({ruleName: 'random_update_test', action: 'tests', trigger: 'sample_rule_trigger'}).then(update_result => {
-              t.deepEqual(update_result.action, {path: NAMESPACE, name: 'tests'})
+            return rules.update({
+              ruleName: 'random_update_test',
+              action: 'tests',
+              trigger: 'sample_rule_trigger'
+            }).then(updateResult => {
+              t.deepEqual(updateResult.action, {path: NAMESPACE, name: 'tests'})
               t.pass()
               return rules.delete({ruleName: 'random_update_test'})
                 .then(() => triggers.delete({triggerName: 'sample_rule_trigger'}))
@@ -121,5 +135,5 @@ test.serial('create and update a rule', t => {
         }).catch(errors)
       })
     })
-  }).catch(errors);
+  }).catch(errors)
 })
index 04515db..086aa2e 100644 (file)
@@ -71,9 +71,9 @@ test('create, get and delete an trigger', t => {
     t.is(result.version, '0.0.1')
     t.deepEqual(result.limits, {})
     t.pass()
-    return triggers.get({triggerName: result.name}).then(trigger_result => {
-      t.is(trigger_result.name, result.name)
-      t.is(trigger_result.namespace, NAMESPACE)
+    return triggers.get({triggerName: result.name}).then(triggerResult => {
+      t.is(triggerResult.name, result.name)
+      t.is(triggerResult.namespace, NAMESPACE)
       t.pass()
       return triggers.delete({triggerName: result.name}).catch(errors)
     }).catch(errors)
@@ -93,8 +93,8 @@ test('create and update an trigger', t => {
     t.deepEqual(result.annotations, [])
     t.is(result.version, '0.0.1')
     t.deepEqual(result.limits, {})
-    return triggers.update({triggerName: 'random_create_update_test'}).then(update_result => {
-      t.is(update_result.version, '0.0.2')
+    return triggers.update({triggerName: 'random_create_update_test'}).then(updateResult => {
+      t.is(updateResult.version, '0.0.2')
       t.pass()
       return triggers.delete({triggerName: 'random_create_update_test'}).catch(errors)
     }).catch(errors)
@@ -110,10 +110,10 @@ test('fire a trigger', t => {
   const triggers = new Triggers(new Client(options))
   const rules = new Rules(new Client(options))
 
-  return triggers.create({triggerName: 'random_fire_test'}).then(result => {
-    return rules.create({ruleName: 'echo_rule', action: `/whisk.system/utils/echo`, trigger: `/${NAMESPACE}/random_fire_test`}).then(rule_result => {
-      return triggers.invoke({triggerName: 'random_fire_test'}).then(update_result => {
-        t.true(update_result.hasOwnProperty('activationId'))
+  return triggers.create({triggerName: 'random_fire_test'}).then(() => {
+    return rules.create({ruleName: 'echo_rule', action: `/whisk.system/utils/echo`, trigger: `/${NAMESPACE}/random_fire_test`}).then(() => {
+      return triggers.invoke({triggerName: 'random_fire_test'}).then(updateResult => {
+        t.true(updateResult.hasOwnProperty('activationId'))
         t.pass()
         return triggers.delete({triggerName: 'random_fire_test'})
           .then(() => rules.delete({ruleName: 'echo_rule'}))
index 42ff656..87e0f42 100644 (file)
@@ -1,21 +1,21 @@
-function getInsecureFlag(){
-  let npmConfigArgObj = process.env.npm_config_argv ? JSON.parse(process.env.npm_config_argv) : null;
-  if(npmConfigArgObj){
-    return npmConfigArgObj.original&&npmConfigArgObj.original[2]=="-i";
+function getInsecureFlag () {
+  let npmConfigArgObj = process.env.npm_config_argv ? JSON.parse(process.env.npm_config_argv) : null
+  if (npmConfigArgObj) {
+    return npmConfigArgObj.original && npmConfigArgObj.original[2] === '-i'
   }
-  return false;
+  return false
 }
 
-function autoOptions(){
-  var options = {};
-  if(getInsecureFlag()){
-    options.ignore_certs = true;
-    options.apigw_token = true;
+function autoOptions () {
+  var options = {}
+  if (getInsecureFlag()) {
+    options.ignore_certs = true
+    options.apigw_token = true
   }
-  return options;
+  return options
 }
 
 module.exports = {
-  getInsecureFlag : getInsecureFlag,
+  getInsecureFlag: getInsecureFlag,
   autoOptions: autoOptions
-};
+}
index b1b552a..8d3140f 100644 (file)
@@ -63,7 +63,6 @@ test('should retrieve action from identifier', t => {
   return actions.get({name: '12345'})
 })
 
-
 test('should retrieve action from identifier with code query parameter', t => {
   t.plan(3)
   const ns = '_'
@@ -219,13 +218,13 @@ test('should invoke action to retrieve result', t => {
   const ns = '_'
   const client = {}
   const actions = new Actions(client)
-  const result = { hello: 'world' }
+  const result = {hello: 'world'}
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
     t.is(path, `namespaces/${ns}/actions/12345`)
     t.deepEqual(options.qs, {blocking: true})
-    return Promise.resolve({response: { result }})
+    return Promise.resolve({response: {result}})
   }
 
   return actions.invoke({name: '12345', result: true, blocking: true}).then(_result => {
@@ -238,17 +237,17 @@ test('should invoke action to retrieve result without blocking', t => {
   const ns = '_'
   const client = {}
   const actions = new Actions(client)
-  const result = { hello: 'world' }
+  const result = {hello: 'world'}
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
     t.is(path, `namespaces/${ns}/actions/12345`)
     t.deepEqual(options.qs, {})
-    return Promise.resolve({response: { result }})
+    return Promise.resolve({response: {result}})
   }
 
   return actions.invoke({name: '12345', result: true}).then(_result => {
-    t.deepEqual(_result, {response: { result } })
+    t.deepEqual(_result, {response: {result}})
   })
 })
 
@@ -353,9 +352,12 @@ test('create a new action with default parameters', t => {
     t.is(method, 'PUT')
     t.is(path, `namespaces/${ns}/actions/12345`)
     t.deepEqual(options.qs, {})
-    t.deepEqual(options.body, {exec: {kind: 'nodejs:default', code: action}, parameters: [
-      { key: 'foo', value: 'bar' }
-    ]})
+    t.deepEqual(options.body, {
+      exec: {kind: 'nodejs:default', code: action},
+      parameters: [
+        {key: 'foo', value: 'bar'}
+      ]
+    })
   }
 
   return actions.create({name: '12345', action, params})
@@ -375,9 +377,10 @@ test('create a new action with annotations', t => {
     t.is(method, 'PUT')
     t.is(path, `namespaces/${ns}/actions/12345`)
     t.deepEqual(options.qs, {})
-    t.deepEqual(options.body, {exec: {kind: 'nodejs:default', code: action}, annotations: [
-      { key: 'foo', value: 'bar' }
-    ]})
+    t.deepEqual(options.body, {exec: {kind: 'nodejs:default', code: action},
+      annotations: [
+        { key: 'foo', value: 'bar' }
+      ]})
   }
 
   return actions.create({name: '12345', action, annotations})
@@ -425,5 +428,4 @@ test('create a new action with version parameter', t => {
   }
 
   return actions.create({name: '12345', action, version})
-
 })
index 0d6e31d..6058342 100644 (file)
@@ -32,7 +32,15 @@ test('list all activations', t => {
     t.deepEqual(options.qs, {name: 'Hello', limit: 100, skip: 100, upto: 100, docs: true, since: 100})
   }
 
-  return activations.list({namespace: 'options_namespace', name: 'Hello', limit: 100, skip: 100, since: 100, upto: 100, docs: true})
+  return activations.list({
+    namespace: 'options_namespace',
+    name: 'Hello',
+    limit: 100,
+    skip: 100,
+    since: 100,
+    upto: 100,
+    docs: true
+  })
 })
 
 test('list all activations with count parameter', t => {
@@ -54,14 +62,14 @@ test('should retrieve an activation', t => {
   const ns = '_'
   const client = {}
   const activations = new Activations(client)
-  const activation_id = 'random_id'
+  const activationId = 'random_id'
 
   client.request = (method, path, options) => {
     t.is(method, 'GET')
-    t.is(path, `namespaces/${ns}/activations/${activation_id}`)
+    t.is(path, `namespaces/${ns}/activations/${activationId}`)
   }
 
-  return activations.get({name: activation_id})
+  return activations.get({name: activationId})
 })
 
 test('should retrieve an activation using alt id parameter', t => {
@@ -69,14 +77,14 @@ test('should retrieve an activation using alt id parameter', t => {
   const ns = '_'
   const client = {}
   const activations = new Activations(client)
-  const activation_id = 'random_id'
+  const activationId = 'random_id'
 
   client.request = (method, path, options) => {
     t.is(method, 'GET')
-    t.is(path, `namespaces/${ns}/activations/${activation_id}`)
+    t.is(path, `namespaces/${ns}/activations/${activationId}`)
   }
 
-  return activations.get({activation: activation_id})
+  return activations.get({activation: activationId})
 })
 
 test('should retrieve an activation using string id parameter', t => {
@@ -84,14 +92,14 @@ test('should retrieve an activation using string id parameter', t => {
   const ns = '_'
   const client = {}
   const activations = new Activations(client)
-  const activation_id = 'random_id'
+  const activationId = 'random_id'
 
   client.request = (method, path, options) => {
     t.is(method, 'GET')
-    t.is(path, `namespaces/${ns}/activations/${activation_id}`)
+    t.is(path, `namespaces/${ns}/activations/${activationId}`)
   }
 
-  return activations.get(activation_id)
+  return activations.get(activationId)
 })
 
 test('should retrieve an activation logs using string id', t => {
@@ -99,14 +107,14 @@ test('should retrieve an activation logs using string id', t => {
   const ns = '_'
   const client = {}
   const activations = new Activations(client)
-  const activation_id = 'random_id'
+  const activationId = 'random_id'
 
   client.request = (method, path, options) => {
     t.is(method, 'GET')
-    t.is(path, `namespaces/${ns}/activations/${activation_id}/logs`)
+    t.is(path, `namespaces/${ns}/activations/${activationId}/logs`)
   }
 
-  return activations.logs(activation_id)
+  return activations.logs(activationId)
 })
 
 test('should retrieve an activation logs', t => {
@@ -114,14 +122,14 @@ test('should retrieve an activation logs', t => {
   const ns = '_'
   const client = {}
   const activations = new Activations(client)
-  const activation_id = 'random_id'
+  const activationId = 'random_id'
 
   client.request = (method, path, options) => {
     t.is(method, 'GET')
-    t.is(path, `namespaces/${ns}/activations/${activation_id}/logs`)
+    t.is(path, `namespaces/${ns}/activations/${activationId}/logs`)
   }
 
-  return activations.logs({name: activation_id})
+  return activations.logs({name: activationId})
 })
 
 test('should retrieve an activation result using string id', t => {
@@ -129,14 +137,14 @@ test('should retrieve an activation result using string id', t => {
   const ns = '_'
   const client = {}
   const activations = new Activations(client)
-  const activation_id = 'random_id'
+  const activationId = 'random_id'
 
   client.request = (method, path, options) => {
     t.is(method, 'GET')
-    t.is(path, `namespaces/${ns}/activations/${activation_id}/result`)
+    t.is(path, `namespaces/${ns}/activations/${activationId}/result`)
   }
 
-  return activations.result(activation_id)
+  return activations.result(activationId)
 })
 
 test('should retrieve an activation result', t => {
@@ -144,17 +152,19 @@ test('should retrieve an activation result', t => {
   const ns = '_'
   const client = {}
   const activations = new Activations(client)
-  const activation_id = 'random_id'
+  const activationId = 'random_id'
 
   client.request = (method, path, options) => {
     t.is(method, 'GET')
-    t.is(path, `namespaces/${ns}/activations/${activation_id}/result`)
+    t.is(path, `namespaces/${ns}/activations/${activationId}/result`)
   }
 
-  return activations.result({name: activation_id})
+  return activations.result({name: activationId})
 })
 
 test('should throw when retrieving activation without id', t => {
   const activations = new Activations()
-  return t.throws(() => { activations.get() }, /Missing mandatory/)
+  return t.throws(() => {
+    activations.get()
+  }, /Missing mandatory/)
 })
index f25aa43..886d3c9 100644 (file)
@@ -11,14 +11,16 @@ test('should invoke client request for resource', t => {
   const namespace = '_'
   const resource = 'resource_id'
   const method = 'GET'
-  const client = {request: (_method, _path) => {
-    t.is(_method, method)
-    t.is(_path, `namespaces/${namespace}/${resource}`)
-  }}
+  const client = {
+    request: (_method, _path) => {
+      t.is(_method, method)
+      t.is(_path, `namespaces/${namespace}/${resource}`)
+    }
+  }
 
-  const base_operation = new BaseOperation(client)
-  base_operation.resource = resource
-  base_operation.request({method})
+  const baseOperation = new BaseOperation(client)
+  baseOperation.resource = resource
+  baseOperation.request({method})
 })
 
 test('should invoke client request for resource with identifier', t => {
@@ -27,14 +29,16 @@ test('should invoke client request for resource with identifier', t => {
   const resource = 'resource_id'
   const method = 'GET'
   const id = '12345'
-  const client = {request: (_method, _path) => {
-    t.is(_method, method)
-    t.is(_path, `namespaces/${namespace}/${resource}/${id}`)
-  }}
+  const client = {
+    request: (_method, _path) => {
+      t.is(_method, method)
+      t.is(_path, `namespaces/${namespace}/${resource}/${id}`)
+    }
+  }
 
-  const base_operation = new BaseOperation(client)
-  base_operation.resource = resource
-  base_operation.request({method, id})
+  const baseOperation = new BaseOperation(client)
+  baseOperation.resource = resource
+  baseOperation.request({method, id})
 })
 
 test('should invoke client request with user parameters', t => {
@@ -44,43 +48,45 @@ test('should invoke client request with user parameters', t => {
   const method = 'GET'
   const id = '12345'
   const options = {qs: {hello: 'world'}, body: {hello: 'world'}}
-  const client = {request: (_method, _path, _options) => {
-    t.is(_method, method)
-    t.is(_path, `namespaces/${namespace}/${resource}/${id}`)
-    t.deepEqual(_options, {qs: {hello: 'world'}, body: {hello: 'world'}})
-  }}
+  const client = {
+    request: (_method, _path, _options) => {
+      t.is(_method, method)
+      t.is(_path, `namespaces/${namespace}/${resource}/${id}`)
+      t.deepEqual(_options, {qs: {hello: 'world'}, body: {hello: 'world'}})
+    }
+  }
 
-  const base_operation = new BaseOperation(client)
-  base_operation.resource = resource
-  base_operation.request({method, id, options})
+  const baseOperation = new BaseOperation(client)
+  baseOperation.resource = resource
+  baseOperation.request({method, id, options})
 })
 
 test('should extract available query string parameters', t => {
-  const base_operation = new BaseOperation()
-  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})
+  const baseOperation = new BaseOperation()
+  t.deepEqual(baseOperation.qs({}, ['a', 'b', 'c']), {})
+  t.deepEqual(baseOperation.qs({a: 1}, ['a', 'b', 'c']), {a: 1})
+  t.deepEqual(baseOperation.qs({a: 1, c: 2}, ['a', 'b', 'c']), {a: 1, c: 2})
+  t.deepEqual(baseOperation.qs({a: 1, c: 2, d: 3}, ['a', 'b', 'c']), {a: 1, c: 2})
 })
 
 test('should return appropriate namespace', t => {
-  let base_operation = new BaseOperation()
-  t.is(base_operation.namespace({namespace: 'provided'}), 'provided')
+  let baseOperation = new BaseOperation()
+  t.is(baseOperation.namespace({namespace: 'provided'}), 'provided')
 
   // using global ns
-  base_operation = new BaseOperation({ options: { namespace: 'global_ns' }})
-  t.is(base_operation.namespace({namespace: 'provided'}), 'provided')
-  base_operation = new BaseOperation({ options: { namespace: 'global_ns' }})
-  t.is(base_operation.namespace({}), 'global_ns')
-  t.is(base_operation.namespace(), 'global_ns')
+  baseOperation = new BaseOperation({options: {namespace: 'global_ns'}})
+  t.is(baseOperation.namespace({namespace: 'provided'}), 'provided')
+  baseOperation = new BaseOperation({options: {namespace: 'global_ns'}})
+  t.is(baseOperation.namespace({}), 'global_ns')
+  t.is(baseOperation.namespace(), 'global_ns')
 
-  base_operation = new BaseOperation('default')
-  t.is(base_operation.namespace({namespace: 'provided'}), 'provided')
-  t.is(base_operation.namespace(), '_')
+  baseOperation = new BaseOperation('default')
+  t.is(baseOperation.namespace({namespace: 'provided'}), 'provided')
+  t.is(baseOperation.namespace(), '_')
 })
 
 test('should url encode namespace parameter', t => {
-  let base_operation = new BaseOperation('sample@path')
-  t.is(base_operation.namespace({namespace: 'sample path'}), `sample%20path`)
-  t.is(base_operation.namespace({namespace: 'sample@path'}), `sample%40path`)
+  let baseOperation = new BaseOperation('sample@path')
+  t.is(baseOperation.namespace({namespace: 'sample path'}), `sample%20path`)
+  t.is(baseOperation.namespace({namespace: 'sample@path'}), `sample%40path`)
 })
index b013260..9db695f 100644 (file)
@@ -9,24 +9,53 @@ const http = require('http')
 
 test('should use default constructor options', t => {
   const client = new Client({api_key: 'aaa', apihost: 'my_host'})
-  t.false(client.options.ignore_certs)
-  t.is(client.options.api_key, 'aaa')
+  t.false(client.options.ignoreCerts)
+  t.is(client.options.apiKey, 'aaa')
   t.is(client.options.api, 'https://my_host/api/v1/')
   t.falsy(client.options.namespace)
 })
 
 test('should support explicit constructor options', t => {
-  const client = new Client({namespace: 'ns', ignore_certs: true, api_key: 'aaa', api: 'my_host', apigw_token: 'oauth_token', apigw_space_guid: 'space_guid'})
+  const client = new Client({
+    namespace: 'ns',
+    ignore_certs: true,
+    api_key: 'aaa',
+    api: 'my_host',
+    apigw_token: 'oauth_token',
+    apigw_space_guid: 'space_guid'
+  })
   t.is(client.options.api, 'my_host')
-  t.true(client.options.ignore_certs)
+  t.true(client.options.ignoreCerts)
   t.is(client.options.namespace, 'ns')
-  t.is(client.options.apigw_token, 'oauth_token')
-  t.is(client.options.apigw_space_guid, 'space_guid')
+  t.is(client.options.apigwToken, 'oauth_token')
+  t.is(client.options.apigwSpaceGuid, 'space_guid')
+})
+
+test('should support deprecated explicit constructor options', t => {
+  const client = new Client({
+    namespace: 'ns',
+    ignore_certs: true,
+    api_key: 'aaa',
+    api: 'my_host',
+    apigw_token: 'oauth_token',
+    apigw_space_guid: 'space_guid'
+  })
+  t.is(client.options.api, 'my_host')
+  t.true(client.options.ignoreCerts)
+  t.is(client.options.namespace, 'ns')
+  t.is(client.options.apigwToken, 'oauth_token')
+  t.is(client.options.apigwSpaceGuid, 'space_guid')
 })
 
 test('should use uuid from auth key as space guid if apigw_token present', t => {
-  const client = new Client({namespace: 'ns', ignore_certs: true, api_key: 'uuid:pass', api: 'my_host', apigw_token: 'oauth_token'})
-  t.is(client.options.apigw_space_guid, 'uuid')
+  const client = new Client({
+    namespace: 'ns',
+    ignore_certs: true,
+    api_key: 'uuid:pass',
+    api: 'my_host',
+    apigw_token: 'oauth_token'
+  })
+  t.is(client.options.apigwSpaceGuid, 'uuid')
 })
 
 test('should use environment parameters for options if not set explicitly.', t => {
@@ -35,10 +64,10 @@ test('should use environment parameters for options if not set explicitly.', t =
   process.env['__OW_APIGW_TOKEN'] = 'my-token'
   process.env['__OW_APIGW_SPACE_GUID'] = 'my-space'
   const client = new Client()
-  t.is(client.options.api_key, process.env['__OW_API_KEY'])
+  t.is(client.options.apiKey, process.env['__OW_API_KEY'])
   t.is(client.options.api, 'https://mywhiskhost/api/v1/')
-  t.is(client.options.apigw_token, 'my-token')
-  t.is(client.options.apigw_space_guid, 'my-space')
+  t.is(client.options.apigwToken, 'my-token')
+  t.is(client.options.apigwSpaceGuid, 'my-space')
   delete process.env['__OW_API_KEY']
   delete process.env['__OW_API_HOST']
   delete process.env['__OW_APIGW_TOKEN']
@@ -51,10 +80,10 @@ test('should use options for parameters even if environment parameters are avail
   process.env['__OW_APIGW_TOKEN'] = 'my-token'
   process.env['__OW_APIGW_SPACE_GUID'] = 'my-space'
   const client = new Client({apihost: 'openwhisk', api_key: 'mykey', apigw_token: 'token', apigw_space_guid: 'guid'})
-  t.is(client.options.api_key, 'mykey')
+  t.is(client.options.apiKey, 'mykey')
   t.is(client.options.api, 'https://openwhisk/api/v1/')
-  t.is(client.options.apigw_token, 'token')
-  t.is(client.options.apigw_space_guid, 'guid')
+  t.is(client.options.apigwToken, 'token')
+  t.is(client.options.apigwSpaceGuid, 'guid')
   delete process.env['__OW_API_KEY']
   delete process.env['__OW_API_HOST']
   delete process.env['__OW_APIGW_TOKEN']
@@ -71,9 +100,9 @@ test('should throw error when missing both API and API Host options.', t => {
 
 test('should handle multiple api parameter formats', t => {
   const client = new Client({api_key: true, apihost: 'blah'})
-  t.is(client.url_from_apihost('my_host'), 'https://my_host/api/v1/')
-  t.is(client.url_from_apihost('https://my_host:80'), 'https://my_host:80/api/v1/')
-  t.is(client.url_from_apihost('http://my_host:80'), 'http://my_host:80/api/v1/')
+  t.is(client.urlFromApihost('my_host'), 'https://my_host/api/v1/')
+  t.is(client.urlFromApihost('https://my_host:80'), 'https://my_host:80/api/v1/')
+  t.is(client.urlFromApihost('http://my_host:80'), 'http://my_host:80/api/v1/')
 })
 
 test('should return default request parameters without options', t => {
@@ -116,27 +145,50 @@ test('should return request parameters with explicit api option', t => {
 })
 
 test('should generate auth header from API key', t => {
-  const api_key = 'some sample api key'
-  const client = new Client({api: true, api_key: api_key})
-  t.is(client.auth_header(), `Basic ${Buffer.from(api_key).toString('base64')}`)
+  const apiKey = 'some sample api key'
+  const client = new Client({api: true, api_key: apiKey})
+  t.is(client.authHeader(), `Basic ${Buffer.from(apiKey).toString('base64')}`)
 })
 
 test('should return path and status code in error message', t => {
   const client = new Client({api_key: true, api: true})
-  const method = 'METHOD', url = 'https://blah.com/api/v1/actions/list', statusCode = 400
-  t.throws(() => client.handle_errors({options: { method, url }, statusCode }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "Response Missing Error Message."`)
+  const method = 'METHOD'
+  const url = 'https://blah.com/api/v1/actions/list'
+  const statusCode = 400
+  t.throws(() => client.handleErrors({
+    options: {method, url},
+    statusCode
+  }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "Response Missing Error Message."`)
 })
 
 test('should return response error string in error message', t => {
   const client = new Client({api_key: true, api: true})
-  const method = 'METHOD', url = 'https://blah.com/api/v1/actions/list', statusCode = 400
-  t.throws(() => client.handle_errors({error: { error: 'hello' }, options: { method, url }, statusCode }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "hello"`)
-  t.throws(() => client.handle_errors({error: { response: { result: { error: 'hello' } } }, options: { method, url }, statusCode }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "hello"`)
-  t.throws(() => client.handle_errors({error: { response: { result: { error: { error: 'hello' } } } }, options: { method, url }, statusCode }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "hello"`)
-  t.throws(() => client.handle_errors({error: { response: { result: { error: { statusCode: 404 } } } }, options: { method, url }, statusCode }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "application error, status code: ${404}"`)
+  const method = 'METHOD'
+  const url = 'https://blah.com/api/v1/actions/list'
+  const statusCode = 400
+  t.throws(() => client.handleErrors({
+    error: {error: 'hello'},
+    options: {method, url},
+    statusCode
+  }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "hello"`)
+  t.throws(() => client.handleErrors({
+    error: {response: {result: {error: 'hello'}}},
+    options: {method, url},
+    statusCode
+  }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "hello"`)
+  t.throws(() => client.handleErrors({
+    error: {response: {result: {error: {error: 'hello'}}}},
+    options: {method, url},
+    statusCode
+  }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "hello"`)
+  t.throws(() => client.handleErrors({
+    error: {response: {result: {error: {statusCode: 404}}}},
+    options: {method, url},
+    statusCode
+  }), `${method} ${url} Returned HTTP ${statusCode} (${http.STATUS_CODES[statusCode]}) --> "application error, status code: ${404}"`)
 })
 
 test('should throw errors for non-HTTP response failures', t => {
   const client = new Client({api_key: true, api: true})
-  t.throws(() => client.handle_errors({message: 'error message'}), /error message/)
+  t.throws(() => client.handleErrors({message: 'error message'}), /error message/)
 })
index 005f3ec..6d92d66 100644 (file)
@@ -7,259 +7,293 @@ const test = require('ava')
 const Feeds = require('../../lib/feeds')
 
 test('should be able to delete feed', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = '/trigger_ns/trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = '/trigger_ns/triggerName'
   const client = {}
-  client.options = { api_key }
+  client.options = {apiKey: apiKey}
 
   const ns = '_'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'DELETE', triggerName: `${trigger_name}`})
+    t.deepEqual(options.body, {
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'DELETE',
+      triggerName: `${triggerName}`
+    })
   }
 
   t.plan(4)
 
-  return feeds.delete({name: feed_name, trigger: trigger_name})
+  return feeds.delete({name: feedName, trigger: triggerName})
 })
 
 test('should be able to delete feed using feedName with params', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = 'trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = 'triggerName'
   const client = {}
-  client.options = { api_key }
+  client.options = {apiKey: apiKey}
 
   const ns = '_'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {foo: 'bar', authKey: client.options.api_key, lifecycleEvent: 'DELETE', triggerName: `/_/${trigger_name}`})
+    t.deepEqual(options.body, {
+      foo: 'bar',
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'DELETE',
+      triggerName: `/_/${triggerName}`
+    })
   }
 
   t.plan(4)
 
   const params = {foo: 'bar'}
-  return feeds.delete({feedName: feed_name, trigger: trigger_name, params})
+  return feeds.delete({feedName: feedName, trigger: triggerName, params})
 })
 
 test('should be able to create feed', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = '/trigger_ns/trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = '/trigger_ns/triggerName'
   const client = {}
-  client.options = { api_key }
+  client.options = {apiKey: apiKey}
 
   const ns = '_'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'CREATE', triggerName: `${trigger_name}`})
+    t.deepEqual(options.body, {
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'CREATE',
+      triggerName: `${triggerName}`
+    })
   }
 
   t.plan(4)
 
-  return feeds.create({name: feed_name, trigger: trigger_name})
+  return feeds.create({name: feedName, trigger: triggerName})
 })
 
 test('should be able to create trigger ignoring global namespace', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = '/a/trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = '/a/triggerName'
   const client = {}
-  client.options = { api_key, namespace: 'global_ns' }
+  client.options = {apiKey: apiKey, namespace: 'global_ns'}
 
   const ns = 'global_ns'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'CREATE', triggerName: `${trigger_name}`})
+    t.deepEqual(options.body, {
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'CREATE',
+      triggerName: `${triggerName}`
+    })
   }
 
   t.plan(4)
 
-  return feeds.create({name: feed_name, trigger: trigger_name})
+  return feeds.create({name: feedName, trigger: triggerName})
 })
 
 test('should be able to create trigger using global namespace', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = 'trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = 'triggerName'
   const client = {}
-  client.options = { api_key, namespace: 'global_ns' }
+  client.options = {apiKey: apiKey, namespace: 'global_ns'}
 
   const ns = 'global_ns'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'CREATE', triggerName: `/global_ns/${trigger_name}`})
+    t.deepEqual(options.body, {
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'CREATE',
+      triggerName: `/global_ns/${triggerName}`
+    })
   }
 
   t.plan(4)
 
-  return feeds.create({name: feed_name, trigger: trigger_name})
+  return feeds.create({name: feedName, trigger: triggerName})
 })
 
 test('should be able to create trigger using options namespace', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = 'trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = 'triggerName'
   const client = {}
-  client.options = { api_key }
+  client.options = {apiKey: apiKey}
 
   const ns = 'custom'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'CREATE', triggerName: `/_/${trigger_name}`})
+    t.deepEqual(options.body, {
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'CREATE',
+      triggerName: `/_/${triggerName}`
+    })
   }
 
   t.plan(4)
 
-  return feeds.create({name: feed_name, namespace: ns, trigger: trigger_name})
+  return feeds.create({name: feedName, namespace: ns, trigger: triggerName})
 })
 
 test('should be able to create trigger ignoring options namespace', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = '/a/trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = '/a/triggerName'
   const client = {}
-  client.options = { api_key }
+  client.options = {apiKey: apiKey}
 
-  const ns = '_'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/ns/actions/${feed_name}`)
+    t.is(path, `namespaces/ns/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'CREATE', triggerName: `${trigger_name}`})
+    t.deepEqual(options.body, {
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'CREATE',
+      triggerName: `${triggerName}`
+    })
   }
 
   t.plan(4)
 
-  return feeds.create({name: feed_name, namespace: 'ns', trigger: trigger_name})
+  return feeds.create({name: feedName, namespace: 'ns', trigger: triggerName})
 })
 
 test('should be able to create trigger from full qualified feed', t => {
-  const feed_name = '/b/c/feed_name'
-  const api_key = 'username:password'
-  const trigger_name = '/a/trigger_name'
+  const feedName = '/b/c/feedName'
+  const apiKey = 'username:password'
+  const triggerName = '/a/triggerName'
   const client = {}
-  client.options = { api_key, namespace: 'global' }
+  client.options = {apiKey: apiKey, namespace: 'global'}
 
-  const ns = '_'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/b/actions/c/feed_name`)
+    t.is(path, `namespaces/b/actions/c/feedName`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'CREATE', triggerName: `${trigger_name}`})
+    t.deepEqual(options.body, {
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'CREATE',
+      triggerName: `${triggerName}`
+    })
   }
 
   t.plan(4)
 
-  return feeds.create({name: feed_name, namespace: 'ns', trigger: trigger_name})
+  return feeds.create({name: feedName, namespace: 'ns', trigger: triggerName})
 })
 
 test('should be able to create feed using feedName with params', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = 'trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = 'triggerName'
   const client = {}
-  client.options = { api_key }
+  client.options = {apiKey: apiKey}
 
   const ns = '_'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {foo: 'bar', authKey: client.options.api_key, lifecycleEvent: 'CREATE', triggerName: `/_/${trigger_name}`})
+    t.deepEqual(options.body, {
+      foo: 'bar',
+      authKey: client.options.apiKey,
+      lifecycleEvent: 'CREATE',
+      triggerName: `/_/${triggerName}`
+    })
   }
 
   t.plan(4)
 
   const params = {foo: 'bar'}
-  return feeds.create({feedName: feed_name, trigger: trigger_name, params})
+  return feeds.create({feedName: feedName, trigger: triggerName, params})
 })
 
 test('should be able to get feed', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = '/trigger_ns/trigger_name'
+  const feedName = 'feedName'
+  const apiKey = 'username:password'
+  const triggerName = '/trigger_ns/triggerName'
   const client = {}
-  client.options = { api_key }
+  client.options = { apiKey: apiKey }
 
   const ns = '_'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'READ', triggerName: `${trigger_name}`})
+    t.deepEqual(options.body, {authKey: client.options.apiKey, lifecycleEvent: 'READ', triggerName: `${triggerName}`})
   }
 
   t.plan(4)
 
-  return feeds.get({name: feed_name, trigger: trigger_name})
+  return feeds.get({name: feedName, trigger: triggerName})
 })
 
 test('should be able to update feed', t => {
-  const feed_name = 'feed_name'
-  const api_key = 'username:password'
-  const trigger_name = '/trigger_ns/trigger_name'
+  const feedName = 'feed_name'
+  const apiKey = 'username:password'
+  const triggerName = '/trigger_ns/trigger_name'
   const client = {}
-  client.options = { api_key }
+  client.options = { api_key: apiKey }
 
   const ns = '_'
   const feeds = new Feeds(client)
 
   client.request = (method, path, options) => {
     t.is(method, 'POST')
-    t.is(path, `namespaces/${ns}/actions/${feed_name}`)
+    t.is(path, `namespaces/${ns}/actions/${feedName}`)
     t.deepEqual(options.qs, {blocking: true})
-    t.deepEqual(options.body, {authKey: client.options.api_key, lifecycleEvent: 'UPDATE', triggerName: `${trigger_name}`})
+    t.deepEqual(options.body, {authKey: client.options.apiKey, lifecycleEvent: 'UPDATE', triggerName: `${triggerName}`})
   }
 
   t.plan(4)
 
-  return feeds.update({name: feed_name, trigger: trigger_name})
+  return feeds.update({name: feedName, trigger: triggerName})
 })
 
 test('should throw errors without trigger parameter ', t => {
-  const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const feeds = new Feeds(client)
   t.throws(() => feeds.feed('', {feedName: 'myFeed'}), /trigger/)
 })
 
 test('should throw errors without id parameter', t => {
-  const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const feeds = new Feeds(client)
   t.throws(() => feeds.feed('', {trigger: 'myFeed'}), /feedName/)
 })
index b1a788b..8218a1d 100644 (file)
@@ -7,77 +7,77 @@ const test = require('ava')
 const names = require('../../lib/names')
 
 test('should return default namespace', t => {
-  t.is(names.default_namespace(), '_')
+  t.is(names.defaultNamespace(), '_')
 })
 
 test('should return default namespace from env param', t => {
   process.env['__OW_NAMESPACE'] = 'testing'
-  t.is(names.default_namespace(), 'testing')
+  t.is(names.defaultNamespace(), 'testing')
   delete process.env['__OW_NAMESPACE']
 })
 
 test('should parse namespace from resource without explicit ns', t => {
-  t.is(names.parse_namespace('hello'), '_')
+  t.is(names.parseNamespace('hello'), '_')
 })
 
 test('should parse namespace from package resource without explicit ns', t => {
-  t.is(names.parse_namespace('pkg/hello'), '_')
+  t.is(names.parseNamespace('pkg/hello'), '_')
 })
 
 test('should parse namespace from resource with explicit ns', t => {
-  t.is(names.parse_namespace('/ns/hello'), 'ns')
+  t.is(names.parseNamespace('/ns/hello'), 'ns')
 })
 
 test('should parse namespace from package resource with explicit ns', t => {
-  t.is(names.parse_namespace('/ns/pkg/hello'), 'ns')
+  t.is(names.parseNamespace('/ns/pkg/hello'), 'ns')
 })
 
 test('should parse namespace from resource with explicit ns and package but missing leading slash', t => {
-  t.is(names.parse_namespace('ns/pkg/hello'), 'ns')
+  t.is(names.parseNamespace('ns/pkg/hello'), 'ns')
 })
 
 test('should throw error for resource with only namespace', t => {
-  t.throws(() => names.parse_namespace('/ns'), /Invalid resource identifier/)
+  t.throws(() => names.parseNamespace('/ns'), /Invalid resource identifier/)
 })
 
 test('should throw error for resource with only extra paths', t => {
-  t.throws(() => names.parse_namespace('/ns/pkg/action/extra'), /Invalid resource identifier/)
-  t.throws(() => names.parse_namespace('ns/pkg/action/extra'), /Invalid resource identifier/)
+  t.throws(() => names.parseNamespace('/ns/pkg/action/extra'), /Invalid resource identifier/)
+  t.throws(() => names.parseNamespace('ns/pkg/action/extra'), /Invalid resource identifier/)
 })
 
 test('should throw error for resource with missing parts', t => {
-  t.throws(() => names.parse_namespace('/'), /Invalid resource identifier/)
+  t.throws(() => names.parseNamespace('/'), /Invalid resource identifier/)
 })
 
 test('should parse id from resource without explicit ns', t => {
-  t.is(names.parse_id('hello'), 'hello')
+  t.is(names.parseId('hello'), 'hello')
 })
 
 test('should parse id from package resource without explicit ns', t => {
-  t.is(names.parse_id('pkg/hello'), 'pkg/hello')
+  t.is(names.parseId('pkg/hello'), 'pkg/hello')
 })
 
 test('should parse id from resource with explicit ns', t => {
-  t.is(names.parse_id('/ns/hello'), 'hello')
+  t.is(names.parseId('/ns/hello'), 'hello')
 })
 
 test('should parse id from package resource with explicit ns', t => {
-  t.is(names.parse_id('/ns/pkg/hello'), 'pkg/hello')
+  t.is(names.parseId('/ns/pkg/hello'), 'pkg/hello')
 })
 
 test('should parse id from resource with explicit ns and package but missing leading slash', t => {
-  t.is(names.parse_id('ns/pkg/hello'), 'pkg/hello')
+  t.is(names.parseId('ns/pkg/hello'), 'pkg/hello')
 })
 
 test('should throw error for resource with only namespace', t => {
-  t.throws(() => names.parse_id('/ns'), /Invalid resource identifier/)
+  t.throws(() => names.parseId('/ns'), /Invalid resource identifier/)
 })
 
 test('should throw error for resource with only extra paths', t => {
-  t.throws(() => names.parse_id('/ns/pkg/action/extra'), /Invalid resource identifier/)
-  t.throws(() => names.parse_id('ns/pkg/action/extra'), /Invalid resource identifier/)
+  t.throws(() => names.parseId('/ns/pkg/action/extra'), /Invalid resource identifier/)
+  t.throws(() => names.parseId('ns/pkg/action/extra'), /Invalid resource identifier/)
 })
 
 test('should throw error for resource with missing parts', t => {
-  t.throws(() => names.parse_id('/'), /Invalid resource identifier/)
+  t.throws(() => names.parseId('/'), /Invalid resource identifier/)
 })
index 5a31673..2b543ed 100644 (file)
@@ -26,7 +26,7 @@ test('should retrieve namespace entities', t => {
     let parts = path.split('/')
     t.is(parts[0], 'namespaces')
     t.is(parts[1], '_')
-    t.is(["actions", "triggers", "rules", "packages"].indexOf(parts[2]) > -1, true)
+    t.is(['actions', 'triggers', 'rules', 'packages'].indexOf(parts[2]) > -1, true)
   }
 
   const namespaces = new Namespaces(client)
index e02558e..6051f05 100644 (file)
@@ -187,7 +187,7 @@ test('should update an existing package', t => {
   client.request = (method, path, options) => {
     t.is(method, 'PUT')
     t.is(path, `namespaces/${ns}/packages/${id}`)
-    t.deepEqual(options.qs, { overwrite: true })
+    t.deepEqual(options.qs, {overwrite: true})
     t.deepEqual(options.body, {})
   }
 
index 88452bb..bceef3d 100644 (file)
@@ -149,7 +149,7 @@ test('should send multiple requests for array parameters', t => {
     return Promise.resolve()
   }
 
-  return resources.operation_with_id('GET', [name, {name}, name, {name}, name])
+  return resources.operationWithId('GET', [name, {name}, name, {name}, name])
     .then(result => {
       t.is(result.length, 5)
     })
@@ -168,25 +168,25 @@ test('should throw errors when missing resource identifier', t => {
 test('should parse action name from identifier', t => {
   const resources = new Resources()
   const id = '12345'
-  const ns_id = '/ns/12345'
-  const ns_package_id = '/ns/package/12345'
+  const nsId = '/ns/12345'
+  const nsPackageId = '/ns/package/12345'
 
-  t.is(resources.parse_id({name: id}), id)
-  t.is(resources.parse_id({name: ns_id}), id)
-  t.is(resources.parse_id({name: ns_package_id}), `package/12345`)
-  t.throws(() => resources.parse_id({name: '/ns'}), /Invalid resource/)
+  t.is(resources.parseId({name: id}), id)
+  t.is(resources.parseId({name: nsId}), id)
+  t.is(resources.parseId({name: nsPackageId}), `package/12345`)
+  t.throws(() => resources.parseId({name: '/ns'}), /Invalid resource/)
 })
 
 test('should parse namespace from identifier and options', t => {
   const resources = new Resources()
   const name = '12345'
-  const ns_name = '/ns/12345'
-  const ns_package_name = '/ns/package/12345'
-
-  t.falsy(resources.parse_namespace({name}))
-  t.is(resources.parse_namespace({name: ns_name}), 'ns')
-  t.is(resources.parse_namespace({name: ns_package_name}), 'ns')
-  t.is(resources.parse_namespace({name, namespace: 'custom'}), 'custom')
-  t.is(resources.parse_namespace({name: ns_name, namespace: 'custom'}), 'ns')
-  t.is(resources.parse_namespace({name: ns_package_name, namespace: 'custom'}), 'ns')
+  const nsName = '/ns/12345'
+  const nsPackageName = '/ns/package/12345'
+
+  t.falsy(resources.parseNamespace({name}))
+  t.is(resources.parseNamespace({name: nsName}), 'ns')
+  t.is(resources.parseNamespace({name: nsPackageName}), 'ns')
+  t.is(resources.parseNamespace({name, namespace: 'custom'}), 'custom')
+  t.is(resources.parseNamespace({name: nsName, namespace: 'custom'}), 'ns')
+  t.is(resources.parseNamespace({name: nsPackageName, namespace: 'custom'}), 'ns')
 })
index 9d039e4..30eab78 100644 (file)
@@ -8,11 +8,11 @@ const Routes = require('../../lib/routes')
 
 test('should retrieve routes from name', t => {
   t.plan(3)
-  const client = { options: {} }
+  const client = {options: {}}
   client.request = (method, path, options) => {
     t.is(method, 'GET')
     t.is(path, routes.routeMgmtApiPath('getApi'))
-    t.deepEqual(options.qs, { basepath: 'testing' })
+    t.deepEqual(options.qs, {basepath: 'testing'})
   }
 
   const routes = new Routes(client)
@@ -21,43 +21,47 @@ test('should retrieve routes from name', t => {
 
 test('should retrieve routes from basepath', t => {
   t.plan(3)
-  const client = { options: {} }
+  const client = {options: {}}
   client.request = (method, path, options) => {
     t.is(method, 'GET')
     t.is(path, routes.routeMgmtApiPath('getApi'))
-    t.deepEqual(options.qs, { basepath: 'testing' })
+    t.deepEqual(options.qs, {basepath: 'testing'})
   }
 
   const routes = new Routes(client)
   return routes.get({basepath: 'testing'})
 })
 
-test('should retrieve routes with apigw_token and name', t => {
+test('should retrieve routes with apigwToken and name', t => {
   t.plan(3)
-  const client = { options: {
-    apigw_token: 'token',
-    apigw_space_guid: 'space'
-  } }
+  const client = {
+    options: {
+      apigwToken: 'token',
+      apigwSpaceGuid: 'space'
+    }
+  }
   client.request = (method, path, options) => {
     t.is(method, 'GET')
     t.is(path, routes.routeMgmtApiPath('getApi'))
-    t.deepEqual(options.qs, { basepath: 'testing', spaceguid: 'space', accesstoken: 'token'})
+    t.deepEqual(options.qs, {basepath: 'testing', spaceguid: 'space', accesstoken: 'token'})
   }
 
   const routes = new Routes(client)
   return routes.get({name: 'testing'})
 })
 
-test('should retrieve routes with apigw_token and basepath', t => {
+test('should retrieve routes with apigwToken and basepath', t => {
   t.plan(3)
-  const client = { options: {
-    apigw_token: 'token',
-    apigw_space_guid: 'space'
-  } }
+  const client = {
+    options: {
+      apigwToken: 'token',
+      apigwSpaceGuid: 'space'
+    }
+  }
   client.request = (method, path, options) => {
     t.is(method, 'GET')
     t.is(path, routes.routeMgmtApiPath('getApi'))
-    t.deepEqual(options.qs, { basepath: 'testing', spaceguid: 'space', accesstoken: 'token'})
+    t.deepEqual(options.qs, {basepath: 'testing', spaceguid: 'space', accesstoken: 'token'})
   }
 
   const routes = new Routes(client)
@@ -75,7 +79,7 @@ test('get routes with incorrect parameters', t => {
 
 test('should list all routes', t => {
   t.plan(2)
-  const client = { options: {} }
+  const client = {options: {}}
   client.request = (method, path, options) => {
     t.is(method, 'GET')
     t.is(path, routes.routeMgmtApiPath('getApi'))
@@ -85,26 +89,27 @@ test('should list all routes', t => {
   return routes.list()
 })
 
-test('should list all routes with apigw_token', t => {
+test('should list all routes with apigwToken', t => {
   t.plan(3)
-  const client = { options: {
-    apigw_token: 'token',
-    apigw_space_guid: 'space'
-  } }
+  const client = {
+    options: {
+      apigwToken: 'token',
+      apigwSpaceGuid: 'space'
+    }
+  }
   client.request = (method, path, options) => {
     t.is(method, 'GET')
     t.is(path, routes.routeMgmtApiPath('getApi'))
-    t.deepEqual(options.qs, { spaceguid: 'space', accesstoken: 'token'})
+    t.deepEqual(options.qs, {spaceguid: 'space', accesstoken: 'token'})
   }
 
   const routes = new Routes(client)
   return routes.list()
 })
 
-
 test('should list all routes with parameters including basepath', t => {
   t.plan(3)
-  const client = { options: {} }
+  const client = {options: {}}
   const options = {basepath: '/hello', relpath: '/foo/bar', operation: 'GET', limit: 10, skip: 10}
   client.request = (method, path, _options) => {
     t.is(method, 'GET')
@@ -118,13 +123,13 @@ test('should list all routes with parameters including basepath', t => {
 
 test('should list all routes with parameters including name', t => {
   t.plan(3)
-  const client = { options: {} }
+  const client = {options: {}}
   const options = {name: '/hello', relpath: '/foo/bar', operation: 'GET', limit: 10, skip: 10}
-  const qs_options = {basepath: '/hello', relpath: '/foo/bar', operation: 'GET', limit: 10, skip: 10}
+  const qsOptions = {basepath: '/hello', relpath: '/foo/bar', operation: 'GET', limit: 10, skip: 10}
   client.request = (method, path, _options) => {
     t.is(method, 'GET')
     t.is(path, routes.routeMgmtApiPath('getApi'))
-    t.deepEqual(_options.qs, qs_options)
+    t.deepEqual(_options.qs, qsOptions)
   }
 
   const routes = new Routes(client)
@@ -132,14 +137,19 @@ test('should list all routes with parameters including name', t => {
 })
 
 test('list routes providing basepath and name', t => {
-  const client = { options: {} }
+  const client = {options: {}}
   const routes = new Routes(client)
-  return t.throws(() => { routes.list({basepath: 'bp', name: 'nm'}) }, /Invalid parameters: use basepath or name, not both/)
+  return t.throws(() => {
+    routes.list({
+      basepath: 'bp',
+      name: 'nm'
+    })
+  }, /Invalid parameters: use basepath or name, not both/)
 })
 
 test('should delete a route with basepath', t => {
   t.plan(3)
-  const client = { options: {} }
+  const client = {options: {}}
   const options = {force: true, basepath: '/hello'}
 
   client.request = (method, path, _options) => {
@@ -154,7 +164,7 @@ test('should delete a route with basepath', t => {
 
 test('should delete a route with name', t => {
   t.plan(3)
-  const client = { options: {} }
+  const client = {options: {}}
   const options = {force: true, basepath: '/hello'}
 
   client.request = (method, path, _options) => {
@@ -169,15 +179,17 @@ test('should delete a route with name', t => {
 
 test('should delete a route with apigw token', t => {
   t.plan(3)
-  const client = { options: {
-    apigw_token: 'token',
-    apigw_space_guid: 'space'
-  } }
+  const client = {
+    options: {
+      apigwToken: 'token',
+      apigwSpaceGuid: 'space'
+    }
+  }
 
   client.request = (method, path, options) => {
     t.is(method, 'DELETE')
     t.is(path, routes.routeMgmtApiPath('deleteApi'))
-    t.deepEqual(options.qs, { basepath: '/hello', force: true, spaceguid: 'space', accesstoken: 'token'})
+    t.deepEqual(options.qs, {basepath: '/hello', force: true, spaceguid: 'space', accesstoken: 'token'})
   }
 
   const routes = new Routes(client)
@@ -186,7 +198,7 @@ test('should delete a route with apigw token', t => {
 
 test('should delete a route with parameters', t => {
   t.plan(3)
-  const client = { options: {} }
+  const client = {options: {}}
   const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
 
   client.request = (method, path, _options) => {
@@ -200,24 +212,28 @@ test('should delete a route with parameters', t => {
 })
 
 test('delete routes without providing basepath or name', t => {
-  const client = { options: {} }
+  const client = {options: {}}
   const routes = new Routes(client)
   return t.throws(() => { routes.delete() }, /Missing mandatory parameters: basepath or name/)
 })
 
 test('delete routes providing basepath and name', t => {
-  const client = { options: {} }
+  const client = {options: {}}
   const routes = new Routes(client)
-  return t.throws(() => { routes.delete({basepath: 'bp', name: 'nm'}) }, /Invalid parameters: use basepath or name, not both/)
+  return t.throws(() => {
+    routes.delete({
+      basepath: 'bp',
+      name: 'nm'
+    })
+  }, /Invalid parameters: use basepath or name, not both/)
 })
 
 test('should create a route', t => {
   t.plan(3)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -231,7 +247,8 @@ test('should create a route', t => {
         namespace: '_',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/_/default/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -247,10 +264,10 @@ test('should create a route', t => {
 
 test('should create a route from swagger file', t => {
   t.plan(3)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key }
-  const client = { path_url, options: client_options }
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -271,11 +288,10 @@ test('should create a route from swagger file', t => {
 
 test('should create a route with api name', t => {
   t.plan(3)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -290,7 +306,8 @@ test('should create a route with api name', t => {
         namespace: '_',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/_/default/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -304,13 +321,12 @@ test('should create a route with api name', t => {
   return routes.create({relpath: '/hello', operation: 'GET', action: 'helloAction', name: 'SOME_NAME'})
 })
 
-test('should create a route with apigw_token', t => {
+test('should create a route with apigwToken', t => {
   t.plan(4)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key, apigw_token: 'token', apigw_space_guid: 'space' }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey, apigwToken: 'token', apigwSpaceGuid: 'space'}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -324,7 +340,8 @@ test('should create a route with apigw_token', t => {
         namespace: '_',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/_/default/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -332,7 +349,7 @@ test('should create a route with apigw_token', t => {
     t.is(method, 'POST')
     t.is(path, routes.routeMgmtApiPath('createApi'))
     t.deepEqual(_options.body, body)
-    t.deepEqual(_options.qs, { spaceguid: 'space', accesstoken: 'token'})
+    t.deepEqual(_options.qs, {spaceguid: 'space', accesstoken: 'token'})
   }
 
   const routes = new Routes(client)
@@ -341,11 +358,10 @@ test('should create a route with apigw_token', t => {
 
 test('should create a route with response type', t => {
   t.plan(4)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -359,7 +375,8 @@ test('should create a route with response type', t => {
         namespace: '_',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/_/default/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -367,20 +384,19 @@ test('should create a route with response type', t => {
     t.is(method, 'POST')
     t.is(path, routes.routeMgmtApiPath('createApi'))
     t.deepEqual(_options.body, body)
-    t.deepEqual(_options.qs, { responsetype: 'http' })
+    t.deepEqual(_options.qs, {responsetype: 'http'})
   }
 
   const routes = new Routes(client)
   return routes.create({relpath: '/hello', operation: 'GET', action: 'helloAction', responsetype: 'http'})
 })
 
-test('should create a route with apigw_token and action with package', t => {
+test('should create a route with apigwToken and action with package', t => {
   t.plan(4)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key, apigw_token: 'token', apigw_space_guid: 'space' }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey, apigwToken: 'token', apigwSpaceGuid: 'space'}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -394,7 +410,8 @@ test('should create a route with apigw_token and action with package', t => {
         namespace: '_',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/_/package/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -402,20 +419,19 @@ test('should create a route with apigw_token and action with package', t => {
     t.is(method, 'POST')
     t.is(path, routes.routeMgmtApiPath('createApi'))
     t.deepEqual(_options.body, body)
-    t.deepEqual(_options.qs, { spaceguid: 'space', accesstoken: 'token'})
+    t.deepEqual(_options.qs, {spaceguid: 'space', accesstoken: 'token'})
   }
 
   const routes = new Routes(client)
   return routes.create({relpath: '/hello', operation: 'GET', action: 'package/helloAction'})
 })
 
-test('should create a route with apigw_token and action with package & ns', t => {
+test('should create a route with apigwToken and action with package & ns', t => {
   t.plan(4)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key, apigw_token: 'token', apigw_space_guid: 'space' }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey, apigwToken: 'token', apigwSpaceGuid: 'space'}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -429,7 +445,8 @@ test('should create a route with apigw_token and action with package & ns', t =>
         namespace: 'ns',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/ns/package/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -437,7 +454,7 @@ test('should create a route with apigw_token and action with package & ns', t =>
     t.is(method, 'POST')
     t.is(path, routes.routeMgmtApiPath('createApi'))
     t.deepEqual(_options.body, body)
-    t.deepEqual(_options.qs, { spaceguid: 'space', accesstoken: 'token'})
+    t.deepEqual(_options.qs, {spaceguid: 'space', accesstoken: 'token'})
   }
 
   const routes = new Routes(client)
@@ -446,11 +463,10 @@ test('should create a route with apigw_token and action with package & ns', t =>
 
 test('should create a route using global ns', t => {
   t.plan(3)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key, namespace: 'global_ns'}
-  const client = { path_url, options: client_options}
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey, namespace: 'global_ns'}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -464,7 +480,8 @@ test('should create a route using global ns', t => {
         namespace: 'global_ns',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/global_ns/default/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -480,11 +497,10 @@ test('should create a route using global ns', t => {
 
 test('should create a route using basepath', t => {
   t.plan(3)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -498,7 +514,8 @@ test('should create a route using basepath', t => {
         namespace: '_',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/_/default/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -514,11 +531,10 @@ test('should create a route using basepath', t => {
 
 test('should create a route using fully-qualified action name', t => {
   t.plan(3)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -532,7 +548,8 @@ test('should create a route using fully-qualified action name', t => {
         namespace: 'test',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/test/foo/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -548,11 +565,10 @@ test('should create a route using fully-qualified action name', t => {
 
 test('should create a route using action name with ns', t => {
   t.plan(3)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey: apiKey}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -566,7 +582,8 @@ test('should create a route using action name with ns', t => {
         namespace: 'test',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/test/default/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
@@ -582,11 +599,10 @@ test('should create a route using action name with ns', t => {
 
 test('should create a route using action name with ns overriding defaults', t => {
   t.plan(3)
-  const path_url = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
-  const api_key = 'username:password'
-  const client_options = { api_key, namespace: 'global' }
-  const client = { path_url, options: client_options }
-  const options = {force: true, basepath: '/hello', relpath: '/bar/1', operation: 'GET'}
+  const pathUrl = path => `https://openwhisk.ng.bluemix.net/api/v1/${path}`
+  const apiKey = 'username:password'
+  const clientOptions = {apiKey, namespace: 'global'}
+  const client = {pathUrl, options: clientOptions}
 
   const body = {
     apidoc: {
@@ -600,7 +616,8 @@ test('should create a route using action name with ns overriding defaults', t =>
         namespace: 'test',
         backendMethod: 'GET',
         backendUrl: 'https://openwhisk.ng.bluemix.net/api/v1/web/test/default/helloAction.http',
-        authkey: api_key }
+        authkey: apiKey
+      }
     }
   }
 
index b2b8265..c6bac97 100644 (file)
@@ -9,7 +9,7 @@ const Rules = require('../../lib/rules')
 test('should list all rules without parameters', t => {
   t.plan(3)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   client.request = (method, path, options) => {
@@ -23,7 +23,7 @@ test('should list all rules without parameters', t => {
 
 test('should list all rules with parameters', t => {
   t.plan(3)
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   client.request = (method, path, options) => {
@@ -52,7 +52,7 @@ test('should list all rules with parameter count', t => {
 test('should retrieve rule from identifier', t => {
   t.plan(2)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   client.request = (method, path, options) => {
@@ -66,7 +66,7 @@ test('should retrieve rule from identifier', t => {
 test('should retrieve rule from ruleName identifier', t => {
   t.plan(2)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   client.request = (method, path, options) => {
@@ -80,7 +80,7 @@ test('should retrieve rule from ruleName identifier', t => {
 test('should retrieve rule from string identifier', t => {
   t.plan(2)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   client.request = (method, path, options) => {
@@ -94,7 +94,7 @@ test('should retrieve rule from string identifier', t => {
 test('should delete rule from identifier', t => {
   t.plan(2)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   client.request = (method, path, options) => {
@@ -108,7 +108,7 @@ test('should delete rule from identifier', t => {
 test('should delete rule from string identifier', t => {
   t.plan(2)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   client.request = (method, path, options) => {
@@ -127,7 +127,7 @@ test('should throw error trying to invoke rule', t => {
 test('create a new rule', t => {
   t.plan(4)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   const name = '12345'
@@ -138,7 +138,7 @@ test('create a new rule', t => {
     t.is(method, 'PUT')
     t.is(path, `namespaces/${ns}/rules/${name}`)
     t.deepEqual(options.qs, {})
-    t.deepEqual(options.body, { action: `/_/${action}`, trigger: `/_/${trigger}` })
+    t.deepEqual(options.body, {action: `/_/${action}`, trigger: `/_/${trigger}`})
   }
 
   return rules.create({name, action, trigger})
@@ -147,7 +147,7 @@ test('create a new rule', t => {
 test('create a new rule using fully qualified names', t => {
   t.plan(4)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   const name = '12345'
@@ -158,32 +158,38 @@ test('create a new rule using fully qualified names', t => {
     t.is(method, 'PUT')
     t.is(path, `namespaces/${ns}/rules/${name}`)
     t.deepEqual(options.qs, {})
-    t.deepEqual(options.body, { action, trigger })
+    t.deepEqual(options.body, {action, trigger})
   }
 
   return rules.create({name, action, trigger})
 })
 
 test('create a rule without providing a rule name', t => {
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
-  return t.throws(() => { rules.create({action: '', trigger: ''}) }, /name, ruleName/)
+  return t.throws(() => {
+    rules.create({action: '', trigger: ''})
+  }, /name, ruleName/)
 })
 
 test('create a rule without providing an action name', t => {
   const rules = new Rules()
-  return t.throws(() => { rules.create({name: '', trigger: ''}) }, /Missing mandatory action parameter/)
+  return t.throws(() => {
+    rules.create({name: '', trigger: ''})
+  }, /Missing mandatory action parameter/)
 })
 
 test('create a rule without providing a trigger name', t => {
   const rules = new Rules()
-  return t.throws(() => { rules.create({name: '', action: ''}) }, /Missing mandatory trigger parameter/)
+  return t.throws(() => {
+    rules.create({name: '', action: ''})
+  }, /Missing mandatory trigger parameter/)
 })
 
 test('update existing rule', t => {
   t.plan(4)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   const name = '12345'
@@ -194,7 +200,7 @@ test('update existing rule', t => {
     t.is(method, 'PUT')
     t.is(path, `namespaces/${ns}/rules/${name}`)
     t.deepEqual(options.qs, {overwrite: true})
-    t.deepEqual(options.body, { action: `/_/${action}`, trigger: `/_/${trigger}` })
+    t.deepEqual(options.body, {action: `/_/${action}`, trigger: `/_/${trigger}`})
   }
 
   return rules.update({name, action, trigger})
@@ -203,7 +209,7 @@ test('update existing rule', t => {
 test('should enable rule', t => {
   t.plan(3)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   const name = '12345'
@@ -220,7 +226,7 @@ test('should enable rule', t => {
 test('should disable rule', t => {
   t.plan(3)
   const ns = '_'
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
   const name = '12345'
@@ -235,21 +241,21 @@ test('should disable rule', t => {
 })
 
 test('should parse correct namespace for actions names with no other namespaces', t => {
-  const client = { options: {} }
+  const client = {options: {}}
   const rules = new Rules(client)
 
-  t.is(rules.convert_to_fqn('simple'), '/_/simple')
-  t.is(rules.convert_to_fqn('simple', 'a'), '/a/simple')
-  t.is(rules.convert_to_fqn('/a/simple'), '/a/simple')
-  t.is(rules.convert_to_fqn('/a/simple', 'b'), '/a/simple')
+  t.is(rules.convertToFqn('simple'), '/_/simple')
+  t.is(rules.convertToFqn('simple', 'a'), '/a/simple')
+  t.is(rules.convertToFqn('/a/simple'), '/a/simple')
+  t.is(rules.convertToFqn('/a/simple', 'b'), '/a/simple')
 })
 
 test('should parse correct namespace for actions names with global namespace', t => {
-  const client = { options: { namespace: 'global' } }
+  const client = {options: {namespace: 'global'}}
   const rules = new Rules(client)
 
-  t.is(rules.convert_to_fqn('simple'), '/global/simple')
-  t.is(rules.convert_to_fqn('simple', 'a'), '/a/simple')
-  t.is(rules.convert_to_fqn('/a/simple'), '/a/simple')
-  t.is(rules.convert_to_fqn('/a/simple', 'b'), '/a/simple')
+  t.is(rules.convertToFqn('simple'), '/global/simple')
+  t.is(rules.convertToFqn('simple', 'a'), '/a/simple')
+  t.is(rules.convertToFqn('/a/simple'), '/a/simple')
+  t.is(rules.convertToFqn('/a/simple', 'b'), '/a/simple')
 })
index d855727..d463b35 100644 (file)
@@ -23,7 +23,6 @@ test('should list all triggers without parameters', t => {
 
 test('should list all triggers with parameters', t => {
   t.plan(3)
-  const ns = '_'
   const client = {}
   const triggers = new Triggers(client)
 
@@ -38,7 +37,6 @@ test('should list all triggers with parameters', t => {
 
 test('should list all triggers with parameter count', t => {
   t.plan(3)
-  const ns = '_'
   const client = {}
   const triggers = new Triggers(client)
 
@@ -152,7 +150,6 @@ test('should invoke trigger from string identifier', t => {
 
 test('should invoke fully qualified trigger', t => {
   t.plan(3)
-  const ns = '_'
   const client = {}
   const triggers = new Triggers(client)
 
@@ -167,7 +164,6 @@ test('should invoke fully qualified trigger', t => {
 
 test('should invoke fully qualified trigger with package', t => {
   t.plan(3)
-  const ns = '_'
   const client = {}
   const triggers = new Triggers(client)
 
@@ -230,7 +226,7 @@ test('create a new trigger with custom body', t => {
   t.plan(4)
   const ns = '_'
   const client = {}
-  const trigger = { foo: 'bar' }
+  const trigger = {foo: 'bar'}
   const triggers = new Triggers(client)
 
   client.request = (method, path, options) => {
index 3aaf856..5abd836 100755 (executable)
@@ -35,5 +35,6 @@ key=$(cat $WHISKDIR/ansible/files/auth.guest)
 # Test
 cd $ROOTDIR
 npm install --dev
+npm run lint
 npm run code-coverage-build
 npm run code-coverage-run $key $edgehost guest true "travis,insecure"