Skip to content

Commit e51bc59

Browse files
committed
Ajout d'un endpoint pour les DisabledDoraFormDIStructure
1 parent a64c613 commit e51bc59

5 files changed

Lines changed: 92 additions & 2 deletions

File tree

back/dora/emplois/serializers.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from dora.orientations.models import Orientation, OrientationStatus
99
from dora.services.models import Service
10+
from dora.structures.models import DisabledDoraFormDIStructure
1011

1112
COACH_ORIENTATION_MODES_ORDER = {
1213
"formulaire-dora": 0,
@@ -206,3 +207,9 @@ def get_average_orientation_response_delay_days(self, obj):
206207
if avg_delay is None:
207208
return None
208209
return round(avg_delay.total_seconds() / 86400)
210+
211+
212+
class DisabledDoraFormDIStructureSerializer(serializers.ModelSerializer):
213+
class Meta:
214+
model = DisabledDoraFormDIStructure
215+
fields = ["source", "structure_id"]

back/dora/emplois/tests/test_emplois_views.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,52 @@ def test_services_api_detail_queries_are_bounded(
9090
)
9191

9292
assert response.status_code == 200
93+
94+
95+
def test_disabled_dora_form_di_structures_api_requires_authentication(api_client):
96+
response = api_client.get(reverse("emplois:disabled-dora-form-di-structure-list"))
97+
98+
assert response.status_code == 401
99+
100+
101+
def test_disabled_dora_form_di_structures_api_requires_emplois_email(api_client):
102+
user = baker.make("users.User", is_valid=True, email="other@example.com")
103+
api_client.force_authenticate(user=user)
104+
105+
response = api_client.get(reverse("emplois:disabled-dora-form-di-structure-list"))
106+
107+
assert response.status_code == 403
108+
109+
110+
@pytest.mark.parametrize(
111+
"method,use_detail,data",
112+
[
113+
("post", False, {"source": "foobar", "structure_id": "structure-1"}),
114+
("patch", True, {"comment": "Commentaire"}),
115+
("delete", True, None),
116+
],
117+
ids=["post", "patch", "delete"],
118+
)
119+
def test_disabled_dora_form_di_structures_api_is_read_only(
120+
emplois_user,
121+
api_client,
122+
method,
123+
use_detail,
124+
data,
125+
):
126+
item = baker.make("structures.DisabledDoraFormDIStructure")
127+
128+
if use_detail:
129+
url = reverse(
130+
"emplois:disabled-dora-form-di-structure-detail", kwargs={"pk": item.id}
131+
)
132+
else:
133+
url = reverse("emplois:disabled-dora-form-di-structure-list")
134+
135+
client_method = getattr(api_client, method)
136+
if data is not None:
137+
response = client_method(url, data=data)
138+
else:
139+
response = client_method(url)
140+
141+
assert response.status_code == 403

back/dora/emplois/tests/test_serializers.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
from model_bakery import baker
77

88
from dora.core.test_utils import make_orientation, make_published_service
9-
from dora.emplois.serializers import ServiceSerializer
9+
from dora.emplois.serializers import (
10+
DisabledDoraFormDIStructureSerializer,
11+
ServiceSerializer,
12+
)
1013
from dora.emplois.views import PREFETCH_RELATED_SERVICE_LIST
1114
from dora.orientations.models import OrientationStatus
1215
from dora.services.models import (
@@ -526,3 +529,19 @@ def test_service_serializer_does_not_add_queries_when_relations_prefetched(
526529

527530
with django_assert_max_num_queries(0):
528531
ServiceSerializer(service).data
532+
533+
534+
def test_disabled_dora_form_di_structure_serializer_fields():
535+
item = baker.make(
536+
"structures.DisabledDoraFormDIStructure",
537+
source="foobar",
538+
structure_id="structure-1",
539+
comment="Commentaire",
540+
)
541+
542+
data = DisabledDoraFormDIStructureSerializer(item).data
543+
544+
assert data == {
545+
"source": "foobar",
546+
"structure_id": "structure-1",
547+
}

back/dora/emplois/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55

66
router = SimpleRouter()
77
router.register(r"services", views.ServiceViewSet, basename="service")
8+
router.register(
9+
r"disabled-dora-form-di-structures",
10+
views.DisabledDoraFormDIStructureViewSet,
11+
basename="disabled-dora-form-di-structure",
12+
)
813

914
urlpatterns = [
1015
path("", include(router.urls)),

back/dora/emplois/views.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
from dora.core.pagination import OptionalPageNumberPagination
88
from dora.orientations.models import Orientation, OrientationStatus
99
from dora.services.models import Service
10+
from dora.structures.models import DisabledDoraFormDIStructure
1011

11-
from .serializers import ServiceSerializer
12+
from .serializers import DisabledDoraFormDIStructureSerializer, ServiceSerializer
1213

1314
_ANSWERED_ORIENTATIONS_QUERYSET = Orientation.objects.filter(
1415
status__in=[OrientationStatus.ACCEPTED, OrientationStatus.REJECTED],
@@ -56,3 +57,12 @@ def get_queryset(self):
5657
.prefetch_related(*PREFETCH_RELATED_SERVICE_LIST)
5758
.order_by("pk")
5859
)
60+
61+
62+
class DisabledDoraFormDIStructureViewSet(viewsets.ReadOnlyModelViewSet):
63+
versioning_class = NamespaceVersioning
64+
permission_classes = (APIPermission,)
65+
serializer_class = DisabledDoraFormDIStructureSerializer
66+
renderer_classes = (JSONRenderer,)
67+
pagination_class = OptionalPageNumberPagination
68+
queryset = DisabledDoraFormDIStructure.objects.all().order_by("pk")

0 commit comments

Comments
 (0)