• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

gcivil-nyu-org / wed-fall24-team1 / #37

06 Nov 2024 08:02PM UTC coverage: 75.359%. Remained the same
#37

push

coveralls-python

web-flow
#101 As a Service Provider, I want to respond to reviews to address feedback or provide additional information (#121)

40 of 109 new or added lines in 6 files covered. (36.7%)

119 existing lines in 6 files now uncovered.

1208 of 1603 relevant lines covered (75.36%)

0.75 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.69
/src/services/tests.py
1
# from django.test import TestCase
2
import uuid
1✔
3
from decimal import Decimal
1✔
4
from unittest.mock import patch
1✔
5

6
from accounts.models import CustomUser
1✔
7
from django.test import TestCase, Client
1✔
8
from django.urls import reverse
1✔
9

10
from public_service_finder.utils.enums.service_status import ServiceStatus
1✔
11

12
from .forms import ServiceForm, DescriptionFormSet
1✔
13
from .models import ServiceDTO
1✔
14
from .repositories import ServiceRepository
1✔
15

16

17
class ServiceViewsTestCase(TestCase):
1✔
18
    def setUp(self):
1✔
19
        self.client = Client()
1✔
20
        self.service_provider = CustomUser.objects.create_user(
1✔
21
            username="provider",
22
            email="provider@email.com",
23
            password="testpass123",
24
            user_type="service_provider",
25
        )
26
        self.regular_user = CustomUser.objects.create_user(
1✔
27
            username="regular",
28
            email="regular@email.com",
29
            password="testpass123",
30
            user_type="user",
31
        )
32
        self.service_repo = ServiceRepository()
1✔
33

34
    def tearDown(self):
1✔
35
        super().tearDown()
1✔
36
        CustomUser.objects.all().delete()
1✔
37

38
    def test_service_list_view(self):
1✔
39
        self.client.login(username="provider", password="testpass123")
1✔
40
        with patch.object(ServiceRepository, "get_services_by_provider") as mock_get:
1✔
41
            mock_get.return_value = [
1✔
42
                ServiceDTO(
43
                    id=str(uuid.uuid4()),
44
                    name="Service 1",
45
                    address="Addr1",
46
                    category="Metal Health Center",
47
                    provider_id=str(self.service_provider.id),
48
                    latitude=None,
49
                    longitude=None,
50
                    ratings=None,
51
                    description=None,
52
                    service_created_timestamp="2022-01-01T12:00:00Z",
53
                    service_status=ServiceStatus.APPROVED.value,
54
                    service_approved_timestamp="2022-01-01T12:00:00Z",
55
                ),
56
                ServiceDTO(
57
                    id=str(uuid.uuid4()),
58
                    name="Service 2",
59
                    address="Addr2",
60
                    category="Food Pantry",
61
                    provider_id=str(self.service_provider.id),
62
                    ratings=None,
63
                    latitude=None,
64
                    longitude=None,
65
                    description=None,
66
                    service_created_timestamp="2022-01-01T12:00:00Z",
67
                    service_status=ServiceStatus.APPROVED.value,
68
                    service_approved_timestamp="2022-01-01T12:00:00Z",
69
                ),
70
            ]
71
            response = self.client.get(reverse("services:list"))
1✔
72
            self.assertEqual(response.status_code, 200)
1✔
73
            self.assertTemplateUsed(response, "service_list.html")
1✔
74
            self.assertEqual(len(response.context["services"]), 2)
1✔
75

76
    def test_service_list_view_permission_denied(self):
1✔
77
        self.client.login(username="regular", password="testpass123")
1✔
78
        resp = self.client.get(reverse("services:list"))
1✔
79
        self.assertEqual(resp.status_code, 403)
1✔
80

81
    def test_service_create_view_get(self):
1✔
82
        self.client.login(username="provider", password="testpass123")
1✔
83
        response = self.client.get(reverse("services:create"))
1✔
84
        self.assertEqual(response.status_code, 200)
1✔
85
        self.assertTemplateUsed(response, "service_form.html")
1✔
86
        self.assertIsInstance(response.context["form"], ServiceForm)
1✔
87
        self.assertIsInstance(
1✔
88
            response.context["description_formset"], DescriptionFormSet
89
        )
90

91
    def test_service_create_view_post_success(self):
1✔
92
        self.client.login(username="provider", password="testpass123")
