@@ -1640,14 +1640,14 @@ def test_navigation_count(service):
1640
1640
1641
1641
1642
1642
@responses .activate
1643
- def test_navigation_count_with_filter (service ):
1644
- """Check getting $count via navigation property with $filter"""
1643
+ def test_count_with_filter (service ):
1644
+ """Check getting $count with $filter"""
1645
1645
1646
1646
# pylint: disable=redefined-outer-name
1647
1647
1648
1648
responses .add (
1649
1649
responses .GET ,
1650
- "{0}/Employees(23)/Addresses/$count?%24filter=City%2520eq%2520%2527London%2527 " .format (service .url ),
1650
+ "{0}/Employees(23)/Addresses/$count?%24filter=City%20eq%20%27London%27 " .format (service .url ),
1651
1651
json = 3 ,
1652
1652
status = 200 )
1653
1653
@@ -1659,6 +1659,369 @@ def test_navigation_count_with_filter(service):
1659
1659
assert request .execute () == 3
1660
1660
1661
1661
1662
+ @responses .activate
1663
+ def test_count_with_chainable_filter (service ):
1664
+ """Check getting $count with $filter and using new filter syntax"""
1665
+
1666
+ # pylint: disable=redefined-outer-name
1667
+
1668
+ responses .add (
1669
+ responses .GET ,
1670
+ "{0}/Employees(23)/Addresses/$count?%24filter=City%20eq%20%27London%27" .format (service .url ),
1671
+ json = 3 ,
1672
+ status = 200 )
1673
+
1674
+ employees = service .entity_sets .Employees .get_entity (23 ).nav ('Addresses' ).get_entities ()
1675
+ request = employees .filter (City = "London" ).count ()
1676
+
1677
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1678
+
1679
+ assert request .execute () == 3
1680
+
1681
+
1682
+ @responses .activate
1683
+ def test_count_with_chainable_filter_lt_operator (service ):
1684
+ """Check getting $count with $filter with new filter syntax using multiple filters"""
1685
+
1686
+ # pylint: disable=redefined-outer-name
1687
+
1688
+ responses .add (
1689
+ responses .GET ,
1690
+ "{0}/Employees/$count?%24filter=ID%20lt%2023" .format (service .url ),
1691
+ json = 3 ,
1692
+ status = 200 )
1693
+
1694
+ employees = service .entity_sets .Employees .get_entities ()
1695
+ request = employees .filter (ID__lt = 23 ).count ()
1696
+
1697
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1698
+
1699
+ assert request .execute () == 3
1700
+
1701
+
1702
+ @responses .activate
1703
+ def test_count_with_chainable_filter_lte_operator (service ):
1704
+ """Check getting $count with $filter with new filter syntax using multiple filters"""
1705
+
1706
+ # pylint: disable=redefined-outer-name
1707
+
1708
+ responses .add (
1709
+ responses .GET ,
1710
+ "{0}/Employees/$count?%24filter=ID%20le%2023" .format (service .url ),
1711
+ json = 3 ,
1712
+ status = 200 )
1713
+
1714
+ employees = service .entity_sets .Employees .get_entities ()
1715
+ request = employees .filter (ID__lte = 23 ).count ()
1716
+
1717
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1718
+
1719
+ assert request .execute () == 3
1720
+
1721
+
1722
+ @responses .activate
1723
+ def test_count_with_chainable_filter_gt_operator (service ):
1724
+ """Check getting $count with $filter with new filter syntax using multiple filters"""
1725
+
1726
+ # pylint: disable=redefined-outer-name
1727
+
1728
+ responses .add (
1729
+ responses .GET ,
1730
+ "{0}/Employees/$count?%24filter=ID%20gt%2023" .format (service .url ),
1731
+ json = 3 ,
1732
+ status = 200 )
1733
+
1734
+ employees = service .entity_sets .Employees .get_entities ()
1735
+ request = employees .filter (ID__gt = 23 ).count ()
1736
+
1737
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1738
+
1739
+ assert request .execute () == 3
1740
+
1741
+
1742
+ @responses .activate
1743
+ def test_count_with_chainable_filter_gte_operator (service ):
1744
+ """Check getting $count with $filter with new filter syntax using multiple filters"""
1745
+
1746
+ # pylint: disable=redefined-outer-name
1747
+
1748
+ responses .add (
1749
+ responses .GET ,
1750
+ "{0}/Employees/$count?%24filter=ID%20ge%2023" .format (service .url ),
1751
+ json = 3 ,
1752
+ status = 200 )
1753
+
1754
+ employees = service .entity_sets .Employees .get_entities ()
1755
+ request = employees .filter (ID__gte = 23 ).count ()
1756
+
1757
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1758
+
1759
+ assert request .execute () == 3
1760
+
1761
+
1762
+ @responses .activate
1763
+ def test_count_with_chainable_filter_eq_operator (service ):
1764
+ """Check getting $count with $filter with new filter syntax using multiple filters"""
1765
+
1766
+ # pylint: disable=redefined-outer-name
1767
+
1768
+ responses .add (
1769
+ responses .GET ,
1770
+ "{0}/Employees/$count?%24filter=ID%20eq%2023" .format (service .url ),
1771
+ json = 3 ,
1772
+ status = 200 )
1773
+
1774
+ employees = service .entity_sets .Employees .get_entities ()
1775
+ request = employees .filter (ID__eq = 23 ).count ()
1776
+
1777
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1778
+
1779
+ assert request .execute () == 3
1780
+
1781
+
1782
+ @responses .activate
1783
+ def test_count_with_chainable_filter_in_operator (service ):
1784
+ """Check getting $count with $filter in"""
1785
+
1786
+ # pylint: disable=redefined-outer-name
1787
+
1788
+ responses .add (
1789
+ responses .GET ,
1790
+ "{0}/Employees/$count?$filter=ID%20eq%201%20or%20ID%20eq%202%20or%20ID%20eq%203" .format (service .url ),
1791
+ json = 3 ,
1792
+ status = 200 )
1793
+
1794
+ employees = service .entity_sets .Employees .get_entities ()
1795
+ request = employees .filter (ID__in = [1 ,2 ,3 ]).count ()
1796
+
1797
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1798
+
1799
+ assert request .execute () == 3
1800
+
1801
+
1802
+ @responses .activate
1803
+ def test_count_with_chainable_filter_startswith_operator (service ):
1804
+ """Check getting $count with $filter in"""
1805
+
1806
+ # pylint: disable=redefined-outer-name
1807
+
1808
+ responses .add (
1809
+ responses .GET ,
1810
+ "{0}/Employees/$count?$filter=startswith%28NickName%2C%20%27Tim%27%29%20eq%20true" .format (service .url ),
1811
+ json = 3 ,
1812
+ status = 200 )
1813
+
1814
+ employees = service .entity_sets .Employees .get_entities ()
1815
+ request = employees .filter (NickName__startswith = "Tim" ).count ()
1816
+
1817
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1818
+
1819
+ assert request .execute () == 3
1820
+
1821
+
1822
+ @responses .activate
1823
+ def test_count_with_chainable_filter_endswith_operator (service ):
1824
+ """Check getting $count with $filter in"""
1825
+
1826
+ # pylint: disable=redefined-outer-name
1827
+
1828
+ responses .add (
1829
+ responses .GET ,
1830
+ "{0}/Employees/$count?$filter=endswith%28NickName%2C%20%27othy%27%29%20eq%20true" .format (service .url ),
1831
+ json = 3 ,
1832
+ status = 200 )
1833
+
1834
+ employees = service .entity_sets .Employees .get_entities ()
1835
+ request = employees .filter (NickName__endswith = "othy" ).count ()
1836
+
1837
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1838
+
1839
+ assert request .execute () == 3
1840
+
1841
+
1842
+ @responses .activate
1843
+ def test_count_with_chainable_filter_length_operator (service ):
1844
+ """Check getting $count with $filter in"""
1845
+
1846
+ # pylint: disable=redefined-outer-name
1847
+
1848
+ responses .add (
1849
+ responses .GET ,
1850
+ "{0}/Employees/$count?$filter=length%28NickName%29%20eq%206" .format (service .url ),
1851
+ json = 3 ,
1852
+ status = 200 )
1853
+
1854
+ employees = service .entity_sets .Employees .get_entities ()
1855
+ request = employees .filter (NickName__length = 6 ).count ()
1856
+
1857
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1858
+
1859
+ assert request .execute () == 3
1860
+
1861
+
1862
+ @responses .activate
1863
+ def test_count_with_chainable_filter_length_operator_as_string (service ):
1864
+ """Check getting $count with $filter in"""
1865
+
1866
+ # pylint: disable=redefined-outer-name
1867
+
1868
+ responses .add (
1869
+ responses .GET ,
1870
+ "{0}/Employees/$count?$filter=length%28NickName%29%20eq%206" .format (service .url ),
1871
+ json = 3 ,
1872
+ status = 200 )
1873
+
1874
+ employees = service .entity_sets .Employees .get_entities ()
1875
+ request = employees .filter (NickName__length = "6" ).count ()
1876
+
1877
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1878
+
1879
+ assert request .execute () == 3
1880
+
1881
+
1882
+ @responses .activate
1883
+ def test_count_with_chainable_filter_contains_operator (service ):
1884
+ """Check getting $count with $filter in"""
1885
+
1886
+ # pylint: disable=redefined-outer-name
1887
+
1888
+ responses .add (
1889
+ responses .GET ,
1890
+ "{0}/Employees/$count?$filter=substringof%28%27Tim%27%2C%20NickName%29%20eq%20true" .format (service .url ),
1891
+ json = 3 ,
1892
+ status = 200 )
1893
+
1894
+ employees = service .entity_sets .Employees .get_entities ()
1895
+ request = employees .filter (NickName__contains = "Tim" ).count ()
1896
+
1897
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1898
+
1899
+ assert request .execute () == 3
1900
+
1901
+
1902
+ @responses .activate
1903
+ def test_count_with_chainable_filter_range_operator (service ):
1904
+ """Check getting $count with $filter in"""
1905
+
1906
+ # pylint: disable=redefined-outer-name
1907
+
1908
+ responses .add (
1909
+ responses .GET ,
1910
+ "{0}/Employees/$count?$filter=ID%20gte%2020%20and%20ID%20lte%2050" .format (service .url ),
1911
+ json = 3 ,
1912
+ status = 200 )
1913
+
1914
+ employees = service .entity_sets .Employees .get_entities ()
1915
+ request = employees .filter (ID__range = (20 , 50 )).count ()
1916
+
1917
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1918
+
1919
+ assert request .execute () == 3
1920
+
1921
+
1922
+ @responses .activate
1923
+ def test_count_with_chainable_filter_multiple (service ):
1924
+ """Check getting $count with $filter with new filter syntax using multiple filters"""
1925
+
1926
+ # pylint: disable=redefined-outer-name
1927
+
1928
+ responses .add (
1929
+ responses .GET ,
1930
+ "{0}/Employees/$count?%24filter=ID%20eq%2023%20and%20NickName%20eq%20%27Steve%27" .format (service .url ),
1931
+ json = 3 ,
1932
+ status = 200 )
1933
+
1934
+ employees = service .entity_sets .Employees .get_entities ()
1935
+ request = employees .filter (ID = 23 , NickName = "Steve" ).count ()
1936
+
1937
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1938
+
1939
+ assert request .execute () == 3
1940
+
1941
+
1942
+ @responses .activate
1943
+ def test_count_with_chainable_filter_or (service ):
1944
+ """Check getting $count with $filter with FilterExpression syntax or"""
1945
+ from pyodata .v2 .service import FilterExpression as Q
1946
+ # pylint: disable=redefined-outer-name
1947
+
1948
+ responses .add (
1949
+ responses .GET ,
1950
+ "{0}/Employees/$count?$filter=%28ID%20eq%2023%20and%20NickName%20eq%20%27Steve%27%29%20or%20%28ID%20eq%2025%20and%20NickName%20eq%20%27Tim%27%29" .format (service .url ),
1951
+ json = 3 ,
1952
+ status = 200 )
1953
+
1954
+ employees = service .entity_sets .Employees .get_entities ()
1955
+ request = employees .filter (Q (ID = 23 , NickName = "Steve" ) | Q (ID = 25 , NickName = "Tim" )).count ()
1956
+
1957
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1958
+
1959
+ assert request .execute () == 3
1960
+
1961
+ @responses .activate
1962
+ def test_count_with_multiple_chainable_filters_startswith (service ):
1963
+ """Check getting $count with $filter calling startswith"""
1964
+ from pyodata .v2 .service import FilterExpression as Q
1965
+ # pylint: disable=redefined-outer-name
1966
+
1967
+ responses .add (
1968
+ responses .GET ,
1969
+ "{0}/Employees/$count?$filter=%28ID%20eq%2023%20and%20startswith%28NickName%2C%20%27Ste%27%29%20eq%20true%29%20or%20%28ID%20eq%2025%20and%20NickName%20eq%20%27Tim%27%29" .format (service .url ),
1970
+ json = 3 ,
1971
+ status = 200 )
1972
+
1973
+ employees = service .entity_sets .Employees .get_entities ()
1974
+ request = employees .filter (Q (ID = 23 , NickName__startswith = "Ste" ) | Q (ID = 25 , NickName = "Tim" )).count ()
1975
+
1976
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
1977
+
1978
+ assert request .execute () == 3
1979
+
1980
+
1981
+ @responses .activate
1982
+ def test_count_with_chainable_filters_invalid_property_lookup (service ):
1983
+ """Check getting $count with $filter calling startswith"""
1984
+ # pylint: disable=redefined-outer-name
1985
+
1986
+ employees = service .entity_sets .Employees .get_entities ()
1987
+ with pytest .raises (ValueError ) as ex :
1988
+ request = employees .filter (Foo = "Bar" )
1989
+
1990
+ assert str (ex .value ) == '"Foo" is not a valid property or operator'
1991
+
1992
+
1993
+ @responses .activate
1994
+ def test_count_with_chainable_filters_invalid_operator_lookup (service ):
1995
+ """Check getting $count with $filter calling startswith"""
1996
+ # pylint: disable=redefined-outer-name
1997
+
1998
+ employees = service .entity_sets .Employees .get_entities ()
1999
+ with pytest .raises (ValueError ) as ex :
2000
+ request = employees .filter (NickName__foo = "Bar" )
2001
+
2002
+ assert str (ex .value ) == '"foo" is not a valid property or operator'
2003
+
2004
+
2005
+ @responses .activate
2006
+ def test_count_with_chained_filters (service ):
2007
+ """Check getting $count with chained filters"""
2008
+
2009
+ # pylint: disable=redefined-outer-name
2010
+
2011
+ responses .add (
2012
+ responses .GET ,
2013
+ "{0}/Employees/$count?$filter=ID%20gte%2020%20and%20ID%20lte%2050%20and%20NickName%20eq%20%27Tim%27" .format (service .url ),
2014
+ json = 3 ,
2015
+ status = 200 )
2016
+
2017
+ employees = service .entity_sets .Employees .get_entities ()
2018
+ request = employees .filter (ID__range = (20 , 50 )).filter (NickName = "Tim" ).count ()
2019
+
2020
+ assert isinstance (request , pyodata .v2 .service .GetEntitySetRequest )
2021
+
2022
+ assert request .execute () == 3
2023
+
2024
+
1662
2025
@responses .activate
1663
2026
def test_create_entity_with_datetime (service ):
1664
2027
"""
0 commit comments