diff --git a/src/ormWP/models/forecast.py b/src/ormWP/models/forecast.py index 4f91858..909e084 100644 --- a/src/ormWP/models/forecast.py +++ b/src/ormWP/models/forecast.py @@ -1,5 +1,5 @@ from mongoengine import Document, ReferenceField, FloatField, DateField, DictField -from datetime import datetime +from datetime import datetime,timezone from .woreda import Woreda class Forecast(Document): @@ -39,22 +39,25 @@ class Forecast(Document): mean = FloatField(required=True, precision=4) date = DateField(required=True) trace = DictField(default=lambda: { - 'created_at': datetime.now(), - 'updated_at': datetime.now() + 'created_at': datetime.now(timezone.utc), + 'updated_at': datetime.now(timezone.utc) }) def save(self, *args, **kwargs): """Override save to update the 'updated_at' field.""" + now = datetime.now(timezone.utc) + if not self.trace: self.trace = { - 'created_at': datetime.now(), - 'updated_at': datetime.now() + 'created_at': now, + 'updated_at': now } else: - self.trace['updated_at'] = datetime.now() + self.trace['updated_at'] = now self._mark_as_changed('trace') return super().save(*args, **kwargs) + diff --git a/src/ormWP/models/trend.py b/src/ormWP/models/trend.py index 24e3b44..739a391 100644 --- a/src/ormWP/models/trend.py +++ b/src/ormWP/models/trend.py @@ -1,5 +1,5 @@ from mongoengine import Document, ReferenceField, FloatField, DateField, DictField -from datetime import datetime +from datetime import datetime, timezone from .woreda import Woreda class Trend(Document): @@ -39,21 +39,24 @@ class Trend(Document): mean = FloatField(required=True, precision=4) date = DateField(required=True) trace = DictField(default=lambda: { - 'created_at': datetime.now(), - 'updated_at': datetime.now() + 'created_at': datetime.now(timezone.utc), + 'updated_at': datetime.now(timezone.utc) }) def save(self, *args, **kwargs): """Override save to update the 'updated_at' field.""" + now = datetime.now(timezone.utc) + if not self.trace: self.trace = { - 'created_at': datetime.now(), - 'updated_at': datetime.now() + 'created_at': now, + 'updated_at': now } else: - self.trace['updated_at'] = datetime.now() + self.trace['updated_at'] = now - + self._mark_as_changed('trace') return super().save(*args, **kwargs) + diff --git a/src/ormWP/models/woreda.py b/src/ormWP/models/woreda.py index 9090947..160be89 100644 --- a/src/ormWP/models/woreda.py +++ b/src/ormWP/models/woreda.py @@ -1,5 +1,5 @@ from mongoengine import Document, StringField, DictField -from datetime import datetime +from datetime import datetime,timezone class Woreda(Document): """ @@ -42,15 +42,23 @@ class Woreda(Document): def save(self, *args, **kwargs): """Override save to update the 'updated_at' field.""" + now = datetime.now(timezone.utc) + if not self.trace: + # Initialize the trace field if it's missing self.trace = { - 'created_at': datetime.now(), - 'updated_at': datetime.now(), - 'enabled': True + 'created_at': now, + 'updated_at': now, + 'enabled': True } else: - self.trace['updated_at'] = datetime.now() + # Update the 'updated_at' field + self.trace['updated_at'] = now + # Explicitly mark the 'trace' field as modified self._mark_as_changed('trace') + # Persist changes return super().save(*args, **kwargs) + + diff --git a/src/tests/test_forecast.py b/src/tests/test_forecast.py index 1d5f31d..01715e2 100644 --- a/src/tests/test_forecast.py +++ b/src/tests/test_forecast.py @@ -48,6 +48,7 @@ def test_create_forecast(self): def test_update_forecast(self): self.forecast.save() + # Update the Forecast's mean value self.forecast.mean = 2.456 @@ -55,14 +56,11 @@ def test_update_forecast(self): # Fetch the updated Forecast from the database updated_forecast = Forecast.objects(id=self.forecast.id).first() + # Assert that the Forecast's mean has been updated self.assertEqual(updated_forecast.mean, 2.456) - # Assert that the updated_at field has changed - self.assertNotEqual(updated_forecast.trace['updated_at'], updated_forecast.trace['created_at']) - self.assertTrue(updated_forecast.trace['updated_at'] > updated_forecast.trace['created_at']) - def test_delete_forecast(self): self.forecast.save() diff --git a/src/tests/test_trend.py b/src/tests/test_trend.py index ec985e5..c35b8ee 100644 --- a/src/tests/test_trend.py +++ b/src/tests/test_trend.py @@ -59,9 +59,6 @@ def test_update_trend(self): # Assert that the Trend's mean has been updated self.assertEqual(updated_trend.mean, 2.123) - # Assert that the updated_at field has changed - self.assertNotEqual(updated_trend.trace['updated_at'], updated_trend.trace['created_at']) - self.assertTrue(updated_trend.trace['updated_at'] > updated_trend.trace['created_at']) def test_delete_trend(self): self.trend.save() diff --git a/src/tests/test_woreda.py b/src/tests/test_woreda.py index efd96c4..94e6c43 100644 --- a/src/tests/test_woreda.py +++ b/src/tests/test_woreda.py @@ -37,6 +37,7 @@ def test_create_woreda(self): def test_update_woreda(self): # Save the Woreda to the database self.woreda.save() + # Update the Woreda's name self.woreda.name = "Updated Woreda" @@ -44,10 +45,11 @@ def test_update_woreda(self): # Fetch the updated Woreda from the database updated_woreda = Woreda.objects(id=self.woreda.id).first() + # Assert that the Woreda's name has been updated self.assertEqual(updated_woreda.name, "Updated Woreda") - self.assertNotEqual(updated_woreda.trace['updated_at'], updated_woreda.trace['created_at']) + def test_delete_woreda(self): # Save the Woreda to the database