1✔
93
        data = {
1✔
94
            "name": "New Service",
95
            "address": "123 Test St",
96
            "latitude": "40.7128",
97
            "longitude": "-74.0060",
98
            "category": "Mental Health Center",
99
            "description-0-key": "hours",
100
            "description-0-value": "9-5",
101
            "description-TOTAL_FORMS": "1",
102
            "description-INITIAL_FORMS": "0",
103
            "description-MIN_NUM_FORMS": "0",
104
            "description-MAX_NUM_FORMS": "1000",
105
        }
106
        with patch.object(ServiceRepository, "create_service") as mock_create:
1✔
107
            mock_create.return_value = True
1✔
108
            response = self.client.post(reverse("services:create"), data)
1✔
109
            self.assertRedirects(response, reverse("services:list"))
1✔
110

111
    def test_service_edit_view_get(self):
1✔
112
        self.client.login(username="provider", password="testpass123")
1✔
113
        service_id = str(uuid.uuid4())
1✔
114
        with patch.object(ServiceRepository, "get_service") as mock_get:
1✔
115
            mock_get.return_value = ServiceDTO(
1✔
116
                id=service_id,
117
                name="Test Service",
118
                provider_id=str(self.service_provider.id),
119
                category="MENTAL",
120
                address="123 Test St",
121
                latitude=Decimal(40.71),
122
                longitude=Decimal(-74.32),
123
                ratings=Decimal("4.5"),
124
                description={"hours": "9-5"},
125
                service_created_timestamp="2022-01-01T12:00:00Z",
126
                service_status=ServiceStatus.APPROVED.value,
127
                service_approved_timestamp="2022-01-01T12:00:00Z",
128
            )
129
            response = self.client.get(reverse("services:edit", args=[service_id]))
1✔
130
            self.assertEqual(response.status_code, 200)
1✔
131
            self.assertTemplateUsed(response, "service_form.html")
1✔
132

133
    def test_service_delete_view_get(self):
1✔
134
        self.client.login(username="provider", password="testpass123")
1✔
135
        service_id = str(uuid.uuid4())
1✔
136
        with patch.object(ServiceRepository, "get_service") as mock_get:
1✔
137
            mock_get.return_value = ServiceDTO(
1✔
138
                id=service_id,
139
                name="Test Service",
140
                address="Test Address",
141
                latitude=None,
142
                longitude=None,
143
                ratings=None,
144
                description=None,
145
                category="MENTAL",
146
                provider_id=str(self.service_provider.id),
147
                service_created_timestamp="2022-01-01T12:00:00Z",
148
                service_status=ServiceStatus.APPROVED.value,
149
                service_approved_timestamp="2022-01-01T12:00:00Z",
150
            )
151
            response = self.client.post(reverse("services:delete", args=[service_id]))
1✔
152
            self.assertEqual(response.status_code, 302)
1✔
153

154
    def test_service_delete_view_post(self):
1✔
155
        self.client.login(username="provider", password="testpass123")
1✔
156
        service_id = str(uuid.uuid4())
1✔
157
        with patch.object(ServiceRepository, "get_service") as mock_get, patch.object(
1✔
158
            ServiceRepository, "delete_service"
159
        ) as mock_delete:
160
            mock_get.return_value = ServiceDTO(
1✔
161
                id=service_id,
162
                name="Test Service",
163
                address="Test Address",
164
                latitude=None,
165
                longitude=None,
166
                ratings=None,
167
                description=None,
168
                category="MENTAL",
169
                provider_id=str(self.service_provider.id),
170
                service_created_timestamp="2022-01-01T12:00:00Z",
171
                service_status=ServiceStatus.APPROVED.value,
172
                service_approved_timestamp="2022-01-01T12:00:00Z",
173
            )
174
            mock_delete.return_value = True
1✔
175
            response = self.client.post(reverse("services:delete", args=[service_id]))
1✔
176
            self.assertRedirects(response, reverse("services:list"))
1✔
177

178
    def test_service_delete_view_permission_denied(self):
1✔
179
        self.client.login(username="regular", password="testpass123")
1✔
180
        service_id = str(uuid.uuid4())
1✔
181
        resp = self.client.get(reverse("services:delete", args=[service_id]))
1✔
182
        self.assertEqual(resp.status_code, 403)
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc