I am creating a web application which has a POST
endpoint, that does two things:
- Saves the
POST
ed data (a university review) in the database. - Redirects the user to an overview page.
Here is the code for it:
JavaScript
x
9
1
if request.method == 'POST':
2
review = Review(university=university,
3
user=User.objects.get(pk=1),
4
summary=request.POST['summary'])
5
6
review.save()
7
8
return HttpResponseRedirect(reverse('university_overview', args=(university_id,)))
9
I haven’t yet implemented passing the user data to the endpoint, and that’s why I’m saving everything under the user with pk=1
.
My test is as follows:
JavaScript
1
16
16
1
class UniversityAddReviewTestCase(TestCase):
2
def setUp(self):
3
user = User.objects.create(username="username", password="password", email="email")
4
university = University.objects.create(name="Oxford University", country="UK", info="Meh", rating="9")
5
Review.objects.create(university=university, summary="Very nice", user_id=user.id)
6
Review.objects.create(university=university, summary="Very bad", user_id=user.id)
7
8
new_review = {
9
'summary': 'It was okay.'
10
}
11
12
self.response = Client().post('/%s/reviews/add' % university.id, new_review)
13
14
def test_database_updated(self):
15
self.assertEqual(len(Review.objects.all()), 3)
16
The result is this:
JavaScript
1
8
1
File ".../core/views.py", line 20, in detail
2
user=User.objects.get(pk=1),
3
File ".../ENV/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method
4
return getattr(self.get_queryset(), name)(*args, **kwargs)
5
File ".../ENV/lib/python3.6/site-packages/django/db/models/query.py", line 403, in get
6
self.model._meta.object_name
7
django.contrib.auth.models.DoesNotExist: User matching query does not exist.
8
Why is this happening? I know the user I’m creating has a pk=1
, as when I actually print it during the test it’s 1.
Advertisement
Answer
pk
is defined by the database. Something could make it not equal to 1 in your test.
Try this in your setUp method
JavaScript
1
8
1
user = User.objects.create_user(
2
username="username",
3
password="password",
4
email="test@example.com",
5
id=1
6
)
7
assert user.pk == 1
8