@@ -621,3 +621,108 @@ def test_can_load_async_with_include_time_series_last_range_by_count(self):
621621 self .assertEqual (len (values ) - 1 - i , values [i ].values [0 ])
622622 self .assertEqual (tag , values [i ].tag )
623623 self .assertEqual (base_line - timedelta (minutes = len (values ) - 1 - i ), values [i ].timestamp )
624+
625+ def test_can_load_async_with_include_array_of_time_series_last_range_by_time (self ):
626+ self .can_load_async_with_include_array_of_time_series_last_range (True )
627+
628+ def test_can_load_async_with_include_array_of_time_series_last_range_by_count (self ):
629+ self .can_load_async_with_include_array_of_time_series_last_range (False )
630+
631+ def can_load_async_with_include_array_of_time_series_last_range (self , by_time : bool ) -> None :
632+ company_id = "companies/1-A"
633+ order_id = "orders/1-A"
634+ base_line = datetime (2023 , 8 , 20 , 21 , 30 )
635+ ts_name1 = "Heartrate"
636+ ts_name2 = "Speedrate"
637+ tag1 = "watches/fitbit"
638+ tag2 = "watches/apple"
639+ tag3 = "watches/bitfit"
640+
641+ with self .store .open_session () as session :
642+ session .store (Company (name = "HR" ), company_id )
643+ session .store (Order (company = company_id ), order_id )
644+
645+ tsf = session .time_series_for (order_id , ts_name1 )
646+ tsf .append_single (base_line , 67 , tag2 )
647+ tsf .append_single (base_line - timedelta (minutes = 5 ), 64 , tag2 )
648+ tsf .append_single (base_line - timedelta (minutes = 10 ), 65 , tag1 )
649+
650+ tsf2 = session .time_series_for (order_id , ts_name2 )
651+ tsf2 .append_single (base_line - timedelta (minutes = 15 ), 6 , tag3 )
652+ tsf2 .append_single (base_line - timedelta (minutes = 10 ), 7 , tag3 )
653+ tsf2 .append_single (base_line - timedelta (minutes = 9 ), 7 , tag3 )
654+ tsf2 .append_single (base_line - timedelta (minutes = 8 ), 6 , tag3 )
655+
656+ session .save_changes ()
657+
658+ with self .store .open_session () as session :
659+ order = (
660+ session .load (
661+ order_id ,
662+ Order ,
663+ lambda i : i .include_documents ("company" ).include_array_of_time_series_by_range_type_and_time (
664+ [ts_name1 , ts_name2 ], TimeSeriesRangeType .LAST , TimeValue .of_minutes (10 )
665+ ),
666+ )
667+ if by_time
668+ else session .load (
669+ order_id ,
670+ Order ,
671+ lambda i : i .include_documents ("company" ).include_array_of_time_series_by_range_type_and_count (
672+ [ts_name1 , ts_name2 ], TimeSeriesRangeType .LAST , 3
673+ ),
674+ )
675+ )
676+
677+ self .assertEqual (1 , session .advanced .number_of_requests )
678+
679+ # should not go to server
680+ company = session .load (order .company , Company )
681+
682+ self .assertEqual (1 , session .advanced .number_of_requests )
683+ self .assertEqual ("HR" , company .name )
684+
685+ # should not go to server
686+ heartrate_values = session .time_series_for_entity (order , ts_name1 ).get (
687+ base_line - timedelta (minutes = 10 ), None
688+ )
689+ self .assertEqual (1 , session .advanced .number_of_requests )
690+ self .assertEqual (3 , len (heartrate_values ))
691+
692+ self .assertEqual (1 , len (heartrate_values [0 ].values ))
693+ self .assertEqual (65 , heartrate_values [0 ].values [0 ])
694+ self .assertEqual (tag1 , heartrate_values [0 ].tag )
695+ self .assertEqual (base_line - timedelta (minutes = 10 ), heartrate_values [0 ].timestamp )
696+
697+ self .assertEqual (1 , len (heartrate_values [1 ].values ))
698+ self .assertEqual (64 , heartrate_values [1 ].values [0 ])
699+ self .assertEqual (tag2 , heartrate_values [1 ].tag )
700+ self .assertEqual (base_line - timedelta (minutes = 5 ), heartrate_values [1 ].timestamp )
701+
702+ self .assertEqual (1 , len (heartrate_values [2 ].values ))
703+ self .assertEqual (67 , heartrate_values [2 ].values [0 ])
704+ self .assertEqual (tag2 , heartrate_values [2 ].tag )
705+ self .assertEqual (base_line , heartrate_values [2 ].timestamp )
706+
707+ # should not go to server
708+ speedrate_values = session .time_series_for_entity (order , ts_name2 ).get (
709+ base_line - timedelta (minutes = 10 ), None
710+ )
711+
712+ self .assertEqual (1 , session .advanced .number_of_requests )
713+ self .assertEqual (3 , len (speedrate_values ))
714+
715+ self .assertEqual (1 , len (speedrate_values [0 ].values ))
716+ self .assertEqual (7 , speedrate_values [0 ].values [0 ])
717+ self .assertEqual (tag3 , speedrate_values [0 ].tag )
718+ self .assertEqual (base_line - timedelta (minutes = 10 ), speedrate_values [0 ].timestamp )
719+
720+ self .assertEqual (1 , len (speedrate_values [1 ].values ))
721+ self .assertEqual (7 , speedrate_values [1 ].values [0 ])
722+ self .assertEqual (tag3 , speedrate_values [1 ].tag )
723+ self .assertEqual (base_line - timedelta (minutes = 9 ), speedrate_values [1 ].timestamp )
724+
725+ self .assertEqual (1 , len (speedrate_values [2 ].values ))
726+ self .assertEqual (6 , speedrate_values [2 ].values [0 ])
727+ self .assertEqual (tag3 , speedrate_values [2 ].tag )
728+ self .assertEqual (base_line - timedelta (minutes = 8 ), speedrate_values [2 ].timestamp )
0 commit comments