|
1 |
| -from django.contrib.auth import get_user_model |
2 |
| -from django.urls import reverse |
3 |
| -from django.utils import timezone |
4 |
| -from rest_framework import status |
5 |
| -from rest_framework.test import APITestCase |
6 |
| - |
7 |
| -from ddm.models.core import Participant, ResearchProfile, DonationProject |
8 |
| -from ddm.tests.test_participation_flow import ParticipationFlowBaseTestCase |
9 |
| -from ddm_pooled.models import PooledProject |
10 |
| -from ddm_pooled.settings import POOL_KW, PROJECT_KW |
11 |
| - |
12 |
| - |
13 |
| -User = get_user_model() |
14 |
| - |
15 |
| - |
16 |
| -class ParticipantAPITests(APITestCase): |
17 |
| - @classmethod |
18 |
| - def setUpTestData(cls): |
19 |
| - cls.user = User.objects.create_user(**{ |
20 |
| - 'username': 'u', 'password': '123', 'email': 'owner@mail.com' |
21 |
| - }) |
22 |
| - profile = ResearchProfile.objects.create(user=cls.user) |
23 |
| - project = DonationProject.objects.create( |
24 |
| - name='Base Project', slug='base', owner=profile) |
25 |
| - cls.pooled_project = PooledProject.objects.create( |
26 |
| - project=project, external_id='external_id') |
27 |
| - Participant.objects.create( |
28 |
| - project=project, |
29 |
| - external_id='abc', |
30 |
| - start_time=timezone.now(), |
31 |
| - extra_data={'pool_id': 'test_pool'} |
32 |
| - ) |
33 |
| - |
34 |
| - def test_get_participants(self): |
35 |
| - """ |
36 |
| - Ensure the correct participant information is retrieved. |
37 |
| - """ |
38 |
| - url = reverse('participant-list') |
39 |
| - data = { |
40 |
| - 'extra_data': {'pool_id': 'test_pool'}, |
41 |
| - 'external_id': '1', |
42 |
| - 'completed': False |
43 |
| - } |
44 |
| - self.client.force_authenticate(user=self.user) |
45 |
| - response = self.client.get( |
46 |
| - url, {POOL_KW: 'test_pool', PROJECT_KW: 'external_id'}, format='json') |
47 |
| - self.assertEqual(response.status_code, status.HTTP_200_OK) |
48 |
| - self.assertEqual(len(response.data), 1) |
49 |
| - self.assertCountEqual(dict(response.data[0]), data) |
50 |
| - |
51 |
| - def test_get_participants_without_poolid(self): |
52 |
| - """ |
53 |
| - Ensure query without pool_id raises 400. |
54 |
| - """ |
55 |
| - url = reverse('participant-list') |
56 |
| - self.client.force_authenticate(user=self.user) |
57 |
| - response = self.client.get(url, format='json') |
58 |
| - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) |
59 |
| - |
60 |
| - |
61 |
| -class TestPoolDonateView(ParticipationFlowBaseTestCase): |
62 |
| - |
63 |
| - @classmethod |
64 |
| - def setUpTestData(cls): |
65 |
| - super().setUpTestData() |
66 |
| - cls.pooled_project = PooledProject.objects.create( |
67 |
| - project=cls.project_base, external_id='abc') |
68 |
| - |
69 |
| - def setUp(self): |
70 |
| - super().setUp() |
71 |
| - self.initialize_project_and_session() |
72 |
| - self.participant = self.get_participant(self.project_base.pk) |
73 |
| - self.participant.current_step = 3 |
74 |
| - self.participant.save() |
75 |
| - |
76 |
| - def test_redirect_to_donation_question(self): |
77 |
| - response = self.client.get(self.debriefing_url) |
78 |
| - self.assertEqual(response.status_code, 302) |
79 |
| - self.assertRedirects( |
80 |
| - response, reverse('ddm-pool-donate', args=[self.project_base.slug])) |
81 |
| - |
82 |
| - def test_post_valid_form(self): |
83 |
| - response = self.client.post( |
84 |
| - reverse('ddm-pool-donate', args=[self.project_base.slug]), |
85 |
| - {'donation_consent': '1'} |
86 |
| - ) |
87 |
| - self.assertRedirects(response, reverse('debriefing', args=[self.project_base.slug])) |
88 |
| - self.assertEqual(response.status_code, 302) |
89 |
| - self.participant.refresh_from_db() |
90 |
| - self.assertEqual(self.participant.extra_data['pool_donate'], True) |
91 |
| - |
92 |
| - def test_post_invalid_form(self): |
93 |
| - response = self.client.post( |
94 |
| - reverse('ddm-pool-donate', args=[self.project_base.slug]), |
95 |
| - {'donation_consent': 'fubar'} |
96 |
| - ) |
97 |
| - self.assertEqual(response.status_code, 200) |
98 |
| - self.assertTemplateUsed(response, 'ddm_pooled/pool_donation_consent.html') |
99 |
| - |
100 |
| - def test_skip_donation_question(self): |
101 |
| - self.pooled_project.get_donation_consent = False |
102 |
| - self.pooled_project.save() |
103 |
| - response = self.client.get(self.debriefing_url) |
104 |
| - self.assertEqual(response.status_code, 200) |
105 |
| - self.assertTemplateUsed(response, 'ddm/public/debriefing.html') |
0 commit comments