Reputation: 2305
The test:
1) login with a user
2) favourite a post
class FormTest(TestCase):
def setUp(self):
self.user = ProjectUser.objects.create(username='testUser',
email='[email protected]')
self.user.set_password('testPassword')
self.user.save()
self.client = Client()
self.factory = RequestFactory()
def sometest(self):
self.client.login(username='testUser', password='testPassword')
user = auth.get_user(self.client)
assert user.is_authenticated
new_object_2 = SampleModel.objects.create(unique_id='123456', name='sample')
request = self.factory.post(reverse('page1:favourite_post', kwargs={'fav_id': new_object_2.id}))
response = favourite_post(request, new_object_2.id)
print(response)
My url file is
path('favourite_post/<int:fav_id>', views.favourite_post, name='favourite_post'),
The views.py is
def favourite_post(request, fav_id):
post = get_object_or_404(Post, id=fav_id)
if request.method == 'POST':
if post.favourite.filter(id=request.user.id).exists():
post.favourite.remove(request.user)
else:
post.favourite.add(request.user)
return HttpResponseRedirect(reverse('page:some_page', args=(fav_id,)))
The error I get is
AttributeError: 'WSGIRequest' object has no attribute 'user'
Upvotes: 0
Views: 902
Reputation: 599610
Don't use factory for this, that's for testing views specifically without middleware. You need to use the client, which you already used to log in.
request = self.client.post(reverse('page1:favourite_post'...))
Note, you don't need to create the client in the setUp method, that is done automatically.
Upvotes: 1