22from uliweb import manage
33from uliweb .manage import make_simple_application
44from json import loads as json_loads
5+ from nose import with_setup
56
6- os .chdir ('demo' )
7+ def setup ():
8+ os .chdir ('demo' )
79
8- manage .call ('uliweb syncdb -v' )
9- manage .call ('uliweb reset -v -y' )
10- manage .call ('uliweb dbinit -v' )
10+ manage .call ('uliweb syncdb -v' )
11+ manage .call ('uliweb reset -v -y' )
12+ manage .call ('uliweb dbinit -v' )
13+
14+ def teardown ():
15+ pass
1116
1217def pre_call_as (username ):
1318 from uliweb import models
@@ -17,6 +22,7 @@ def pre_call(request):
1722 request .user = user
1823 return pre_call
1924
25+ @with_setup (setup ,teardown )
2026def test_apijson_get ():
2127 """
2228 >>> application = make_simple_application(project_dir='.')
@@ -1233,3 +1239,183 @@ def test_apijson_put():
12331239 >>> print(d)
12341240 {'code': 400, 'msg': 'failed when updating, maybe no change', 'moment': {'id': 1, 'code': 400, 'msg': 'failed when updating, maybe no change', 'count': 0}}
12351241 """
1242+
1243+ def test_apijson_delete ():
1244+ """
1245+ >>> application = make_simple_application(project_dir='.')
1246+ >>> handler = application.handler()
1247+
1248+ >>> #apijson delete
1249+ >>> data ='''{
1250+ ... "moment": {
1251+ ... "id": 1
1252+ ... },
1253+ ... "@tag": "moment"
1254+ ... }'''
1255+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1256+ >>> d = json_loads(r.data)
1257+ >>> print(d)
1258+ {'code': 200, 'msg': 'success', 'moment': {'id': 1, 'code': 200, 'message': 'success', 'count': 1}}
1259+ >>> data ='''{
1260+ ... "moment": {
1261+ ... "id": 1
1262+ ... }
1263+ ... }'''
1264+ >>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1265+ >>> d = json_loads(r.data)
1266+ >>> print(d)
1267+ {'code': 200, 'msg': 'success', 'moment': None}
1268+
1269+ >>> #apijson delete, without @tag
1270+ >>> data ='''{
1271+ ... "moment": {
1272+ ... "content": "new moment for test"
1273+ ... },
1274+ ... "@tag": "moment"
1275+ ... }'''
1276+ >>> r = handler.post('/apijson/post', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1277+ >>> d = json_loads(r.data)
1278+ >>> data ='''{
1279+ ... "moment": {
1280+ ... "id": %s
1281+ ... }
1282+ ... }'''%(d["moment"]["id"])
1283+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1284+ >>> d = json_loads(r.data)
1285+ >>> print(d)
1286+ {'code': 400, 'msg': "'tag' parameter is needed"}
1287+
1288+ >>> #apijson delete, with non exist model
1289+ >>> data ='''{
1290+ ... "nonexist": {
1291+ ... "id": 1
1292+ ... },
1293+ ... "@tag": "nonexist"
1294+ ... }'''
1295+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1296+ >>> d = json_loads(r.data)
1297+ >>> print(d)
1298+ {'code': 400, 'msg': "model 'nonexist' not found"}
1299+
1300+ >>> #apijson delete, default to OWNER and delete other's record
1301+ >>> data ='''{
1302+ ... "moment": {
1303+ ... "id": 2
1304+ ... },
1305+ ... "@tag": "moment"
1306+ ... }'''
1307+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1308+ >>> d = json_loads(r.data)
1309+ >>> print(d)
1310+ {'code': 400, 'msg': 'no permission'}
1311+
1312+ >>> #apijson delete, without id
1313+ >>> data ='''{
1314+ ... "moment": {
1315+ ... },
1316+ ... "@tag": "moment"
1317+ ... }'''
1318+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1319+ >>> d = json_loads(r.data)
1320+ >>> print(d)
1321+ {'code': 400, 'msg': 'id param needed'}
1322+
1323+ >>> #apijson delete, id not int
1324+ >>> data ='''{
1325+ ... "moment": {
1326+ ... "id": "abc"
1327+ ... },
1328+ ... "@tag": "moment"
1329+ ... }'''
1330+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1331+ >>> d = json_loads(r.data)
1332+ >>> print(d)
1333+ {'code': 400, 'msg': "id 'abc' cannot convert to integer"}
1334+
1335+ >>> #apijson delete
1336+ >>> data ='''{
1337+ ... "moment": {
1338+ ... "id": 100
1339+ ... },
1340+ ... "@tag": "moment"
1341+ ... }'''
1342+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1343+ >>> d = json_loads(r.data)
1344+ >>> print(d)
1345+ {'code': 400, 'msg': "cannot find record id = '100'"}
1346+
1347+ >>> #apijson delete, with a role having no permission
1348+ >>> data ='''{
1349+ ... "moment": {
1350+ ... "content": "new moment for test"
1351+ ... },
1352+ ... "@tag": "moment"
1353+ ... }'''
1354+ >>> r = handler.post('/apijson/post', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1355+ >>> d = json_loads(r.data)
1356+ >>> data ='''{
1357+ ... "moment": {
1358+ ... "@role": "UNKNOWN",
1359+ ... "id": %s
1360+ ... },
1361+ ... "@tag": "moment"
1362+ ... }'''%(d["moment"]["id"])
1363+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1364+ >>> d = json_loads(r.data)
1365+ >>> print(d)
1366+ {'code': 400, 'msg': "'moment' not accessible by role 'UNKNOWN'"}
1367+
1368+ >>> #apijson delete, with OWNER but not login
1369+ >>> data ='''{
1370+ ... "moment": {
1371+ ... "content": "new moment for test"
1372+ ... },
1373+ ... "@tag": "moment"
1374+ ... }'''
1375+ >>> r = handler.post('/apijson/post', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1376+ >>> d = json_loads(r.data)
1377+ >>> data ='''{
1378+ ... "moment": {
1379+ ... "id": %s
1380+ ... },
1381+ ... "@tag": "moment"
1382+ ... }'''%(d["moment"]["id"])
1383+ >>> r = handler.post('/apijson/delete', data=data, middlewares=[])
1384+ >>> d = json_loads(r.data)
1385+ >>> print(d)
1386+ {'code': 400, 'msg': 'need login user'}
1387+
1388+ >>> #apijson delete, with UNKNOWN role
1389+ >>> data ='''{
1390+ ... "publicnotice": {
1391+ ... "@role": "UNKNOWN",
1392+ ... "id": 1
1393+ ... },
1394+ ... "@tag": "publicnotice"
1395+ ... }'''
1396+ >>> r = handler.post('/apijson/delete', data=data, middlewares=[])
1397+ >>> d = json_loads(r.data)
1398+ >>> print(d)
1399+ {'code': 200, 'msg': 'success', 'publicnotice': {'id': 1, 'code': 200, 'message': 'success', 'count': 1}}
1400+
1401+ >>> #apijson delete, with a role which have no permission
1402+ >>> data ='''{
1403+ ... "moment": {
1404+ ... "content": "new moment for test"
1405+ ... },
1406+ ... "@tag": "moment"
1407+ ... }'''
1408+ >>> r = handler.post('/apijson/post', data=data, pre_call=pre_call_as("usera"), middlewares=[])
1409+ >>> d = json_loads(r.data)
1410+ >>> data ='''{
1411+ ... "moment": {
1412+ ... "@role": "superuser",
1413+ ... "id": %s
1414+ ... },
1415+ ... "@tag": "moment"
1416+ ... }'''%(d["moment"]["id"])
1417+ >>> r = handler.post('/apijson/delete', data=data, pre_call=pre_call_as("admin"), middlewares=[])
1418+ >>> d = json_loads(r.data)
1419+ >>> print(d)
1420+ {'code': 400, 'msg': "'moment' not accessible by role 'superuser'"}
1421+ """
0 commit comments