diff --git a/lib/plugins/openaps.js b/lib/plugins/openaps.js index f6ee984c754..75521b51199 100644 --- a/lib/plugins/openaps.js +++ b/lib/plugins/openaps.js @@ -113,6 +113,11 @@ function init() { , ops.enacted.mealAssist ? ' Meal Assist: ' + ops.enacted.mealAssist : '' ].join('') }); + } else if ('notenacted' === prop.status.code) { + info.push({ + label: timeAt(false, sbx) + timeFormat(ops.notEnactedTime, sbx) + , value: 'Not Enacted' + }); } else if ('looping' === prop.status.code) { addSuggestion(); } else if (ops.lastLoopTime) { @@ -200,13 +205,18 @@ function checkLoopStatus (openapsStatus, sbx) { }; if (openapsStatus) { - var enactedLast = openapsStatus.openaps.enacted && moment(openapsStatus.openaps.enacted.timestamp); + var enactedLast = openapsStatus.openaps.enacted && openapsStatus.openaps.enacted.recieved && moment(openapsStatus.openaps.enacted.timestamp); + var notEnactedLast = openapsStatus.openaps.enacted && !openapsStatus.openaps.enacted.recieved && moment(openapsStatus.openaps.enacted.timestamp); var suggestedLast = openapsStatus.openaps.suggested && moment(openapsStatus.openaps.suggested.timestamp); var last = moment(openapsStatus.mills); var recent = moment(sbx.time).subtract(15, 'minutes'); - if (enactedLast && enactedLast.isAfter(recent)) { + if (notEnactedLast && notEnactedLast.isAfter(recent)) { + status.symbol = 'x'; + status.code = 'notenacted'; + status.label = 'Not Enacted'; + } else if (enactedLast && enactedLast.isAfter(recent)) { status.symbol = '⌁'; status.code = 'enacted'; status.label = 'Enacted'; @@ -233,8 +243,20 @@ function prepOps (prop, sbx) { var pump = prop.pump; var suggested = prop.openaps && prop.openaps.suggested; var suggestedTime = suggested && moment(suggested.timestamp); - var enacted = prop.openaps && prop.openaps.enacted; + + var enacted = null; + var notEnacted = null; + + if (prop.openaps && prop.openaps.enacted && prop.openaps.enacted.recieved) { + enacted = prop.openaps.enacted; + } + + if (prop.openaps && !prop.openaps.enacted && prop.openaps.enacted.recieved) { + notEnacted = prop.openaps.enacted; + } + var enactedTime = enacted && moment(enacted.timestamp); + var notEnactedTime = notEnacted && moment(notEnacted.timestamp); return { recent: recent @@ -242,6 +264,8 @@ function prepOps (prop, sbx) { , suggestedTime: suggestedTime , enacted: enacted , enactedTime: enactedTime + , notEnacted: enacted + , notEnactedTime: enactedTime , iob: iob , iobTime: iob && moment(iob.timestamp) , pump: pump diff --git a/tests/openaps.test.js b/tests/openaps.test.js index 4a1d29f0dd0..7941f120037 100644 --- a/tests/openaps.test.js +++ b/tests/openaps.test.js @@ -101,6 +101,34 @@ describe('openaps', function ( ) { }); + it('check the recieved flag to see if it was received', function (done) { + var ctx = { + settings: { + units: 'mg/dl' + } + , notifications: require('../lib/notifications')(env, ctx) + }; + + ctx.notifications.initRequests(); + + var notStatus = _.cloneDeep(status); + notStatus.openaps.enacted.recieved = false; + var sbx = require('../lib/sandbox')().clientInit(ctx, now, {devicestatus: [notStatus]}); + + sbx.offerProperty = function mockedOfferProperty (name, setter) { + name.should.equal('openaps'); + var result = setter(); + should.exist(result); + result.status.symbol.should.equal('x'); + result.status.code.should.equal('notenacted'); + should.ok(result.status.when.isSame(now)); + done(); + }; + + openaps.setProperties(sbx); + + }); + it('generate an alart for a stuck loop', function (done) { var ctx = { settings: {