Home Reference Source Test Repository

test/abstract-spec.js

'use strict'
/* eslint-env mocha */
/* eslint-disable no-unused-expressions */

const Spark = require('../src')
const SparkBase = require('../src/CiscoSpark')
const chai = require('chai')
chai.use(require('chai-string'))
const expect = chai.expect
const async = require('async')

/** @test {CiscoSpark} */
describe('CiscoSpark.abstractMethods', function () {
  /** @test {CiscoSpark#request} */
  it('should get token from Environment Variable', function (done) {
    process.env.CISCOSPARK_ACCESS_TOKEN = '***Test Token***'
    process.env.CISCOSPARK_USER_AGENT = '***Test Agent***'
    const sparkx = new SparkBase()
    sparkx.accessToken = null
    sparkx.userAgent = null
    const spark = new SparkBase(sparkx)
    spark.apiUrl = 'http://localhost/dev/null'
    expect(spark.accessToken).to.be.equals(process.env.CISCOSPARK_ACCESS_TOKEN)
    expect(spark.userAgent).to.be.equals(process.env.CISCOSPARK_USER_AGENT)
    spark.request({method: 'GET'}, () => { done() })
  })

  it('should error if ApiUrl is not set', function (done) {
    const spark = new Spark()
    const tasks = [
      (cb) => {
        spark.list(null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          expect(response).to.be.not.ok
          cb()
        })
      },
      (cb) => {
        spark.create(null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          expect(response).to.be.not.ok
          cb()
        })
      },
      (cb) => {
        spark.get(null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          expect(response).to.be.not.ok
          cb()
        })
      },
      (cb) => {
        spark.update(0, null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          expect(response).to.be.not.ok
          cb()
        })
      },
      (cb) => {
        spark.delete(null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          expect(response).to.be.not.ok
          cb()
        })
      }
    ]
    async.parallel(tasks, done)
  })

  it('should error if Params is not set', function (done) {
    const spark = new SparkBase('***Test Token***', '***Test Agent***', '***Test URL***')
    spark.requestCallback = function (options, callback) {
      return callback(null, {
        options: options,
        timestamp: Date.now()
      })
    }
    const tasks = [
      (cb) => {
        spark.list(null, (err, response) => {
          expect(err).to.be.not.ok
          cb()
        })
      },
      (cb) => {
        spark.create(null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          cb()
        })
      },
      (cb) => {
        spark.get(null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          cb()
        })
      },
      (cb) => {
        spark.update(0, null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          cb()
        })
      },
      (cb) => {
        spark.delete(null, (err, response) => {
          expect(err).to.be.instanceOf(Error)
          cb()
        })
      }
    ]
    async.parallel(tasks, done)
  })

  it('should detect arguments correctly', function (done) {
    const spark = new SparkBase('***Test Token***', '***Test Agent***', '***Test URL***')
    spark.requestCallback = function (options, callback) {
      return callback(null, {
        options: options,
        timestamp: Date.now()
      })
    }
    spark.idName = 'testId'
    const testId = '*** Test Id ***'
    const testValue = '' + Date.now()
    const tasks = [
      (cb) => {
        spark.get({ id: testId }, (err, response) => {
          expect(err).to.be.not.ok
          expect(response.options.url).to.endsWith(testId)
          cb()
        })
      },
      (cb) => {
        spark.update({ 'testId': testId, 'key': testValue }, (err, response) => {
          expect(err).to.be.not.ok
          expect(response.options.url).to.endsWith(testId)
          expect(response.options.json.key).to.be.equals(testValue)
          cb()
        })
      },
      (cb) => {
        spark.update((err, response) => {
          expect(err).to.be.not.ok
          expect(response.options.url).to.endsWith(testId)
          expect(response.options.json.key).to.be.equals(testValue)
          cb()
        }, { key: testValue }, testId)
      }
    ]
    async.parallel(tasks, done)
  })
})