diff --git a/lib/alpha_vantage.coffee b/lib/alpha_vantage.coffee index 82f5271..ac20912 100644 --- a/lib/alpha_vantage.coffee +++ b/lib/alpha_vantage.coffee @@ -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 @@ -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)) diff --git a/lib/alpha_vantage/error_message.coffee b/lib/alpha_vantage/error_message.coffee new file mode 100644 index 0000000..f4458ae --- /dev/null +++ b/lib/alpha_vantage/error_message.coffee @@ -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 diff --git a/test/fixture/error_message.json b/test/fixture/error_message.json new file mode 100644 index 0000000..ca935a7 --- /dev/null +++ b/test/fixture/error_message.json @@ -0,0 +1,3 @@ +{ + "Error Message": "Invalid API call." +} diff --git a/test/lib/alpha_vantage.coffee b/test/lib/alpha_vantage.coffee index 213d746..a5d7f63 100644 --- a/test/lib/alpha_vantage.coffee +++ b/test/lib/alpha_vantage.coffee @@ -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', -> @@ -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) + ) diff --git a/test/lib/alpha_vantage/error_message.coffee b/test/lib/alpha_vantage/error_message.coffee new file mode 100644 index 0000000..06393af --- /dev/null +++ b/test/lib/alpha_vantage/error_message.coffee @@ -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.' } + ]) diff --git a/test/lib/alpha_vantage/slack_message.coffee b/test/lib/alpha_vantage/slack_message.coffee index abe1e69..a3b8713 100644 --- a/test/lib/alpha_vantage/slack_message.coffee +++ b/test/lib/alpha_vantage/slack_message.coffee @@ -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' } diff --git a/test/test_helper.coffee b/test/test_helper.coffee index 198ebe5..966d63f 100644 --- a/test/test_helper.coffee +++ b/test/test_helper.coffee @@ -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'))