|
2 | 2 | from django.contrib import auth
|
3 | 3 | from django.contrib.auth import get_user_model
|
4 | 4 | from django.contrib.auth.models import Permission
|
| 5 | +from django.core import mail |
5 | 6 | from django.test import TestCase
|
6 | 7 | from django.urls import reverse
|
7 | 8 | from openwisp_utils.tests import AssertNumQueriesSubTestMixin
|
@@ -500,21 +501,47 @@ def test_get_user_list_api(self):
|
500 | 501 | self.assertEqual(r.data['count'], 1)
|
501 | 502 |
|
502 | 503 | def test_create_user_list_api(self):
|
503 |
| - self.assertEqual(User.objects.count(), 1) |
504 |
| - path = reverse('users:user_list') |
505 |
| - data = { |
506 |
| - 'username': 'tester', |
507 |
| - 'email': 'tester@test.com', |
508 |
| - 'password': 'password123', |
509 |
| - } |
510 |
| - r = self.client.post(path, data, content_type='application/json') |
511 |
| - self.assertEqual(r.status_code, 201) |
512 |
| - self.assertEqual(User.objects.count(), 2) |
513 |
| - self.assertEqual(r.data['groups'], []) |
514 |
| - self.assertEqual(r.data['organization_users'], []) |
515 |
| - self.assertEqual(r.data['username'], 'tester') |
516 |
| - self.assertEqual(r.data['email'], 'tester@test.com') |
517 |
| - self.assertEqual(r.data['is_active'], True) |
| 504 | + with self.subTest('create user, standard case'): |
| 505 | + mail_sent = len(mail.outbox) |
| 506 | + self.assertEqual(User.objects.count(), 1) |
| 507 | + path = reverse('users:user_list') |
| 508 | + data = { |
| 509 | + 'username': 'tester', |
| 510 | + 'email': 'tester@test.com', |
| 511 | + 'password': 'password123', |
| 512 | + } |
| 513 | + r = self.client.post(path, data, content_type='application/json') |
| 514 | + self.assertEqual(r.status_code, 201) |
| 515 | + self.assertEqual(User.objects.count(), 2) |
| 516 | + self.assertEqual(r.data['groups'], []) |
| 517 | + self.assertEqual(r.data['organization_users'], []) |
| 518 | + self.assertEqual(r.data['username'], 'tester') |
| 519 | + self.assertEqual(r.data['email'], 'tester@test.com') |
| 520 | + self.assertEqual(r.data['is_active'], True) |
| 521 | + # ensure email address object is created but not verified |
| 522 | + user = User.objects.filter(email=data['email']).first() |
| 523 | + self.assertIsNotNone(user) |
| 524 | + self.assertEqual(user.emailaddress_set.count(), 1) |
| 525 | + email = user.emailaddress_set.first() |
| 526 | + self.assertFalse(email.verified) |
| 527 | + self.assertFalse(email.primary) |
| 528 | + # ensure the email verification link is sent |
| 529 | + self.assertEqual(len(mail.outbox), mail_sent + 1) |
| 530 | + |
| 531 | + with self.subTest('create user and flag email as verified'): |
| 532 | + mail_sent = len(mail.outbox) |
| 533 | + User.objects.filter(email=data['email']).delete() |
| 534 | + data['email_verified'] = True |
| 535 | + r = self.client.post(path, data, content_type='application/json') |
| 536 | + self.assertEqual(r.status_code, 201) |
| 537 | + user = User.objects.filter(email=data['email']).first() |
| 538 | + self.assertIsNotNone(user) |
| 539 | + self.assertEqual(user.emailaddress_set.count(), 1) |
| 540 | + email = user.emailaddress_set.first() |
| 541 | + self.assertTrue(email.verified) |
| 542 | + self.assertTrue(email.primary) |
| 543 | + # ensure the email verification link is not sent |
| 544 | + self.assertEqual(len(mail.outbox), mail_sent) |
518 | 545 |
|
519 | 546 | def test_post_with_empty_form_api_400(self):
|
520 | 547 | path = reverse('users:user_list')
|
|
0 commit comments