Feat: Add quetiapine support to medication tracking

- Implement migration script to add quetiapine and quetiapine_doses columns to existing CSV data.
- Update DataManager to include quetiapine and quetiapine_doses in data handling.
- Modify MedTrackerApp to manage quetiapine entries and doses.
- Enhance UIManager to include quetiapine in the user interface for medication selection and display.
- Update tests to cover new quetiapine functionality, including sample data and DataManager tests.
This commit is contained in:
William Valentin
2025-07-29 13:22:35 -07:00
parent 1a6fb9fcd4
commit 2b037a83e8
7 changed files with 467 additions and 317 deletions

View File

@@ -40,7 +40,8 @@ class TestDataManager:
expected_headers = [
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses", "note"
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
]
assert headers == expected_headers
@@ -78,7 +79,9 @@ class TestDataManager:
# Write headers first
writer.writerow([
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
])
# Write sample data
writer.writerows(sample_data)
@@ -90,7 +93,9 @@ class TestDataManager:
assert len(df) == 3
assert list(df.columns) == [
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
]
# Check data types
assert df["depression"].dtype == int
@@ -101,16 +106,18 @@ class TestDataManager:
"""Test that loaded data is sorted by date."""
# Write data in random order
unsorted_data = [
["2024-01-03", 1, 1, 1, 1, 1, 1, 1, 1, "third"],
["2024-01-01", 2, 2, 2, 2, 2, 2, 2, 2, "first"],
["2024-01-02", 3, 3, 3, 3, 3, 3, 3, 3, "second"],
["2024-01-03", 1, 1, 1, 1, 1, "", 1, "", 1, "", 1, "", 0, "", "third"],
["2024-01-01", 2, 2, 2, 2, 2, "", 2, "", 2, "", 2, "", 1, "", "first"],
["2024-01-02", 3, 3, 3, 3, 3, "", 3, "", 3, "", 3, "", 0, "", "second"],
]
with open(temp_csv_file, 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow([
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
])
writer.writerows(unsorted_data)
@@ -143,13 +150,15 @@ class TestDataManager:
writer = csv.writer(f)
writer.writerow([
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
])
writer.writerows(sample_data)
dm = DataManager(temp_csv_file, mock_logger)
# Try to add entry with existing date
duplicate_entry = ["2024-01-01", 5, 5, 5, 5, 1, 1, 1, 1, "Duplicate"]
duplicate_entry = ["2024-01-01", 5, 5, 5, 5, 1, "", 1, "", 1, "", 1, "", 0, "", "Duplicate"]
result = dm.add_entry(duplicate_entry)
assert result is False
@@ -162,12 +171,14 @@ class TestDataManager:
writer = csv.writer(f)
writer.writerow([
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
])
writer.writerows(sample_data)
dm = DataManager(temp_csv_file, mock_logger)
updated_values = ["2024-01-01", 5, 5, 5, 5, 2, 2, 2, 2, "Updated note"]
updated_values = ["2024-01-01", 5, 5, 5, 5, 2, "", 2, "", 2, "", 2, "", 1, "", "Updated note"]
result = dm.update_entry("2024-01-01", updated_values)
assert result is True
@@ -185,12 +196,14 @@ class TestDataManager:
writer = csv.writer(f)
writer.writerow([
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
])
writer.writerows(sample_data)
dm = DataManager(temp_csv_file, mock_logger)
updated_values = ["2024-01-05", 5, 5, 5, 5, 2, 2, 2, 2, "Updated note"]
updated_values = ["2024-01-05", 5, 5, 5, 5, 2, "", 2, "", 2, "", 2, "", 1, "", "Updated note"]
result = dm.update_entry("2024-01-01", updated_values)
assert result is True
@@ -207,13 +220,15 @@ class TestDataManager:
writer = csv.writer(f)
writer.writerow([
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
])
writer.writerows(sample_data)
dm = DataManager(temp_csv_file, mock_logger)
# Try to change date to one that already exists
updated_values = ["2024-01-02", 5, 5, 5, 5, 2, 2, 2, 2, "Updated note"]
updated_values = ["2024-01-02", 5, 5, 5, 5, 2, "", 2, "", 2, "", 2, "", 1, "", "Updated note"]
result = dm.update_entry("2024-01-01", updated_values)
assert result is False
@@ -228,7 +243,9 @@ class TestDataManager:
writer = csv.writer(f)
writer.writerow([
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
])
writer.writerows(sample_data)
@@ -249,7 +266,9 @@ class TestDataManager:
writer = csv.writer(f)
writer.writerow([
"date", "depression", "anxiety", "sleep", "appetite",
"bupropion", "hydroxyzine", "gabapentin", "propranolol", "note"
"bupropion", "bupropion_doses", "hydroxyzine", "hydroxyzine_doses",
"gabapentin", "gabapentin_doses", "propranolol", "propranolol_doses",
"quetiapine", "quetiapine_doses", "note"
])
writer.writerows(sample_data)