Added more cases to user tests to check all access levels
This commit is contained in:
		
							
								
								
									
										113
									
								
								api/tests/test_users.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								api/tests/test_users.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,113 @@ | ||||
| import json | ||||
| from models import User, db | ||||
| from flask_jwt_extended import create_access_token | ||||
| from werkzeug.security import generate_password_hash | ||||
|  | ||||
| def test_create_user(test_client): | ||||
|     """New user registration test""" | ||||
|  | ||||
|     # Anonymous try to create common user | ||||
|     test_user_data = {"username": "testuser", "email": "test@example.com", "password": "testpass", "role": "User"} | ||||
|     response = test_client.post("/users", data=json.dumps(test_user_data), content_type="application/json") | ||||
|     assert response.status_code == 201 # User should be created successfully | ||||
|     data = response.get_json() | ||||
|     assert data["username"] == "testuser" | ||||
|  | ||||
|     # Anonymous try to create admin user | ||||
|     admin_user_data = {"username": "testadmin", "email": "testadmin@example.com", "password": "adminpass", "role": "Administrator"} | ||||
|     response = test_client.post("/users", data=json.dumps(admin_user_data), content_type="application/json") | ||||
|     assert response.status_code == 401 # Anonymous cannot create admin users | ||||
|  | ||||
|     # Login common user and try to create admin user | ||||
|     access_token = create_access_token(identity='1') | ||||
|     headers = {"Authorization": f"Bearer {access_token}"} | ||||
|     response = test_client.post("/users", data=json.dumps(admin_user_data), content_type="application/json", headers=headers) | ||||
|     assert response.status_code == 403 # Common user cannot create admin users | ||||
|  | ||||
|     # Try to create admin user using admin account | ||||
|     hashed_pass = generate_password_hash("adminpass") | ||||
|     user = User(username="admin", email="admin@example.com", password=hashed_pass, role="Administrator") | ||||
|     db.session.add(user) | ||||
|     db.session.commit() | ||||
|     access_token = create_access_token(identity=str(user.id)) | ||||
|     headers = {"Authorization": f"Bearer {access_token}"} | ||||
|     response = test_client.post("/users", data=json.dumps(admin_user_data), content_type="application/json", headers=headers) | ||||
|     assert response.status_code == 201 # Logged administrators can create new admin users | ||||
|  | ||||
|  | ||||
| def test_login(test_client): | ||||
|     """User login test""" | ||||
|     hashed_pass = generate_password_hash("testpass") | ||||
|     user = User(username="testuser", email="test@example.com", password=hashed_pass, role="User") | ||||
|     db.session.add(user) | ||||
|     db.session.commit() | ||||
|  | ||||
|     response = test_client.post( | ||||
|         "/login", | ||||
|         data=json.dumps({"username": "testuser", "password": "wrongpass"}), | ||||
|         content_type="application/json", | ||||
|     ) | ||||
|     assert response.status_code == 401 # User should not be logged - wrong password | ||||
|     response = test_client.post( | ||||
|         "/login", | ||||
|         data=json.dumps({"username": "testuser", "password": "testpass"}), | ||||
|         content_type="application/json", | ||||
|     ) | ||||
|     assert response.status_code == 200 # User should be logged - right password | ||||
|  | ||||
|  | ||||
| def test_get_users(test_client): | ||||
|     """Get all users test""" | ||||
|     response = test_client.get("/users") | ||||
|     assert response.status_code == 401 # Anonymous cannot get all users data | ||||
|      | ||||
|     # Common user try to get all users data | ||||
|     hashed_pass = generate_password_hash("testpass") | ||||
|     user = User(username="testuser", email="test@example.com", password=hashed_pass, role="User") | ||||
|     db.session.add(user) | ||||
|     db.session.commit() | ||||
|     access_token = create_access_token(identity=str(user.id)) | ||||
|     headers = {"Authorization": f"Bearer {access_token}"} | ||||
|     response = test_client.get("/users", headers=headers) | ||||
|     assert response.status_code == 403 # Common user cannot get all users data | ||||
|      | ||||
|     # Admin user try to get all users data | ||||
|     hashed_pass = generate_password_hash("adminpass") | ||||
|     user = User(username="testadmin", email="testadmin@example.com", password=hashed_pass, role="Administrator") | ||||
|     db.session.add(user) | ||||
|     db.session.commit() | ||||
|     access_token = create_access_token(identity=str(user.id)) | ||||
|     headers = {"Authorization": f"Bearer {access_token}"} | ||||
|     response = test_client.get("/users", headers=headers) | ||||
|     assert response.status_code == 200 # Admin user should can get all users data | ||||
|  | ||||
| def test_get_user_with_token(test_client): | ||||
|     """Test to get user data before and after auth using JWT token""" | ||||
|     admin_pass = generate_password_hash("admin_pass") | ||||
|     admin = User(username="admin", email="admin@example.com", password=admin_pass, role="Administrator") | ||||
|     db.session.add(admin) | ||||
|     db.session.commit() | ||||
|  | ||||
|     response = test_client.get(f"/users/{admin.id}") | ||||
|     assert response.status_code == 401 # Try to get user data without login | ||||
|      | ||||
|     access_token = create_access_token(identity=str(admin.id)) | ||||
|     admin_headers = {"Authorization": f"Bearer {access_token}"} | ||||
|  | ||||
|     response = test_client.get(f"/users/{admin.id}", headers=admin_headers) | ||||
|     assert response.status_code == 200 | ||||
|     data = response.get_json() | ||||
|     assert data["username"] == "admin" | ||||
|  | ||||
|     user_pass = generate_password_hash("test_pass") | ||||
|     user = User(username="testuser", email="test@example.com", password=user_pass, role="User") | ||||
|     db.session.add(user) | ||||
|     db.session.commit() | ||||
|     access_token = create_access_token(identity=str(user.id)) | ||||
|     headers = {"Authorization": f"Bearer {access_token}"} | ||||
|     response = test_client.get(f"/users/{user.id}", headers=headers) | ||||
|     assert response.status_code == 200 # Common user can get own user data | ||||
|     response = test_client.get(f"/users/{admin.id}", headers=headers) | ||||
|     assert response.status_code == 403 # Common user cannot get other user data | ||||
|     response = test_client.get(f"/users/{user.id}", headers=admin_headers) | ||||
|     assert response.status_code == 200 # Admin can access all user data | ||||
		Reference in New Issue
	
	Block a user