Skip to content

Commit

Permalink
All test cases updated
Browse files Browse the repository at this point in the history
  • Loading branch information
Yuandjom committed Jan 4, 2025
1 parent 7f9974a commit 4675417
Show file tree
Hide file tree
Showing 5 changed files with 307 additions and 12 deletions.
2 changes: 1 addition & 1 deletion app/crud/patient_assigned_dementia_mapping_crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ def update_assigned_dementia(db: Session, dementia_id: int, dementia_data: Patie
raise HTTPException(status_code=404, detail="Dementia assignment not found")

# Update the assignment
for key, value in dementia_data.dict(exclude_unset=True).items():
for key, value in dementia_data.model_dump(exclude_unset=True).items():
setattr(db_assignment, key, value)

# Update metadata
Expand Down
2 changes: 1 addition & 1 deletion app/database.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os
import sqlalchemy as sa
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import sessionmaker
from dotenv import load_dotenv

Expand Down
9 changes: 3 additions & 6 deletions app/schemas/patient_assigned_dementia_mapping.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, ConfigDict

from datetime import datetime
from typing import Optional

Expand Down Expand Up @@ -40,8 +41,4 @@ class PatientAssignedDementiaCreateResp(BaseModel):
CreatedById: int
ModifiedById: int

class Config:
from_attributes = True

class Config:
from_attributes = True
model_config = ConfigDict(orm_mode=True)
179 changes: 179 additions & 0 deletions tests/test_patient_assigned_dementia_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
import pytest
from unittest import mock
from unittest.mock import MagicMock
from datetime import datetime
from app.crud.patient_assigned_dementia_list_crud import (
get_all_dementia_list_entries,
get_dementia_list_entry_by_id,
create_dementia_list_entry,
update_dementia_list_entry,
delete_dementia_list_entry,
)
from app.schemas.patient_assigned_dementia_list import (
PatientAssignedDementiaListCreate,
PatientAssignedDementiaListUpdate,
)
from app.models.patient_assigned_dementia_list_model import PatientAssignedDementiaList
from tests.utils.mock_db import get_db_session_mock

@pytest.fixture
def db_session_mock():
"""Fixture to mock the database session."""
return get_db_session_mock()

def get_mock_dementia_list_entry():
"""Create a mock PatientAssignedDementiaList entry."""
return PatientAssignedDementiaList(
DementiaTypeListId=1,
Value="Alzheimer's",
IsDeleted="0",
CreatedDate=datetime.utcnow(),
ModifiedDate=datetime.utcnow(),
CreatedById=1,
ModifiedById=1,
)

# Test: Get all dementia list entries
# Test: Get all dementia list entries
@mock.patch("app.crud.patient_assigned_dementia_list_crud.PatientAssignedDementiaList")
@mock.patch("app.models.patient_guardian_relationship_mapping_model.PatientGuardianRelationshipMapping")
@mock.patch("app.models.patient_patient_guardian_model.PatientPatientGuardian")
@mock.patch("app.models.allergy_reaction_type_model.AllergyReactionType")
@mock.patch("app.models.patient_allergy_mapping_model.PatientAllergyMapping")
@mock.patch("app.models.patient_doctor_note_model.PatientDoctorNote") # Mock PatientDoctorNote
@mock.patch("app.models.patient_photo_model.PatientPhoto") # Mock PatientPhoto
@mock.patch("app.models.patient_mobility_model.PatientMobility")
@mock.patch("app.models.patient_prescription_model.PatientPrescription")
@mock.patch("app.models.patient_social_history_model.PatientSocialHistory")
@mock.patch("app.models.patient_vital_model.PatientVital")
@mock.patch("app.models.patient_highlight_model.PatientHighlight")
@mock.patch("app.models.allergy_type_model.AllergyType")
def test_get_all_dementia_list_entries(
mock_dementia_list_model,
mock_relationship_mapping_model,
mock_patient_guardian_model,
mock_allergy_reaction_model,
mock_allergy_mapping_model,
mock_doctor_note_model,
mock_photo_model,
mock_mobility_model,
mock_prescription_model,
mock_social_history_model,
mock_vital_model,
mock_highlight_model,
mock_allergy_type_model,
db_session_mock,
):
"""Test case for retrieving all dementia list entries."""
# Arrange: Create a mock instance
mock_instance = MagicMock()
mock_instance.DementiaTypeListId = 1
mock_instance.Value = "Alzheimer's"
mock_instance.IsDeleted = "0"
mock_instance.CreatedById = 1
mock_instance.ModifiedById = 1
mock_instance.CreatedDate = datetime.utcnow()
mock_instance.ModifiedDate = datetime.utcnow()

# Mock query result to return the mock instance in a list
db_session_mock.query.return_value.all.return_value = [mock_instance]

# Debug: Ensure mock query is set up
print("Mock Query Result:", db_session_mock.query.return_value.all())

# Act: Call the function with the mocked session
entries = get_all_dementia_list_entries(db_session_mock)

# Debug: Print the returned entries
print("Entries Retrieved:", entries)

# Assert: Verify the returned entries match the mock data
assert len(entries) == 1
retrieved_entry = entries[0]
assert retrieved_entry.DementiaTypeListId == mock_instance.DementiaTypeListId
assert retrieved_entry.Value == mock_instance.Value
assert retrieved_entry.IsDeleted == mock_instance.IsDeleted
assert retrieved_entry.CreatedById == mock_instance.CreatedById
assert retrieved_entry.ModifiedById == mock_instance.ModifiedById

# Test: Get dementia list entry by ID
@mock.patch("app.crud.patient_assigned_dementia_list_crud.PatientAssignedDementiaList")
def test_get_dementia_list_entry_by_id(mock_patient_assigned_dementia_list, db_session_mock):
"""Test case for retrieving a single dementia list entry by ID."""
mock_entry = get_mock_dementia_list_entry()
db_session_mock.query.return_value.filter.return_value.first.return_value = mock_entry

# Act
entry = get_dementia_list_entry_by_id(db_session_mock, mock_entry.DementiaTypeListId)

# Assert
assert entry.DementiaTypeListId == mock_entry.DementiaTypeListId
db_session_mock.query.return_value.filter.return_value.first.assert_called_once()

# Test: Create dementia list entry
def test_create_dementia_list_entry(db_session_mock):
"""Test case for creating a dementia list entry."""
mock_input = PatientAssignedDementiaListCreate(Value="Alzheimer's")

# Act
created_entry = create_dementia_list_entry(db_session_mock, mock_input, created_by=1)

# Assert
db_session_mock.add.assert_called_once_with(created_entry)
db_session_mock.commit.assert_called_once()
db_session_mock.refresh.assert_called_once_with(created_entry)

# Test: Update dementia list entry
@mock.patch("app.crud.patient_assigned_dementia_list_crud.PatientAssignedDementiaList")
def test_update_dementia_list_entry(mock_patient_assigned_dementia_list, db_session_mock):
"""Test case for updating a dementia list entry."""
# Arrange: Mock the existing entry
mock_entry = get_mock_dementia_list_entry()
db_session_mock.query.return_value.filter.return_value.first.return_value = mock_entry

# Include all required fields for the update schema
mock_input = PatientAssignedDementiaListUpdate(
Value="Updated Value",
IsDeleted="0" # Include the required `IsDeleted` field
)

# Act: Perform the update
updated_entry = update_dementia_list_entry(
db_session_mock,
mock_entry.DementiaTypeListId,
mock_input,
modified_by=1,
)

# Assert: Validate the updated fields
assert updated_entry.Value == mock_input.Value
assert updated_entry.IsDeleted == mock_input.IsDeleted
db_session_mock.commit.assert_called_once()
db_session_mock.refresh.assert_called_once_with(updated_entry)


# Test: Delete dementia list entry
@mock.patch("app.models.patient_assigned_dementia_list_model.PatientAssignedDementiaList")
def test_delete_dementia_list_entry(mock_patient_assigned_dementia_list, db_session_mock):
"""Test case for deleting a dementia list entry."""
# Arrange: Mock existing dementia list entry
mock_entry = get_mock_dementia_list_entry()
db_session_mock.query.return_value.filter.return_value.first.return_value = mock_entry

# Act: Call the delete function
deleted_entry = delete_dementia_list_entry(
db_session_mock,
mock_entry.DementiaTypeListId,
modified_by=1,
)

# Assert: Verify the entry is marked as deleted
assert deleted_entry.IsDeleted == "1"

# Assert: Verify database interactions
db_session_mock.query.return_value.filter.return_value.first.assert_called_once()
db_session_mock.commit.assert_called_once()

# Debug Output: Print deleted entry details
print("Deleted Entry:", deleted_entry)

Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
from app.crud.patient_assigned_dementia_mapping_crud import (
create_assigned_dementia,
get_all_assigned_dementias,
get_assigned_dementias,
update_assigned_dementia,
delete_assigned_dementia,
)
from app.schemas.patient_assigned_dementia_mapping import (
PatientAssignedDementiaCreate,
)
from app.schemas.patient_assigned_dementia_mapping import PatientAssignedDementiaCreate, PatientAssignedDementiaUpdate
from app.models.patient_assigned_dementia_mapping_model import PatientAssignedDementiaMapping


Expand Down Expand Up @@ -197,4 +198,122 @@ def test_get_all_assigned_dementias(
# Debug: Print the result for verification
print("Test Result:")
for item in result:
print(item)
print(item)

@mock.patch("app.models.patient_assigned_dementia_mapping_model.PatientAssignedDementiaMapping")
@mock.patch("app.models.patient_assigned_dementia_list_model.PatientAssignedDementiaList")
def test_get_assigned_dementias(
mock_patient_assigned_dementia_mapping,
mock_patient_assigned_dementia_list,
db_session_mock,
):
"""Test case for retrieving dementia assignments for a specific patient."""
# Arrange: Mock data to simulate query results
mock_results = [
MagicMock(
id=1,
PatientId=101,
DementiaTypeListId=1,
IsDeleted="0",
CreatedDate="2025-01-01",
ModifiedDate="2025-01-02",
CreatedById=1,
ModifiedById=2,
DementiaTypeValue="Alzheimer's",
),
MagicMock(
id=2,
PatientId=101,
DementiaTypeListId=2,
IsDeleted="0",
CreatedDate="2025-01-03",
ModifiedDate="2025-01-04",
CreatedById=1,
ModifiedById=3,
DementiaTypeValue="Vascular Dementia",
),
]

# Mock query behavior
db_session_mock.query.return_value.join.return_value.filter.return_value.all.return_value = mock_results

# Act: Call the function with the mocked session and patient ID
patient_id = 101
result = get_assigned_dementias(db_session_mock, patient_id)

# Assert: Verify the length of the returned data
assert len(result) == len(mock_results)

# Assert: Verify the data matches the mocked results
for i, mock_dementia in enumerate(mock_results):
assert result[i]["id"] == mock_dementia.id
assert result[i]["PatientId"] == mock_dementia.PatientId
assert result[i]["DementiaTypeListId"] == mock_dementia.DementiaTypeListId
assert result[i]["DementiaTypeValue"] == mock_dementia.DementiaTypeValue

# Debug: Print the result for verification
print("Test Result:")
for item in result:
print(item)

# Test for updating a dementia assignment
@mock.patch("app.models.patient_assigned_dementia_mapping_model.PatientAssignedDementiaMapping")
def test_update_assigned_dementia(mock_patient_assigned_dementia_mapping, db_session_mock):
"""Test case for updating a dementia assignment."""
# Arrange: Mock existing record
mock_existing_record = MagicMock(
id=1,
PatientId=101,
DementiaTypeListId=1,
IsDeleted="0",
CreatedDate="2025-01-01",
ModifiedDate="2025-01-02",
CreatedById=1,
ModifiedById=2,
)
db_session_mock.query.return_value.filter.return_value.first.return_value = mock_existing_record

# Provide updated data
updated_data = PatientAssignedDementiaUpdate(
DementiaTypeListId=2, # Updated field
ModifiedById=3 # Required field
)
modified_by = 3 # Simulate the ID of the user modifying the record

# Act: Call the update function
result = update_assigned_dementia(
db=db_session_mock,
dementia_id=1,
dementia_data=updated_data,
modified_by=modified_by,
)

# Assert: Verify that the fields were updated
assert result.DementiaTypeListId == updated_data.DementiaTypeListId
assert result.ModifiedById == modified_by
assert result.ModifiedDate is not None

# Ensure that commit was called
db_session_mock.commit.assert_called_once()

# Debug: Print updated record
print("Updated Assignment:", result)


# Test for deleting a dementia assignment
@mock.patch("app.models.patient_assigned_dementia_mapping_model.PatientAssignedDementiaMapping")
def test_delete_assigned_dementia(mock_patient_assigned_dementia_mapping, db_session_mock):
"""Test case for deleting a dementia assignment."""
mock_existing_record = MagicMock(
id=1,
PatientId=101,
DementiaTypeListId=1,
IsDeleted="0",
)
db_session_mock.query.return_value.filter.return_value.first.return_value = mock_existing_record

modified_by = 3
result = delete_assigned_dementia(db_session_mock, 1, modified_by)

assert result.IsDeleted == "1"
db_session_mock.commit.assert_called_once()

0 comments on commit 4675417

Please sign in to comment.