subul / backend /tests /test_applications.py
Kaadan's picture
initial commit
358dfff
import pytest
from fastapi.testclient import TestClient
from sqlalchemy.orm import Session
from models.application import Application
from schemas.application import ApplicationAnswer
def test_create_application(client: TestClient, sample_job_data: dict, sample_assessment_data: dict, sample_user_data: dict):
"""Test creating a new application for an assessment"""
# Create a job first
response = client.post("/jobs", json=sample_job_data)
assert response.status_code == 200
job_id = response.json()["id"]
# Create an assessment for the job
response = client.post(f"/assessments/jobs/{job_id}", json=sample_assessment_data)
assert response.status_code == 200
assessment_id = response.json()["id"]
# Register a user first
response = client.post("/users/registration/signup", json=sample_user_data)
assert response.status_code == 200
token_response = response.json()
user_id = token_response["token"].replace("fake_token_for_", "")
# Create an application for the assessment
application_data = {
"job_id": job_id,
"assessment_id": assessment_id,
"user_id": user_id,
"answers": [
{
"question_id": "question1",
"answer_text": "Sample answer to question 1"
},
{
"question_id": "question2",
"answer_text": "Sample answer to question 2"
}
]
}
response = client.post(f"/applications/jobs/{job_id}/assessments/{assessment_id}", json=application_data)
assert response.status_code == 200
data = response.json()
assert "id" in data
assert len(data["id"]) > 0 # UUID should be returned
def test_get_applications_list(client: TestClient, sample_job_data: dict, sample_assessment_data: dict, sample_user_data: dict):
"""Test getting list of applications for an assessment"""
# Create a job first
response = client.post("/jobs", json=sample_job_data)
assert response.status_code == 200
job_id = response.json()["id"]
# Create an assessment for the job
response = client.post(f"/assessments/jobs/{job_id}", json=sample_assessment_data)
assert response.status_code == 200
assessment_id = response.json()["id"]
# Register a user first
response = client.post("/users/registration/signup", json=sample_user_data)
assert response.status_code == 200
token_response = response.json()
user_id = token_response["token"].replace("fake_token_for_", "")
# Create an application for the assessment
application_data = {
"job_id": job_id,
"assessment_id": assessment_id,
"user_id": user_id,
"answers": [
{
"question_id": "question1",
"answer_text": "Sample answer to question 1"
}
]
}
response = client.post(f"/applications/jobs/{job_id}/assessments/{assessment_id}", json=application_data)
assert response.status_code == 200
application_id = response.json()["id"]
# Get the list of applications for the assessment
response = client.get(f"/applications/jobs/{job_id}/assessments/{assessment_id}")
assert response.status_code == 200
data = response.json()
assert "data" in data
assert len(data["data"]) >= 1
# Find our application in the list
found_application = None
for application in data["data"]:
if application["id"] == application_id:
found_application = application
break
assert found_application is not None
assert found_application["id"] == application_id
assert found_application["job_id"] == job_id
assert found_application["assessment_id"] == assessment_id
assert found_application["user_id"] == user_id
assert len(found_application["answers"]) == 1
assert found_application["answers"][0]["question_id"] == "question1"
assert found_application["answers"][0]["answer_text"] == "Sample answer to question 1"
def test_create_application_with_invalid_job_or_assessment(client: TestClient, sample_user_data: dict):
"""Test creating an application with invalid job or assessment"""
# Register a user first
response = client.post("/users/registration/signup", json=sample_user_data)
assert response.status_code == 200
token_response = response.json()
user_id = token_response["token"].replace("fake_token_for_", "")
# Try to create an application with invalid job/assessment IDs
application_data = {
"job_id": "invalid-job-id",
"assessment_id": "invalid-assessment-id",
"user_id": user_id,
"answers": []
}
response = client.post("/applications/jobs/invalid-job-id/assessments/invalid-assessment-id", json=application_data)
assert response.status_code == 404
assert "Assessment not found for this job" in response.json()["detail"]
def test_health_check_endpoint(client: TestClient):
"""Test the health check endpoint"""
response = client.get("/health")
assert response.status_code == 200
data = response.json()
assert "status" in data
assert data["status"] == "healthy"
assert "database" in data
assert data["database"] == "connected"
assert "timestamp" in data