@@ -1293,3 +1293,192 @@ def test_returns_label_count(self):
1293
1293
response = self .client .get (self .url , format = 'json' )
1294
1294
self .assertIn ('user' , response .data )
1295
1295
self .assertIsInstance (response .data ['user' ], dict )
1296
+
1297
+
1298
+ class TestUserAPI (APITestCase ):
1299
+
1300
+ @classmethod
1301
+ def setUpTestData (cls ):
1302
+ cls .super_user_name = 'super_user_name'
1303
+ cls .super_user_pass = 'super_user_pass'
1304
+ User .objects .create_superuser (username = cls .super_user_name ,
1305
+ password = cls .super_user_pass ,
1306
+
1307
+ cls .url = reverse (viewname = 'user_list' )
1308
+
1309
+ def test_returns_user_count (self ):
1310
+ self .client .login (username = self .super_user_name ,
1311
+ password = self .super_user_pass )
1312
+ response = self .client .get (self .url , format = 'json' )
1313
+ self .assertEqual (1 , len (response .data ))
1314
+
1315
+
1316
+ class TestRoleAPI (APITestCase ):
1317
+
1318
+ @classmethod
1319
+ def setUpTestData (cls ):
1320
+ cls .user_name = 'user_name'
1321
+ cls .user_pass = 'user_pass'
1322
+ cls .project_admin_name = 'project_admin_name'
1323
+ cls .project_admin_pass = 'project_admin_pass'
1324
+ cls .user = User .objects .create_user (username = cls .user_name ,
1325
+ password = cls .user_pass )
1326
+ project_admin = User .objects .create_superuser (username = cls .project_admin_name ,
1327
+ password = cls .project_admin_pass ,
1328
+
1329
+ cls .url = reverse (viewname = 'roles' )
1330
+
1331
+ def test_cannot_create_multiple_roles_with_same_name (self ):
1332
+ self .client .login (username = self .project_admin_name ,
1333
+ password = self .project_admin_pass )
1334
+ roles = [
1335
+ {'name' : 'examplerole' , 'description' : 'example' },
1336
+ {'name' : 'examplerole' , 'description' : 'example' }
1337
+ ]
1338
+ self .client .post (self .url , format = 'json' , data = roles [0 ])
1339
+ second_response = self .client .post (self .url , format = 'json' , data = roles [1 ])
1340
+ self .assertEqual (second_response .status_code , status .HTTP_400_BAD_REQUEST )
1341
+
1342
+ def test_nonadmin_cannot_create_role (self ):
1343
+ self .client .login (username = self .user_name ,
1344
+ password = self .user_pass )
1345
+ data = {'name' : 'testrole' , 'description' : 'example' }
1346
+ response = self .client .post (self .url , format = 'json' , data = data )
1347
+ self .assertEqual (response .status_code , status .HTTP_403_FORBIDDEN )
1348
+
1349
+ def test_admin_can_create_role (self ):
1350
+ self .client .login (username = self .project_admin_name ,
1351
+ password = self .project_admin_pass )
1352
+ data = {'name' : 'testrole' , 'description' : 'example' }
1353
+ response = self .client .post (self .url , format = 'json' , data = data )
1354
+ self .assertEqual (response .status_code , status .HTTP_201_CREATED )
1355
+
1356
+ def test_admin_can_get_roles (self ):
1357
+ self .client .login (username = self .project_admin_name ,
1358
+ password = self .project_admin_pass )
1359
+ response = self .client .get (self .url , format = 'json' )
1360
+ self .assertEqual (response .status_code , status .HTTP_200_OK )
1361
+
1362
+
1363
+ class TestRoleMappingListAPI (APITestCase ):
1364
+
1365
+ @classmethod
1366
+ def setUpTestData (cls ):
1367
+ cls .project_member_name = 'project_member_name'
1368
+ cls .project_member_pass = 'project_member_pass'
1369
+ cls .second_project_member_name = 'second_project_member_name'
1370
+ cls .second_project_member_pass = 'second_project_member_pass'
1371
+ cls .project_admin_name = 'project_admin_name'
1372
+ cls .project_admin_pass = 'project_admin_pass'
1373
+ project_member = User .objects .create_user (username = cls .project_member_name ,
1374
+ password = cls .project_member_pass )
1375
+ cls .second_project_member = User .objects .create_user (username = cls .second_project_member_name ,
1376
+ password = cls .second_project_member_pass )
1377
+ project_admin = User .objects .create_superuser (username = cls .project_admin_name ,
1378
+ password = cls .project_admin_pass ,
1379
+
1380
+ cls .main_project = mommy .make ('Project' , users = [project_member , project_admin , cls .second_project_member ])
1381
+ cls .other_project = mommy .make ('Project' , users = [cls .second_project_member , project_admin ])
1382
+
1383
+ cls .role = mommy .make ('Role' , name = settings .ROLE_PROJECT_ADMIN )
1384
+ rolemapping = mommy .make ('RoleMapping' , role = cls .role , project = cls .main_project , user = project_admin )
1385
+ cls .data = {'user' : project_member .id , 'role' : cls .role .id , 'project' : cls .main_project .id }
1386
+ cls .other_url = reverse (viewname = 'rolemapping_list' , args = [cls .other_project .id ])
1387
+ cls .url = reverse (viewname = 'rolemapping_list' , args = [cls .main_project .id ])
1388
+
1389
+ def test_returns_mappings_to_project_admin (self ):
1390
+ self .client .login (username = self .project_admin_name ,
1391
+ password = self .project_admin_pass )
1392
+ response = self .client .get (self .url , format = 'json' )
1393
+ self .assertEqual (response .status_code , status .HTTP_200_OK )
1394
+
1395
+ def test_allows_superuser_to_create_mapping (self ):
1396
+ self .client .login (username = self .project_admin_name ,
1397
+ password = self .project_admin_pass )
1398
+ response = self .client .post (self .url , format = 'json' , data = self .data )
1399
+ self .assertEqual (response .status_code , status .HTTP_201_CREATED )
1400
+
1401
+ def test_do_not_allow_nonadmin_to_create_mapping (self ):
1402
+ self .client .login (username = self .project_member_name ,
1403
+ password = self .project_member_pass )
1404
+ response = self .client .post (self .url , format = 'json' , data = self .data )
1405
+ self .assertEqual (response .status_code , status .HTTP_403_FORBIDDEN )
1406
+
1407
+ def test_do_not_return_mappings_to_nonadmin (self ):
1408
+ self .client .login (username = self .project_member_name ,
1409
+ password = self .project_member_pass )
1410
+ response = self .client .get (self .url , format = 'json' )
1411
+ self .assertEqual (response .status_code , status .HTTP_403_FORBIDDEN )
1412
+
1413
+ def test_can_create_same_mapping_in_multiple_projects (self ):
1414
+ self .client .login (username = self .project_admin_name ,
1415
+ password = self .project_admin_pass )
1416
+ mapping = [
1417
+ {'user' : self .second_project_member .id , 'role' : self .role .id , 'project' : self .main_project .id },
1418
+ {'user' : self .second_project_member .id , 'role' : self .role .id , 'project' : self .other_project .id }
1419
+ ]
1420
+ response = self .client .post (self .url , format = 'json' , data = mapping [0 ])
1421
+ self .assertEqual (response .status_code , status .HTTP_201_CREATED )
1422
+ response = self .client .post (self .other_url , format = 'json' , data = mapping [1 ])
1423
+ self .assertEqual (response .status_code , status .HTTP_201_CREATED )
1424
+
1425
+
1426
+ class TestRoleMappingDetailAPI (APITestCase ):
1427
+
1428
+ @classmethod
1429
+ def setUpTestData (cls ):
1430
+ cls .project_admin_name = 'project_admin_name'
1431
+ cls .project_admin_pass = 'project_admin_pass'
1432
+ cls .project_member_name = 'project_member_name'
1433
+ cls .project_member_pass = 'project_member_pass'
1434
+ cls .non_project_member_name = 'non_project_member_name'
1435
+ cls .non_project_member_pass = 'non_project_member_pass'
1436
+ project_admin = User .objects .create_superuser (username = cls .project_admin_name ,
1437
+ password = cls .project_admin_pass ,
1438
+
1439
+ project_member = User .objects .create_user (username = cls .project_member_name ,
1440
+ password = cls .project_member_pass )
1441
+ non_project_member = User .objects .create_user (username = cls .non_project_member_name ,
1442
+ password = cls .non_project_member_pass )
1443
+ project = mommy .make ('Project' , users = [project_admin , project_member ])
1444
+ role = mommy .make ('Role' , name = settings .ROLE_PROJECT_ADMIN )
1445
+ change_role = mommy .make ('Role' , name = settings .ROLE_ANNOTATOR )
1446
+ cls .rolemapping = mommy .make ('RoleMapping' , role = role , project = project , user = project_admin )
1447
+ cls .url = reverse (viewname = 'rolemapping_detail' , args = [project .id , cls .rolemapping .id ])
1448
+ cls .data = {'role' : change_role .id }
1449
+
1450
+ def test_returns_rolemapping_to_project_member (self ):
1451
+ self .client .login (username = self .project_admin_name ,
1452
+ password = self .project_admin_pass )
1453
+ response = self .client .get (self .url , format = 'json' )
1454
+ self .assertEqual (response .data ['id' ], self .rolemapping .id )
1455
+
1456
+ def test_do_not_return_mapping_to_non_project_member (self ):
1457
+ self .client .login (username = self .non_project_member_name ,
1458
+ password = self .non_project_member_pass )
1459
+ response = self .client .get (self .url , format = 'json' )
1460
+ self .assertEqual (response .status_code , status .HTTP_403_FORBIDDEN )
1461
+
1462
+ def test_allows_admin_to_update_mapping (self ):
1463
+ self .client .login (username = self .project_admin_name ,
1464
+ password = self .project_admin_pass )
1465
+ response = self .client .patch (self .url , format = 'json' , data = self .data )
1466
+ self .assertEqual (response .data ['role' ], self .data ['role' ])
1467
+
1468
+ def test_disallows_project_member_to_update_mapping (self ):
1469
+ self .client .login (username = self .project_member_name ,
1470
+ password = self .project_member_pass )
1471
+ response = self .client .patch (self .url , format = 'json' , data = self .data )
1472
+ self .assertEqual (response .status_code , status .HTTP_403_FORBIDDEN )
1473
+
1474
+ def test_allows_admin_to_delete_mapping (self ):
1475
+ self .client .login (username = self .project_admin_name ,
1476
+ password = self .project_admin_pass )
1477
+ response = self .client .delete (self .url , format = 'json' )
1478
+ self .assertEqual (response .status_code , status .HTTP_204_NO_CONTENT )
1479
+
1480
+ def test_disallows_project_member_to_delete_mapping (self ):
1481
+ self .client .login (username = self .project_member_name ,
1482
+ password = self .project_member_pass )
1483
+ response = self .client .delete (self .url , format = 'json' )
1484
+ self .assertEqual (response .status_code , status .HTTP_403_FORBIDDEN )
0 commit comments