1. import uuid
    
  2. from datetime import datetime
    
  3. from time import sleep
    
  4. 
    
  5. from django.contrib.postgres.functions import RandomUUID, TransactionNow
    
  6. 
    
  7. from . import PostgreSQLTestCase
    
  8. from .models import NowTestModel, UUIDTestModel
    
  9. 
    
  10. 
    
  11. class TestTransactionNow(PostgreSQLTestCase):
    
  12.     def test_transaction_now(self):
    
  13.         """
    
  14.         The test case puts everything under a transaction, so two models
    
  15.         updated with a short gap should have the same time.
    
  16.         """
    
  17.         m1 = NowTestModel.objects.create()
    
  18.         m2 = NowTestModel.objects.create()
    
  19. 
    
  20.         NowTestModel.objects.filter(id=m1.id).update(when=TransactionNow())
    
  21.         sleep(0.1)
    
  22.         NowTestModel.objects.filter(id=m2.id).update(when=TransactionNow())
    
  23. 
    
  24.         m1.refresh_from_db()
    
  25.         m2.refresh_from_db()
    
  26. 
    
  27.         self.assertIsInstance(m1.when, datetime)
    
  28.         self.assertEqual(m1.when, m2.when)
    
  29. 
    
  30. 
    
  31. class TestRandomUUID(PostgreSQLTestCase):
    
  32.     def test_random_uuid(self):
    
  33.         m1 = UUIDTestModel.objects.create()
    
  34.         m2 = UUIDTestModel.objects.create()
    
  35.         UUIDTestModel.objects.update(uuid=RandomUUID())
    
  36.         m1.refresh_from_db()
    
  37.         m2.refresh_from_db()
    
  38.         self.assertIsInstance(m1.uuid, uuid.UUID)
    
  39.         self.assertNotEqual(m1.uuid, m2.uuid)