1. from unittest import mock
    
  2. 
    
  3. from django.contrib import admin
    
  4. from django.contrib.auth.admin import UserAdmin
    
  5. from django.contrib.auth.models import User
    
  6. from django.test import TestCase, override_settings
    
  7. from django.urls import path, reverse
    
  8. 
    
  9. 
    
  10. class Router:
    
  11.     target_db = None
    
  12. 
    
  13.     def db_for_read(self, model, **hints):
    
  14.         return self.target_db
    
  15. 
    
  16.     db_for_write = db_for_read
    
  17. 
    
  18.     def allow_relation(self, obj1, obj2, **hints):
    
  19.         return True
    
  20. 
    
  21. 
    
  22. site = admin.AdminSite(name="test_adminsite")
    
  23. site.register(User, admin_class=UserAdmin)
    
  24. 
    
  25. urlpatterns = [
    
  26.     path("admin/", site.urls),
    
  27. ]
    
  28. 
    
  29. 
    
  30. @override_settings(ROOT_URLCONF=__name__, DATABASE_ROUTERS=["%s.Router" % __name__])
    
  31. class MultiDatabaseTests(TestCase):
    
  32.     databases = {"default", "other"}
    
  33. 
    
  34.     @classmethod
    
  35.     def setUpTestData(cls):
    
  36.         cls.superusers = {}
    
  37.         for db in cls.databases:
    
  38.             Router.target_db = db
    
  39.             cls.superusers[db] = User.objects.create_superuser(
    
  40.                 username="admin",
    
  41.                 password="something",
    
  42.                 email="[email protected]",
    
  43.             )
    
  44. 
    
  45.     @mock.patch("django.contrib.auth.admin.transaction")
    
  46.     def test_add_view(self, mock):
    
  47.         for db in self.databases:
    
  48.             with self.subTest(db_connection=db):
    
  49.                 Router.target_db = db
    
  50.                 self.client.force_login(self.superusers[db])
    
  51.                 self.client.post(
    
  52.                     reverse("test_adminsite:auth_user_add"),
    
  53.                     {
    
  54.                         "username": "some_user",
    
  55.                         "password1": "helloworld",
    
  56.                         "password2": "helloworld",
    
  57.                     },
    
  58.                 )
    
  59.                 mock.atomic.assert_called_with(using=db)