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

@@ -24,9 +24,9 @@ def temp_csv_file():
def sample_data():
"""Sample data for testing."""
return [
["2024-01-01", 3, 2, 4, 3, 1, 0, 2, 1, "Test note 1"],
["2024-01-02", 2, 3, 3, 4, 1, 1, 2, 0, "Test note 2"],
["2024-01-03", 4, 1, 5, 2, 0, 0, 1, 1, ""],
["2024-01-01", 3, 2, 4, 3, 1, "", 0, "", 2, "", 1, "", 0, "", "Test note 1"],
["2024-01-02", 2, 3, 3, 4, 1, "", 1, "", 2, "", 0, "", 1, "", "Test note 2"],
["2024-01-03", 4, 1, 5, 2, 0, "", 0, "", 1, "", 1, "", 0, "", ""],
]
@@ -40,9 +40,15 @@ def sample_dataframe():
'sleep': [4, 3, 5],
'appetite': [3, 4, 2],
'bupropion': [1, 1, 0],
'bupropion_doses': ['', '', ''],
'hydroxyzine': [0, 1, 0],
'hydroxyzine_doses': ['', '', ''],
'gabapentin': [2, 2, 1],
'gabapentin_doses': ['', '', ''],
'propranolol': [1, 0, 1],
'propranolol_doses': ['', '', ''],
'quetiapine': [0, 1, 0],
'quetiapine_doses': ['', '', ''],
'note': ['Test note 1', 'Test note 2', '']
})

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)