Форум сайта python.su
В одной из admin.ModelAdmin при сохраненни модели используется request.user (ничего экзотического, просто сохраняет создателя объекта и последнего редактировавшего).
Хотелось бы проверить данную функцию.
К сожалению, в Client не предусмотрено добавление аттрибуда user, даже после выполнения force_login
Попытка сделать
setattr(response.request, 'user', self.superuser)
File “tests.py”, line 47, in test_create_maillistПопытка протестировать с помощью RequestFactory и добавления пользователя:
setattr(response.request, ‘user’,self.superuser)
AttributeError: ‘dict’ object has no attribute ‘user’
request = self.factory.get(myurl)
request.user = self.superuser
create = ModelAdmin(MyModel, admin.site).add_view(request)
Офлайн
ElapheНу дык, если это dict, то очевидно, что делать надо как-то так
AttributeError: ‘dict’ object has no attribute ‘user’
response.request['user'] = self.superuser
Офлайн
Увы, не поможет. Тогда он вьюхой не будет нормально извлекаться, т.к. вьюха берет юзера, как аттрибут, а не как значение словаря.
Офлайн
from django.contrib.auth.models import AnonymousUser, User from django.test import TestCase, RequestFactory from .views import MyView, my_view class SimpleTest(TestCase): def setUp(self): # Every test needs access to the request factory. self.factory = RequestFactory() self.user = User.objects.create_user( username='jacob', email='jacob@…', password='top_secret') def test_details(self): # Create an instance of a GET request. request = self.factory.get('/customer/details') # Recall that middleware are not supported. You can simulate a # logged-in user by setting request.user manually. request.user = self.user # Or you can simulate an anonymous user by setting request.user to # an AnonymousUser instance. request.user = AnonymousUser() # Test my_view() as if it were deployed at /customer/details response = my_view(request) # Use this syntax for class-based views. response = MyView.as_view()(request) self.assertEqual(response.status_code, 200)
Офлайн
Я при использовании RequestFactory пользователь не добавляется, см. верхний пост.
Объект создается, но поле creator и editor пустые.
Офлайн
ElapheПокажите код
Elaphe
Офлайн
import random from django.test import TestCase, Client, RequestFactory from django.contrib.auth import get_user_model from django.shortcuts import reverse from django.contrib import admin from rest_framework.test import APIClient from mirror.core import fixtures from mirror.maillists import models as maillist_models from mirror.maillists import admin as maillist_admin from mirror.clients import models as client_models from mirror.users.management.commands import init_core User = get_user_model() class MaillistTestCase(TestCase): @classmethod def setUpClass(cls): super(MaillistTestCase, cls).setUpClass() cls.cilent = Client() cls.factory = RequestFactory() apiclient = APIClient() command = init_core.Command() superuser_email = 'system{}@email.test'.format(str(random.randint(0, 10 ** 5))) command.handle(superuser_email=superuser_email) cls.superuser = User.objects.get(email=superuser_email) #create first user shopper_register_data, cls.shopper_login_data = fixtures.get_shopper_data() response = apiclient.post(reverse('api:user-list'), data=shopper_register_data) cls.shopper = response.data cls.maillists = maillist_models.Maillist.objects.all() def test_create_maillist(self): self.client.force_login(self.superuser) maillist_data = fixtures.get_maillist_data(self.shopper['user_id']) response = self.client.get(reverse('admin:maillists_maillist_add')) self.assertEqual(response.status_code, 200) self.client.force_login(self.superuser) response = self.factory.post(reverse('admin:maillists_maillist_add'), data=maillist_data) response.user = self.superuser reply = maillist_admin.MaillistAdmin(maillist_models.Maillist, admin.site) print(reply.add_view(response)) #maillist created self.assertEqual(self.maillists.count(), 1) maillist = self.maillists.first() #creator added to maillist print('creator', maillist.creator) print('editor', maillist.editor) print(self.superuser.id)
Офлайн
Elaphe
Вы меня извините, но я не могу понять, где и что вы создаете. Более того, мне не очень понятно, зачем вообще тестировать админку, то есть что именно вы тестируете.
Офлайн