@@ -72,7 +72,6 @@ describe('Daily', () => {
7272 onSwitchToSettings : ( ) => { } ,
7373 onSwitchToBgLog : ( ) => { } ,
7474 onSwitchToTrends : ( ) => { } ,
75- trackMetric : ( ) => { } ,
7675 onUpdateChartDateRange : sinon . stub ( ) ,
7776 patient : {
7877 profile : {
@@ -309,4 +308,110 @@ describe('Daily', () => {
309308 } ) ;
310309 } ) ;
311310 } ) ;
311+
312+ describe ( 'handleAlarmHover' , ( ) => {
313+ it ( 'should set hoveredAlarm state with correct positioning' , ( ) => {
314+ const alarm = {
315+ rect : {
316+ top : 100 ,
317+ left : 200 ,
318+ width : 20 ,
319+ height : 30 ,
320+ } ,
321+ chartExtents : {
322+ left : 50 ,
323+ right : 400 ,
324+ } ,
325+ data : { type : 'alarm' } ,
326+ } ;
327+
328+ instance . handleAlarmHover ( alarm ) ;
329+
330+ expect ( instance . state . hoveredAlarm ) . to . deep . equal ( {
331+ ...alarm ,
332+ top : 130 , // rect.top + rect.height
333+ left : 210 , // rect.left + (rect.width / 2)
334+ side : 'bottom' ,
335+ } ) ;
336+ } ) ;
337+
338+ it ( 'should adjust leftOffset when tooltip would spill over left edge' , ( ) => {
339+ const alarm = {
340+ rect : {
341+ top : 100 ,
342+ left : 60 , // Close to left edge
343+ width : 20 ,
344+ height : 30 ,
345+ } ,
346+ chartExtents : {
347+ left : 50 ,
348+ right : 400 ,
349+ } ,
350+ data : { type : 'alarm' } ,
351+ } ;
352+
353+ instance . handleAlarmHover ( alarm ) ;
354+
355+ const hoveredAlarm = instance . state . hoveredAlarm ;
356+ expect ( hoveredAlarm . leftOffset ) . to . equal ( 35 ) ;
357+ } ) ;
358+
359+ it ( 'should adjust leftOffset when tooltip would spill over right edge' , ( ) => {
360+ const alarm = {
361+ rect : {
362+ top : 100 ,
363+ left : 390 , // Close to right edge
364+ width : 20 ,
365+ height : 30 ,
366+ } ,
367+ chartExtents : {
368+ left : 50 ,
369+ right : 400 ,
370+ } ,
371+ data : { type : 'alarm' } ,
372+ } ;
373+
374+ instance . handleAlarmHover ( alarm ) ;
375+
376+ const hoveredAlarm = instance . state . hoveredAlarm ;
377+ expect ( hoveredAlarm . leftOffset ) . to . equal ( - 35 ) ;
378+ } ) ;
379+
380+ it ( 'should track metric when hovering over alarm' , ( ) => {
381+ const alarm = {
382+ rect : {
383+ top : 100 ,
384+ left : 200 ,
385+ width : 20 ,
386+ height : 30 ,
387+ } ,
388+ chartExtents : {
389+ left : 50 ,
390+ right : 400 ,
391+ } ,
392+ data : { type : 'alarm' } ,
393+ } ;
394+
395+ instance . handleAlarmHover ( alarm ) ;
396+
397+ expect ( baseProps . trackMetric . calledWith ( 'hovered over daily alarm tooltip' ) ) . to . be . true ;
398+ } ) ;
399+ } ) ;
400+
401+ describe ( 'handleAlarmOut' , ( ) => {
402+ it ( 'should set hoveredAlarm state to false' , ( ) => {
403+ // First set a hoveredAlarm
404+ instance . setState ( {
405+ hoveredAlarm : {
406+ data : { type : 'alarm' } ,
407+ top : 100 ,
408+ left : 200 ,
409+ } ,
410+ } ) ;
411+
412+ instance . handleAlarmOut ( ) ;
413+
414+ expect ( instance . state . hoveredAlarm ) . to . be . false ;
415+ } ) ;
416+ } ) ;
312417} ) ;
0 commit comments