|
|
from schemas.assessment import AssessmentCreate, AssessmentQuestion, AssessmentQuestionOption |
|
|
from schemas.enums import QuestionType |
|
|
from pydantic import ValidationError |
|
|
import json |
|
|
|
|
|
def test_assessment_validation(): |
|
|
"""Test assessment schema validation""" |
|
|
print("Testing Assessment Schema Validation...") |
|
|
|
|
|
|
|
|
try: |
|
|
valid_question = AssessmentQuestion( |
|
|
id="test-id", |
|
|
text="Sample question?", |
|
|
weight=3, |
|
|
skill_categories=["python", "programming"], |
|
|
type=QuestionType.choose_one, |
|
|
options=[ |
|
|
AssessmentQuestionOption(text="Option A", value="a"), |
|
|
AssessmentQuestionOption(text="Option B", value="b") |
|
|
], |
|
|
correct_options=["a"] |
|
|
) |
|
|
|
|
|
valid_assessment = AssessmentCreate( |
|
|
title="Valid Assessment", |
|
|
passing_score=70, |
|
|
questions=[valid_question] |
|
|
) |
|
|
print("[PASS] Valid assessment creation succeeded") |
|
|
except ValidationError as e: |
|
|
print(f"[FAIL] Valid assessment creation failed: {e}") |
|
|
|
|
|
|
|
|
try: |
|
|
invalid_question_low_weight = AssessmentQuestion( |
|
|
id="test-id", |
|
|
text="Sample question?", |
|
|
weight=0, |
|
|
skill_categories=["python", "programming"], |
|
|
type=QuestionType.choose_one |
|
|
) |
|
|
print("[FAIL] Invalid weight (too low) should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid weight (too low) correctly failed validation") |
|
|
|
|
|
|
|
|
try: |
|
|
invalid_question_high_weight = AssessmentQuestion( |
|
|
id="test-id", |
|
|
text="Sample question?", |
|
|
weight=6, |
|
|
skill_categories=["python", "programming"], |
|
|
type=QuestionType.choose_one |
|
|
) |
|
|
print("[FAIL] Invalid weight (too high) should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid weight (too high) correctly failed validation") |
|
|
|
|
|
|
|
|
try: |
|
|
valid_question = AssessmentQuestion( |
|
|
id="test-id", |
|
|
text="Sample question?", |
|
|
weight=3, |
|
|
skill_categories=["python", "programming"], |
|
|
type=QuestionType.choose_one |
|
|
) |
|
|
|
|
|
invalid_assessment_low_score = AssessmentCreate( |
|
|
title="Invalid Assessment", |
|
|
passing_score=10, |
|
|
questions=[valid_question] |
|
|
) |
|
|
print("[FAIL] Invalid passing score (too low) should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid passing score (too low) correctly failed validation") |
|
|
|
|
|
|
|
|
try: |
|
|
valid_question = AssessmentQuestion( |
|
|
id="test-id", |
|
|
text="Sample question?", |
|
|
weight=3, |
|
|
skill_categories=["python", "programming"], |
|
|
type=QuestionType.choose_one |
|
|
) |
|
|
|
|
|
invalid_assessment_high_score = AssessmentCreate( |
|
|
title="Invalid Assessment", |
|
|
passing_score=90, |
|
|
questions=[valid_question] |
|
|
) |
|
|
print("[FAIL] Invalid passing score (too high) should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid passing score (too high) correctly failed validation") |
|
|
|
|
|
|
|
|
try: |
|
|
too_long_title = "x" * 201 |
|
|
invalid_assessment_title = AssessmentCreate( |
|
|
title=too_long_title, |
|
|
passing_score=70, |
|
|
questions=[valid_question] |
|
|
) |
|
|
print("[FAIL] Invalid title length should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid title length correctly failed validation") |
|
|
|
|
|
def test_user_validation(): |
|
|
"""Test user schema validation""" |
|
|
print("\nTesting User Schema Validation...") |
|
|
|
|
|
from schemas.user import UserCreate |
|
|
from schemas.enums import UserRole |
|
|
|
|
|
try: |
|
|
valid_user = UserCreate( |
|
|
first_name="John", |
|
|
last_name="Doe", |
|
|
email="john.doe@example.com", |
|
|
role=UserRole.hr, |
|
|
password="securepassword123" |
|
|
) |
|
|
print("[PASS] Valid user creation succeeded") |
|
|
except ValidationError as e: |
|
|
print(f"[FAIL] Valid user creation failed: {e}") |
|
|
|
|
|
|
|
|
try: |
|
|
invalid_user_long_name = UserCreate( |
|
|
first_name="x" * 51, |
|
|
last_name="Doe", |
|
|
email="john.doe@example.com", |
|
|
role=UserRole.hr, |
|
|
password="securepassword123" |
|
|
) |
|
|
print("[FAIL] Invalid first name length should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid first name length correctly failed validation") |
|
|
|
|
|
|
|
|
try: |
|
|
invalid_user_empty_name = UserCreate( |
|
|
first_name="John", |
|
|
last_name="", |
|
|
email="john.doe@example.com", |
|
|
role=UserRole.hr, |
|
|
password="securepassword123" |
|
|
) |
|
|
print("[FAIL] Invalid last name (empty) should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid last name (empty) correctly failed validation") |
|
|
|
|
|
def test_job_validation(): |
|
|
"""Test job schema validation""" |
|
|
print("\nTesting Job Schema Validation...") |
|
|
|
|
|
from schemas.job import JobCreate |
|
|
from schemas.enums import JobSeniority |
|
|
|
|
|
|
|
|
try: |
|
|
valid_job = JobCreate( |
|
|
title="Software Engineer", |
|
|
seniority=JobSeniority.mid, |
|
|
description="Develop software solutions" |
|
|
) |
|
|
print("[PASS] Valid job creation succeeded") |
|
|
except ValidationError as e: |
|
|
print(f"[FAIL] Valid job creation failed: {e}") |
|
|
|
|
|
|
|
|
try: |
|
|
invalid_job_long_title = JobCreate( |
|
|
title="x" * 201, |
|
|
seniority=JobSeniority.junior, |
|
|
description="Develop software solutions" |
|
|
) |
|
|
print("[FAIL] Invalid job title length should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid job title length correctly failed validation") |
|
|
|
|
|
|
|
|
try: |
|
|
invalid_job_long_desc = JobCreate( |
|
|
title="Software Engineer", |
|
|
seniority=JobSeniority.junior, |
|
|
description="x" * 1001 |
|
|
) |
|
|
print("[FAIL] Invalid job description length should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid job description length correctly failed validation") |
|
|
|
|
|
def test_application_validation(): |
|
|
"""Test application schema validation""" |
|
|
print("\nTesting Application Schema Validation...") |
|
|
|
|
|
from schemas.application import ApplicationAnswer, ApplicationCreate |
|
|
|
|
|
|
|
|
try: |
|
|
valid_answer = ApplicationAnswer( |
|
|
question_id="question-1", |
|
|
text="Sample answer text", |
|
|
options=["option1", "option2"] |
|
|
) |
|
|
|
|
|
valid_application = ApplicationCreate( |
|
|
job_id="job-1", |
|
|
assessment_id="assessment-1", |
|
|
user_id="user-1", |
|
|
answers=[valid_answer] |
|
|
) |
|
|
print("[PASS] Valid application creation succeeded") |
|
|
except ValidationError as e: |
|
|
print(f"[FAIL] Valid application creation failed: {e}") |
|
|
|
|
|
|
|
|
try: |
|
|
invalid_answer = ApplicationAnswer( |
|
|
question_id="", |
|
|
text="Sample answer text" |
|
|
) |
|
|
print("[FAIL] Invalid question_id should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid question_id correctly failed validation") |
|
|
|
|
|
|
|
|
try: |
|
|
invalid_answer_long_text = ApplicationAnswer( |
|
|
question_id="question-1", |
|
|
text="x" * 5001 |
|
|
) |
|
|
print("[FAIL] Invalid answer text length should have failed validation") |
|
|
except ValidationError: |
|
|
print("[PASS] Invalid answer text length correctly failed validation") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
test_assessment_validation() |
|
|
test_user_validation() |
|
|
test_job_validation() |
|
|
test_application_validation() |
|
|
print("\nAll validation tests completed!") |