@@ -1593,6 +1593,88 @@ def test_get_list_filters(self):
1593
1593
self .assertEqual (data [API_RESULT_RES_KEY ][0 ], expected_result )
1594
1594
self .assertEqual (rv .status_code , 200 )
1595
1595
1596
+ def test_get_list_filter_in_operator (self ):
1597
+ """
1598
+ REST API: Test 'in' filter on field_integer
1599
+ """
1600
+ client = self .app .test_client ()
1601
+ token = self .login (client , USERNAME_ADMIN , PASSWORD_ADMIN )
1602
+
1603
+ with model1_data (self .appbuilder .session , 5 ) as models :
1604
+ field_integers = [models [0 ].field_integer , models [1 ].field_integer ]
1605
+ expected_results = [
1606
+ {
1607
+ "field_date" : model .field_date .isoformat ()
1608
+ if model .field_date
1609
+ else None ,
1610
+ "field_float" : float (model .field_float ),
1611
+ "field_integer" : model .field_integer ,
1612
+ "field_string" : model .field_string ,
1613
+ }
1614
+ for model in models [:2 ]
1615
+ ]
1616
+
1617
+ arguments = {
1618
+ API_FILTERS_RIS_KEY : [
1619
+ {"col" : "field_integer" , "opr" : "in" , "value" : field_integers }
1620
+ ],
1621
+ "order_column" : "field_integer" ,
1622
+ "order_direction" : "asc" ,
1623
+ }
1624
+
1625
+ uri = f"api/v1/model1api/?q={ prison .dumps (arguments )} "
1626
+ rv = self .auth_client_get (client , token , uri )
1627
+ data = json .loads (rv .data .decode ("utf-8" ))
1628
+
1629
+ self .assertEqual (rv .status_code , 200 )
1630
+ actual_results = data [API_RESULT_RES_KEY ]
1631
+ self .assertEqual (len (actual_results ), len (expected_results ))
1632
+ for result in expected_results :
1633
+ self .assertIn (result , actual_results )
1634
+
1635
+ def test_get_list_filter_not_in_operator (self ):
1636
+ """
1637
+ REST API: Test 'not in' filter on field_integer
1638
+ """
1639
+ client = self .app .test_client ()
1640
+ token = self .login (client , USERNAME_ADMIN , PASSWORD_ADMIN )
1641
+
1642
+ with model1_data (self .appbuilder .session , 5 ) as models :
1643
+ excluded_field_integers = [models [0 ].field_integer , models [1 ].field_integer ]
1644
+ expected_results = [
1645
+ {
1646
+ "field_date" : model .field_date .isoformat ()
1647
+ if model .field_date
1648
+ else None ,
1649
+ "field_float" : float (model .field_float ),
1650
+ "field_integer" : model .field_integer ,
1651
+ "field_string" : model .field_string ,
1652
+ }
1653
+ for model in models [2 :]
1654
+ ]
1655
+
1656
+ arguments = {
1657
+ API_FILTERS_RIS_KEY : [
1658
+ {
1659
+ "col" : "field_integer" ,
1660
+ "opr" : "not_in" ,
1661
+ "value" : excluded_field_integers ,
1662
+ }
1663
+ ],
1664
+ "order_column" : "field_integer" ,
1665
+ "order_direction" : "asc" ,
1666
+ }
1667
+
1668
+ uri = f"api/v1/model1api/?q={ prison .dumps (arguments )} "
1669
+ rv = self .auth_client_get (client , token , uri )
1670
+ data = json .loads (rv .data .decode ("utf-8" ))
1671
+
1672
+ self .assertEqual (rv .status_code , 200 )
1673
+ actual_results = data [API_RESULT_RES_KEY ]
1674
+ self .assertEqual (len (actual_results ), len (expected_results ))
1675
+ for result in expected_results :
1676
+ self .assertIn (result , actual_results )
1677
+
1596
1678
def test_get_list_invalid_filters (self ):
1597
1679
"""
1598
1680
REST Api: Test get list filter params
@@ -1993,12 +2075,16 @@ def test_info_filters(self):
1993
2075
{"name" : "Greater than" , "operator" : "gt" },
1994
2076
{"name" : "Smaller than" , "operator" : "lt" },
1995
2077
{"name" : "Not Equal to" , "operator" : "neq" },
2078
+ {"name" : "In" , "operator" : "in" },
2079
+ {"name" : "Not In" , "operator" : "not_in" },
1996
2080
],
1997
2081
"field_integer" : [
1998
2082
{"name" : "Equal to" , "operator" : "eq" },
1999
2083
{"name" : "Greater than" , "operator" : "gt" },
2000
2084
{"name" : "Smaller than" , "operator" : "lt" },
2001
2085
{"name" : "Not Equal to" , "operator" : "neq" },
2086
+ {"name" : "In" , "operator" : "in" },
2087
+ {"name" : "Not In" , "operator" : "not_in" },
2002
2088
],
2003
2089
"field_string" : [
2004
2090
{"name" : "Starts with" , "operator" : "sw" },
@@ -2009,6 +2095,8 @@ def test_info_filters(self):
2009
2095
{"name" : "Not Ends with" , "operator" : "new" },
2010
2096
{"name" : "Not Contains" , "operator" : "nct" },
2011
2097
{"name" : "Not Equal to" , "operator" : "neq" },
2098
+ {"name" : "In" , "operator" : "in" },
2099
+ {"name" : "Not In" , "operator" : "not_in" },
2012
2100
],
2013
2101
}
2014
2102
self .assertEqual (data ["filters" ], expected_filters )
0 commit comments