This commit is contained in:
Radek Stepan 2014-12-22 14:26:21 -07:00
parent 3ecac58c00
commit 07666554ac
4 changed files with 45 additions and 16 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{
"name": "burnchart",
"version": "2.0.3",
"version": "2.0.4",
"description": "GitHub Burndown Chart as a Service",
"author": "Radek Stepan <dev@radekstepan.com> (http://radekstepan.com)",
"license": "AGPL-3.0",

View File

@ -6,6 +6,7 @@ require '../../utils/mixins.coffee'
config = require '../../models/config.coffee'
user = require '../../models/user.coffee'
mediator = require '../mediator.coffee'
# Custom JSON parser.
superagent.parse =
@ -107,11 +108,7 @@ request = ({ protocol, host, path, query, headers }, cb) ->
response = (err, data, cb) ->
return cb error err if err
# 2xx?
if data.statusType isnt 2
# Do we have a message from GitHub?
return cb data.body.message if data?.body?.message?
# Use SA one.
return cb data.error.message
return cb error data.body if data.statusType isnt 2
# All good.
cb null, data.body
@ -153,16 +150,22 @@ user.observe 'ready', (val) ->
error = (err) ->
switch
when _.isString err
message = err
text = err
when _.isArray err
message = err[1]
text = err[1]
when _.isObject(err) and _.isString(err.message)
message = err.message
text = err.message
unless message
unless text
try
message = JSON.stringify err
text = JSON.stringify err
catch
message = do err.toString
text = do err.toString
message
# API rate limit exceeded? Flash a message to that effect.
# https://developer.github.com/v3/#rate-limiting
if /API rate limit exceeded/.test text
type = 'warn'
mediator.fire '!app/notify', { type, text }
text

View File

@ -36,6 +36,9 @@ user.set 'ready', yes
# Get config so we can fudge timeout.
config = require '../src/models/config.coffee'
# Global mediator.
mediator = require '../src/modules/mediator.coffee'
module.exports =
'request - all milestones (ok)': (done) ->
@ -56,6 +59,29 @@ module.exports =
assert.deepEqual data, [ null ]
do done
'request - all milestones (403)': (done) ->
superagent.response =
'statusType': 4
'error': no
'body':
'message': 'API rate limit exceeded'
owner = 'radekstepan'
name = 'burnchart'
milestone = 0
notified = no
mediator.on '!app/notify', ->
notified = yes
request.oneMilestone { owner, name, milestone }, (err) ->
assert err, 'Error'
assert.isTrue notified
mediator.off '!app/notify'
do done
'request - one milestone (ok)': (done) ->
superagent.response =
'statusType': 2