| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  | import pytest | 
					
						
							|  |  |  | from rest_framework.views import APIView | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from funkwhale_api.users import permissions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_has_user_permission_no_user(api_request): | 
					
						
							|  |  |  |     view = APIView.as_view() | 
					
						
							|  |  |  |     permission = permissions.HasUserPermission() | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |     request = api_request.get("/") | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  |     assert permission.has_permission(request, view) is False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_has_user_permission_anonymous(anonymous_user, api_request): | 
					
						
							|  |  |  |     view = APIView.as_view() | 
					
						
							|  |  |  |     permission = permissions.HasUserPermission() | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |     request = api_request.get("/") | 
					
						
							|  |  |  |     setattr(request, "user", anonymous_user) | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  |     assert permission.has_permission(request, view) is False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  | @pytest.mark.parametrize("value", [True, False]) | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  | def test_has_user_permission_logged_in_single(value, factories, api_request): | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |     user = factories["users.User"](permission_moderation=value) | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     class View(APIView): | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |         required_permissions = ["moderation"] | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  |     view = View() | 
					
						
							|  |  |  |     permission = permissions.HasUserPermission() | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |     request = api_request.get("/") | 
					
						
							|  |  |  |     setattr(request, "user", user) | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  |     result = permission.has_permission(request, view) | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |     assert result == user.has_permissions("moderation") == value | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  | @pytest.mark.parametrize( | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |     "moderation,library,expected", | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |     [ | 
					
						
							|  |  |  |         (True, False, False), | 
					
						
							|  |  |  |         (False, True, False), | 
					
						
							|  |  |  |         (False, False, False), | 
					
						
							|  |  |  |         (True, True, True), | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2018-05-24 20:38:26 +00:00
										 |  |  | def test_has_user_permission_logged_in_multiple_and( | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |     moderation, library, expected, factories, api_request | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  | ): | 
					
						
							|  |  |  |     user = factories["users.User"]( | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |         permission_moderation=moderation, permission_library=library | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class View(APIView): | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |         required_permissions = ["moderation", "library"] | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |         permission_operator = "and" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  |     view = View() | 
					
						
							|  |  |  |     permission = permissions.HasUserPermission() | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |     request = api_request.get("/") | 
					
						
							|  |  |  |     setattr(request, "user", user) | 
					
						
							| 
									
										
										
										
											2018-05-18 16:47:35 +00:00
										 |  |  |     result = permission.has_permission(request, view) | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |     assert result == user.has_permissions("moderation", "library") == expected | 
					
						
							| 
									
										
										
										
											2018-05-24 20:38:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  | @pytest.mark.parametrize( | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |     "moderation,library,expected", | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |     [ | 
					
						
							|  |  |  |         (True, False, True), | 
					
						
							|  |  |  |         (False, True, True), | 
					
						
							|  |  |  |         (False, False, False), | 
					
						
							|  |  |  |         (True, True, True), | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2018-05-24 20:38:26 +00:00
										 |  |  | def test_has_user_permission_logged_in_multiple_or( | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |     moderation, library, expected, factories, api_request | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  | ): | 
					
						
							|  |  |  |     user = factories["users.User"]( | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |         permission_moderation=moderation, permission_library=library | 
					
						
							| 
									
										
										
										
											2018-05-24 20:38:26 +00:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class View(APIView): | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |         required_permissions = ["moderation", "library"] | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |         permission_operator = "or" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 20:38:26 +00:00
										 |  |  |     view = View() | 
					
						
							|  |  |  |     permission = permissions.HasUserPermission() | 
					
						
							| 
									
										
										
										
											2018-06-09 13:36:16 +00:00
										 |  |  |     request = api_request.get("/") | 
					
						
							|  |  |  |     setattr(request, "user", user) | 
					
						
							| 
									
										
										
										
											2018-05-24 20:38:26 +00:00
										 |  |  |     result = permission.has_permission(request, view) | 
					
						
							| 
									
										
										
										
											2018-12-06 10:18:09 +00:00
										 |  |  |     has_permission_result = user.has_permissions("moderation", "library", operator="or") | 
					
						
							| 
									
										
										
										
											2018-06-10 10:06:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     assert result == has_permission_result == expected |