test_admin_multidb.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from unittest import mock
  2. from django.conf.urls import url
  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.db import connections
  7. from django.test import TestCase, override_settings
  8. from django.urls import reverse
  9. class Router:
  10. target_db = None
  11. def db_for_read(self, model, **hints):
  12. return self.target_db
  13. db_for_write = db_for_read
  14. site = admin.AdminSite(name='test_adminsite')
  15. site.register(User, admin_class=UserAdmin)
  16. urlpatterns = [
  17. url(r'^admin/', site.urls),
  18. ]
  19. @override_settings(ROOT_URLCONF=__name__, DATABASE_ROUTERS=['%s.Router' % __name__])
  20. class MultiDatabaseTests(TestCase):
  21. multi_db = True
  22. @classmethod
  23. def setUpTestData(cls):
  24. cls.superusers = {}
  25. for db in connections:
  26. Router.target_db = db
  27. cls.superusers[db] = User.objects.create_superuser(
  28. username='admin', password='something', email='test@test.org',
  29. )
  30. @mock.patch('django.contrib.auth.admin.transaction')
  31. def test_add_view(self, mock):
  32. for db in connections:
  33. with self.subTest(db_connection=db):
  34. Router.target_db = db
  35. self.client.force_login(self.superusers[db])
  36. self.client.post(reverse('test_adminsite:auth_user_add'), {
  37. 'username': 'some_user',
  38. 'password1': 'helloworld',
  39. 'password2': 'helloworld',
  40. })
  41. mock.atomic.assert_called_with(using=db)