@@ -2562,3 +2562,98 @@ def test_client_get_alerts_missing_data(server):
2562
2562
with pytest .raises (ParseError ):
2563
2563
client .query (query .ALERTS )
2564
2564
assert len (server .calls ) == 1
2565
+
2566
+
2567
+ def test_client_query_last_id_unordered (server , mocker ):
2568
+ """Should determine the last_id correctly even if entries are unordered.
2569
+ Regression test for: https://github.com/palazzem/econnect-python/issues/154
2570
+ """
2571
+ html = """[
2572
+ {
2573
+ "Alarm": true,
2574
+ "MemoryAlarm": false,
2575
+ "Excluded": false,
2576
+ "InUse": true,
2577
+ "IsVideo": false,
2578
+ "Id": 3,
2579
+ "Index": 0,
2580
+ "Element": 1,
2581
+ "CommandId": 0,
2582
+ "InProgress": false
2583
+ },
2584
+ {
2585
+ "Alarm": false,
2586
+ "MemoryAlarm": false,
2587
+ "Excluded": true,
2588
+ "InUse": true,
2589
+ "IsVideo": false,
2590
+ "Id": 5,
2591
+ "Index": 2,
2592
+ "Element": 3,
2593
+ "CommandId": 0,
2594
+ "InProgress": false
2595
+ },
2596
+ {
2597
+ "Alarm": true,
2598
+ "MemoryAlarm": false,
2599
+ "Excluded": false,
2600
+ "InUse": true,
2601
+ "IsVideo": false,
2602
+ "Id": 2,
2603
+ "Index": 1,
2604
+ "Element": 2,
2605
+ "CommandId": 0,
2606
+ "InProgress": false
2607
+ }
2608
+ ]"""
2609
+ server .add (responses .POST , "https://example.com/api/inputs" , body = html , status = 200 )
2610
+ client = ElmoClient (base_url = "https://example.com" , domain = "domain" )
2611
+ client ._session_id = "test"
2612
+ mocker .patch .object (client , "_get_descriptions" )
2613
+ client ._get_descriptions .return_value = {
2614
+ 10 : {0 : "Input 1" , 1 : "Input 2" , 2 : "Input 3" },
2615
+ }
2616
+ # Test
2617
+ inputs = client .query (query .INPUTS )
2618
+ assert inputs ["last_id" ] == 5
2619
+
2620
+
2621
+ def test_client_query_last_id_type_error (server , mocker ):
2622
+ """Should default last_id to 0 if a TypeError occurs during max()."""
2623
+ html = """[
2624
+ {
2625
+ "Alarm": true,
2626
+ "InUse": true,
2627
+ "Id": "not-an-int",
2628
+ "Index": 0,
2629
+ "Element": 1
2630
+ },
2631
+ {
2632
+ "Alarm": false,
2633
+ "InUse": true,
2634
+ "Id": 2,
2635
+ "Index": 1,
2636
+ "Element": 2
2637
+ }
2638
+ ]"""
2639
+ server .add (responses .POST , "https://example.com/api/inputs" , body = html , status = 200 )
2640
+ client = ElmoClient (base_url = "https://example.com" , domain = "domain" )
2641
+ client ._session_id = "test"
2642
+ mocker .patch .object (client , "_get_descriptions" )
2643
+ client ._get_descriptions .return_value = {10 : {0 : "Input 1" , 1 : "Input 2" }}
2644
+ # Test
2645
+ inputs = client .query (query .INPUTS )
2646
+ assert inputs ["last_id" ] == 0
2647
+
2648
+
2649
+ def test_client_query_last_id_value_error_empty (server , mocker ):
2650
+ """Should default last_id to 0 if the entries list is empty (ValueError)."""
2651
+ html = """[]"""
2652
+ server .add (responses .POST , "https://example.com/api/inputs" , body = html , status = 200 )
2653
+ client = ElmoClient (base_url = "https://example.com" , domain = "domain" )
2654
+ client ._session_id = "test"
2655
+ mocker .patch .object (client , "_get_descriptions" )
2656
+ client ._get_descriptions .return_value = {}
2657
+ # Test
2658
+ inputs = client .query (query .INPUTS )
2659
+ assert inputs ["last_id" ] == 0
0 commit comments