Skip to content

Commit

Permalink
Add error message object
Browse files Browse the repository at this point in the history
  • Loading branch information
yulii committed Dec 10, 2019
1 parent 1f63032 commit af65ead
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 7 deletions.
3 changes: 2 additions & 1 deletion lib/alpha_vantage.coffee
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
QueryString = require './query_string'
AlphaVantageTimeSeriesDaily = require './alpha_vantage/time_series_daily'
AlphaVantageErrorMessage = require './alpha_vantage/error_message'
AlphaVantageSlackMessage = require './alpha_vantage/slack_message'

class AlphaVantage
Expand All @@ -22,7 +23,7 @@ class AlphaVantage
.get() (error, response, body) ->
result = JSON.parse(body)
if result.hasOwnProperty('Error Message')
callback(attachments: [{ color: '#ff0000', title: 'Error Message', text: result['Error Message'] }])
callback(new AlphaVantageErrorMessage(result))
else
outline = new AlphaVantageTimeSeriesDaily(result).outline()
callback(new AlphaVantageSlackMessage(outline))
Expand Down
13 changes: 13 additions & 0 deletions lib/alpha_vantage/error_message.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class AlphaVantageErrorMessage
_response = undefined

constructor: (response) ->
_response = response

format: ->
return attachments: [{ color: '#FF0000', title: 'Error Message', text: _response['Error Message'] }]

toString: ->
return JSON.stringify(@format())

module.exports = AlphaVantageErrorMessage
3 changes: 3 additions & 0 deletions test/fixture/error_message.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"Error Message": "Invalid API call."
}
20 changes: 15 additions & 5 deletions test/lib/alpha_vantage.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ sinon = require('sinon')

Robot = require('hubot/src/robot')
AlphaVantageSlackMessage = require '../../lib/alpha_vantage/slack_message'
AlphaVantageErrorMessage = require '../../lib/alpha_vantage/error_message'
AlphaVantage = require(source)
describe 'AlphaVantage', ->

Expand Down Expand Up @@ -37,9 +38,18 @@ describe 'AlphaVantage', ->
afterEach ->
robot.http.restore()

it 'returns an instance with default values', () ->
http_stub((f) -> f('error', 'response', helper.fixture.time_series_daily))
describe 'when response is successful', ->
it 'calls callback with a message object ', () ->
http_stub((f) -> f('error', 'response', helper.fixture.time_series_daily))

new AlphaVantage(function: 'FUNCTION', symbol: 'SYMBOL').execute(robot, (message) ->
expect(message).to.be.an.instanceof(AlphaVantageSlackMessage)
)

av = new AlphaVantage(function: 'FUNCTION', symbol: 'SYMBOL').execute(robot, (message) ->
expect(message).to.be.an.instanceof(AlphaVantageSlackMessage)
)
describe 'when response is failure', ->
it 'calls callback with a message object ', () ->
http_stub((f) -> f('error', 'response', helper.fixture.error_message))

new AlphaVantage(function: 'FUNCTION', symbol: 'SYMBOL').execute(robot, (message) ->
expect(message).to.be.an.instanceof(AlphaVantageErrorMessage)
)
17 changes: 17 additions & 0 deletions test/lib/alpha_vantage/error_message.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
source = '../../../lib/alpha_vantage/error_message'
helper = require('../../test_helper')
expect = require('chai').expect

AlphaVantageErrorMessage = require(source)
describe 'AlphaVantageErrorMessage', ->
subject = undefined

beforeEach ->
object = { 'Error Message': 'Invalid API call.' }
subject = new AlphaVantageErrorMessage(object)

describe '#format', ->
it 'returns a object for slack message', () ->
expect(subject.format().attachments).to.have.ordered.deep.members([
{ color: '#FF0000', title: 'Error Message', text: 'Invalid API call.' }
])
2 changes: 1 addition & 1 deletion test/lib/alpha_vantage/slack_message.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ describe 'AlphaVantageSlackMessage', ->
subject = new AlphaVantageSlackMessage(object)

describe '#format', ->
it 'returns a string', () ->
it 'returns a object for slack message', () ->
expect(subject.format()).to.include(text: 'MSFT *149.85* at December 4, 2019', mrkdwn: true)
expect(subject.format().attachments).to.have.ordered.deep.members([
{ color: '#35A64F', text: '+0.54 (+0.36%) at December 3, 2019' }
Expand Down
1 change: 1 addition & 0 deletions test/test_helper.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ moment = require('moment-timezone')

exports.moment = moment
exports.fixture =
error_message: fs.readFileSync(path.join(__dirname, './fixture/error_message.json'))
time_series_daily: fs.readFileSync(path.join(__dirname, './fixture/time_series_daily.json'))

0 comments on commit af65ead

Please sign in to comment.