From d34d39ade76e6b67299d8d88a7e5a2278a793dc3 Mon Sep 17 00:00:00 2001 From: Adam Chainz Date: Mon, 1 Jun 2015 18:00:34 +0100 Subject: Fixed #24894 -- Added contrib.postgres.functions.TransactionNow --- .../migrations/0002_create_test_models.py | 7 ++++++ tests/postgres_tests/models.py | 4 ++++ tests/postgres_tests/test_functions.py | 28 ++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 tests/postgres_tests/test_functions.py (limited to 'tests/postgres_tests') diff --git a/tests/postgres_tests/migrations/0002_create_test_models.py b/tests/postgres_tests/migrations/0002_create_test_models.py index f1d06cc2d9..c8fe842397 100644 --- a/tests/postgres_tests/migrations/0002_create_test_models.py +++ b/tests/postgres_tests/migrations/0002_create_test_models.py @@ -130,6 +130,13 @@ class Migration(migrations.Migration): ('related_field', models.ForeignKey('postgres_tests.AggregateTestModel', null=True)), ] ), + migrations.CreateModel( + name='NowTestModel', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('when', models.DateTimeField(null=True, default=None)), + ] + ), ] pg_92_operations = [ diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py index bef77b7b21..4233092c79 100644 --- a/tests/postgres_tests/models.py +++ b/tests/postgres_tests/models.py @@ -109,3 +109,7 @@ class StatTestModel(models.Model): int1 = models.IntegerField() int2 = models.IntegerField() related_field = models.ForeignKey(AggregateTestModel, null=True) + + +class NowTestModel(models.Model): + when = models.DateTimeField(null=True, default=None) diff --git a/tests/postgres_tests/test_functions.py b/tests/postgres_tests/test_functions.py new file mode 100644 index 0000000000..620b561325 --- /dev/null +++ b/tests/postgres_tests/test_functions.py @@ -0,0 +1,28 @@ +from datetime import datetime +from time import sleep + +from django.contrib.postgres.functions import TransactionNow + +from . import PostgreSQLTestCase +from .models import NowTestModel + + +class TestTransactionNow(PostgreSQLTestCase): + + def test_transaction_now(self): + """ + The test case puts everything under a transaction, so two models + updated with a short gap should have the same time. + """ + m1 = NowTestModel.objects.create() + m2 = NowTestModel.objects.create() + + NowTestModel.objects.filter(id=m1.id).update(when=TransactionNow()) + sleep(0.1) + NowTestModel.objects.filter(id=m2.id).update(when=TransactionNow()) + + m1.refresh_from_db() + m2.refresh_from_db() + + self.assertIsInstance(m1.when, datetime) + self.assertEqual(m1.when, m2.when) -- cgit v1.3