@@ -1153,7 +1153,7 @@ def test_apijson_head():
1153
1153
>>> r = handler.post('/apijson/head', data=data, middlewares=[])
1154
1154
>>> d = json_loads(r.data)
1155
1155
>>> print(d)
1156
- {'code': 400, 'msg': "no login user for role 'ADMIN'"}
1156
+ {'code': 400, 'msg': "user doesn't have role 'ADMIN'"}
1157
1157
1158
1158
>>> #apijson head, without user and @role
1159
1159
>>> data ='''{
@@ -1581,7 +1581,7 @@ def test_apijson_delete():
1581
1581
>>> print(d)
1582
1582
{'code': 400, 'msg': "model 'nonexist' not found"}
1583
1583
1584
- >>> #apijson delete, default to OWNER and delete other's record
1584
+ >>> #apijson delete, try to delete other's moment
1585
1585
>>> data ='''{
1586
1586
... "moment": {
1587
1587
... "id": 2
@@ -1591,7 +1591,7 @@ def test_apijson_delete():
1591
1591
>>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1592
1592
>>> d = json_loads(r.data)
1593
1593
>>> print(d)
1594
- {'code': 400, 'msg': 'no permission '}
1594
+ {'code': 400, 'msg': 'no role to access the data '}
1595
1595
1596
1596
>>> #apijson delete, without id
1597
1597
>>> data ='''{
@@ -1647,7 +1647,7 @@ def test_apijson_delete():
1647
1647
>>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1648
1648
>>> d = json_loads(r.data)
1649
1649
>>> print(d)
1650
- {'code': 400, 'msg': "'moment' not accessible by role 'UNKNOWN' "}
1650
+ {'code': 400, 'msg': "role 'UNKNOWN' has no permission to access the data "}
1651
1651
1652
1652
>>> #apijson delete, with OWNER but not login
1653
1653
>>> data ='''{
@@ -1667,7 +1667,7 @@ def test_apijson_delete():
1667
1667
>>> r = handler.post('/apijson/delete', data=data, middlewares=[])
1668
1668
>>> d = json_loads(r.data)
1669
1669
>>> print(d)
1670
- {'code': 400, 'msg': 'need login user '}
1670
+ {'code': 400, 'msg': 'no role to access the data '}
1671
1671
1672
1672
>>> #apijson delete, with UNKNOWN role
1673
1673
>>> data ='''{
@@ -1701,5 +1701,112 @@ def test_apijson_delete():
1701
1701
>>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("admin"), middlewares=[])
1702
1702
>>> d = json_loads(r.data)
1703
1703
>>> print(d)
1704
- {'code': 400, 'msg': "'moment' not accessible by role 'superuser'"}
1704
+ {'code': 400, 'msg': "role 'superuser' has no permission to access the data"}
1705
+ """
1706
+
1707
+ def test_apijson_permission ():
1708
+ """
1709
+ >>> application = make_simple_application(project_dir='.')
1710
+ >>> handler = application.handler()
1711
+
1712
+ >>> #apijson get, query with id, access with owner
1713
+ >>> data ='''{
1714
+ ... "comment2":{
1715
+ ... "id": 1
1716
+ ... }
1717
+ ... }'''
1718
+ >>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("admin"), middlewares=[])
1719
+ >>> d = json_loads(r.data)
1720
+ >>> print(d)
1721
+ {'code': 200, 'msg': 'success', 'comment2': {'user_id': 1, 'to_id': 3, 'moment_id': 1, 'date': '2018-11-01 00:00:00', 'content': 'comment from admin', 'id': 1}}
1722
+
1723
+ >>> #apijson get, query with id, access other's comment, expect empty result
1724
+ >>> data ='''{
1725
+ ... "comment2":{
1726
+ ... "id": 1
1727
+ ... }
1728
+ ... }'''
1729
+ >>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("userb"), middlewares=[])
1730
+ >>> d = json_loads(r.data)
1731
+ >>> print(d)
1732
+ {'code': 200, 'msg': 'success', 'comment2': None}
1733
+
1734
+ >>> #apijson get, query array
1735
+ >>> data ='''{
1736
+ ... "comment2":{
1737
+ ... }
1738
+ ... }'''
1739
+ >>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1740
+ >>> d = json_loads(r.data)
1741
+ >>> print(d)
1742
+ {'code': 200, 'msg': 'success', 'comment2': {'user_id': 2, 'to_id': 3, 'moment_id': 1, 'date': '2018-12-01 00:00:00', 'content': 'comment from usera to userb', 'id': 2}}
1743
+
1744
+ >>> #apijson get, query one with admin as OWNER
1745
+ >>> data ='''{
1746
+ ... "comment2":{
1747
+ ... "@role":"OWNER"
1748
+ ... }
1749
+ ... }'''
1750
+ >>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("admin"), middlewares=[])
1751
+ >>> d = json_loads(r.data)
1752
+ >>> print(d)
1753
+ {'code': 200, 'msg': 'success', 'comment2': {'user_id': 1, 'to_id': 3, 'moment_id': 1, 'date': '2018-11-01 00:00:00', 'content': 'comment from admin', 'id': 1}}
1754
+
1755
+ >>> #apijson get, query one with admin as ADMIN
1756
+ >>> data ='''{
1757
+ ... "comment2":{
1758
+ ... "@role":"ADMIN",
1759
+ ... "user_id": 2
1760
+ ... }
1761
+ ... }'''
1762
+ >>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("admin"), middlewares=[])
1763
+ >>> d = json_loads(r.data)
1764
+ >>> print(d)
1765
+ {'code': 200, 'msg': 'success', 'comment2': {'user_id': 2, 'to_id': 3, 'moment_id': 1, 'date': '2018-12-01 00:00:00', 'content': 'comment from usera to userb', 'id': 2}}
1766
+
1767
+ >>> #apijson get, query array
1768
+ >>> data ='''{
1769
+ ... "[]":{
1770
+ ... "comment2": {"@role":"ADMIN"}
1771
+ ... }
1772
+ ... }'''
1773
+ >>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("admin"), middlewares=[])
1774
+ >>> d = json_loads(r.data)
1775
+ >>> print(d)
1776
+ {'code': 200, 'msg': 'success', '[]': [{'comment2': {'user_id': 1, 'to_id': 3, 'moment_id': 1, 'date': '2018-11-01 00:00:00', 'content': 'comment from admin', 'id': 1}}, {'comment2': {'user_id': 2, 'to_id': 3, 'moment_id': 1, 'date': '2018-12-01 00:00:00', 'content': 'comment from usera to userb', 'id': 2}}, {'comment2': {'user_id': 3, 'to_id': 2, 'moment_id': 2, 'date': '2018-12-02 00:00:00', 'content': 'comment from userb to usera', 'id': 3}}, {'comment2': {'user_id': 4, 'to_id': 2, 'moment_id': 3, 'date': '2018-12-09 00:00:00', 'content': 'comment from userc to usera', 'id': 4}}]}
1777
+
1778
+ >>> #apijson head
1779
+ >>> data ='''{
1780
+ ... "comment2": {
1781
+ ... "user_id": 1
1782
+ ... }
1783
+ ... }'''
1784
+ >>> r = handler.post('/apijson/head', data=data, pre_call=pre_call_as("userc"), middlewares=[])
1785
+ >>> d = json_loads(r.data)
1786
+ >>> print(d)
1787
+ {'code': 200, 'msg': 'success', 'comment2': {'code': 200, 'msg': 'success', 'count': 0}}
1788
+
1789
+ >>> #apijson delete with a user which have no permission
1790
+ >>> data ='''{
1791
+ ... "comment2": {
1792
+ ... "id": 1
1793
+ ... },
1794
+ ... "@tag": "comment2"
1795
+ ... }'''
1796
+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("userc"), middlewares=[])
1797
+ >>> d = json_loads(r.data)
1798
+ >>> print(d)
1799
+ {'code': 400, 'msg': 'no permission'}
1800
+
1801
+ >>> #apijson delete with permission, ADMIN
1802
+ >>> data ='''{
1803
+ ... "comment2": {
1804
+ ... "id": 1
1805
+ ... },
1806
+ ... "@tag": "comment2"
1807
+ ... }'''
1808
+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("admin"), middlewares=[])
1809
+ >>> d = json_loads(r.data)
1810
+ >>> print(d)
1811
+ {'code': 200, 'msg': 'success', 'comment2': {'id': 1, 'code': 200, 'message': 'success', 'count': 1}}
1705
1812
"""
0 commit comments