| | 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""" |
| | |
| | response = client.post("/jobs", json=sample_job_data) |
| | assert response.status_code == 200 |
| | job_id = response.json()["id"] |
| | |
| | |
| | response = client.post(f"/assessments/jobs/{job_id}", json=sample_assessment_data) |
| | assert response.status_code == 200 |
| | assessment_id = response.json()["id"] |
| | |
| | |
| | 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_", "") |
| | |
| | |
| | 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 |
| |
|
| |
|
| | 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""" |
| | |
| | response = client.post("/jobs", json=sample_job_data) |
| | assert response.status_code == 200 |
| | job_id = response.json()["id"] |
| | |
| | |
| | response = client.post(f"/assessments/jobs/{job_id}", json=sample_assessment_data) |
| | assert response.status_code == 200 |
| | assessment_id = response.json()["id"] |
| | |
| | |
| | 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_", "") |
| | |
| | |
| | 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"] |
| | |
| | |
| | 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 |
| | |
| | |
| | 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""" |
| | |
| | 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_", "") |
| | |
| | |
| | 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 |