From d870bcc613baae080fdc783b81164325c2ec0608 Mon Sep 17 00:00:00 2001 From: Marcin-Ramotowski Date: Thu, 27 Mar 2025 19:14:12 +0000 Subject: [PATCH] Added basic users and tasks endpoints tests --- api/tests/conftest.py | 15 +++++++++++++ api/tests/test_tasks.py | 42 ++++++++++++++++++++++++++++++++++++ api/tests/test_users.py | 47 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 api/tests/conftest.py create mode 100644 api/tests/test_tasks.py create mode 100644 api/tests/test_users.py diff --git a/api/tests/conftest.py b/api/tests/conftest.py new file mode 100644 index 0000000..23c403c --- /dev/null +++ b/api/tests/conftest.py @@ -0,0 +1,15 @@ +import pytest +from app import create_app +from models import db + +@pytest.fixture +def test_client(): + """Creates a new instance of test app.""" + app = create_app("testing") + + with app.test_client() as client: + with app.app_context(): + db.create_all() + yield client + db.session.remove() + db.drop_all() diff --git a/api/tests/test_tasks.py b/api/tests/test_tasks.py new file mode 100644 index 0000000..5ac8610 --- /dev/null +++ b/api/tests/test_tasks.py @@ -0,0 +1,42 @@ +from datetime import datetime +import json +from models import Task, User, db +from flask_jwt_extended import create_access_token + +def test_create_task(test_client): + """Task creation test by logged in user""" + 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.post( + "/tasks", + data=json.dumps({"title": "Test Task", "description": "Opis", "due_date": "20-03-2025 12:00", "done": 0}), + headers=headers, + content_type="application/json", + ) + assert response.status_code == 200 # Create task should be successful + data = response.get_json() + assert data["title"] == "Test Task" + +def test_get_tasks(test_client): + """User task get test""" + user = User(username="taskuser", email="task@example.com", password="hashed_pass", role="User") + db.session.add(user) + db.session.commit() + + task = Task(title="Zadanie", description="Opis zadania", due_date=datetime.strptime("20-03-2025 12:00", '%d-%m-%Y %H:%M'), done=0, user_id=user.id) + db.session.add(task) + db.session.commit() + + access_token = create_access_token(identity=str(user.id)) + headers = {"Authorization": f"Bearer {access_token}"} + + response = test_client.get(f"/tasks/user/{user.id}", headers=headers) + assert response.status_code == 200 + data = response.get_json() + assert len(data) == 1 + assert data[0]["title"] == "Zadanie" diff --git a/api/tests/test_users.py b/api/tests/test_users.py new file mode 100644 index 0000000..5024075 --- /dev/null +++ b/api/tests/test_users.py @@ -0,0 +1,47 @@ +import json +from models import User, db +from flask_jwt_extended import create_access_token + +def test_create_user(test_client): + """New user registration test""" + response = test_client.post( + "/users", + data=json.dumps({"username": "testuser", "email": "test@example.com", "password": "testpass", "role": "User"}), + content_type="application/json", + ) + assert response.status_code == 201 # User should be created successfully + data = response.get_json() + assert data["username"] == "testuser" + +def test_login(test_client): + """User login test with wrong password""" + 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": "testpass"}), + content_type="application/json", + ) + assert response.status_code == 401 # User should not be logged - wrong password + +def test_get_users(test_client): + """Get all users test - JWT required""" + response = test_client.get("/users") + assert response.status_code == 401 + +def test_get_user_with_token(test_client): + """Test to get user data after auth using JWT token""" + user = User(username="admin", email="admin@example.com", password="hashed_pass", role="Administrator") + print(user.id) + 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 + data = response.get_json() + assert data["username"] == "admin"