feat: mentor invite
This commit is contained in:
parent
86d3644ca6
commit
b75737468c
|
|
@ -100,6 +100,35 @@ class LearningMentorInvitationTest(APITestCase):
|
||||||
[{"id": str(MentorInvitation.objects.get(email=email).id), "email": email}],
|
[{"id": str(MentorInvitation.objects.get(email=email).id), "email": email}],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_delete_invitation(self) -> None:
|
||||||
|
# GIVEN
|
||||||
|
self.client.force_login(self.participant)
|
||||||
|
participant_cs_user = add_course_session_user(
|
||||||
|
self.course_session,
|
||||||
|
self.participant,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
email = "test@exmaple.com"
|
||||||
|
|
||||||
|
invitation = MentorInvitation.objects.create(
|
||||||
|
participant=participant_cs_user, email=email
|
||||||
|
)
|
||||||
|
|
||||||
|
delete_url = reverse(
|
||||||
|
"delete_invitation",
|
||||||
|
kwargs={
|
||||||
|
"course_session_id": self.course_session.id,
|
||||||
|
"invitation_id": invitation.id,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
response = self.client.delete(delete_url)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
self.assertFalse(MentorInvitation.objects.filter(id=invitation.id).exists())
|
||||||
|
|
||||||
def test_accept_invitation(self) -> None:
|
def test_accept_invitation(self) -> None:
|
||||||
# GIVEN
|
# GIVEN
|
||||||
invitee = create_user("invitee")
|
invitee = create_user("invitee")
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,10 @@ urlpatterns = [
|
||||||
path("summary", views.mentor_summary, name="mentor_summary"),
|
path("summary", views.mentor_summary, name="mentor_summary"),
|
||||||
path("invitations", views.list_invitations, name="list_invitations"),
|
path("invitations", views.list_invitations, name="list_invitations"),
|
||||||
path("invitations/create", views.create_invitation, name="create_invitation"),
|
path("invitations/create", views.create_invitation, name="create_invitation"),
|
||||||
|
path(
|
||||||
|
"invitations/<uuid:invitation_id>/delete",
|
||||||
|
views.delete_invitation,
|
||||||
|
name="delete_invitation",
|
||||||
|
),
|
||||||
path("invitations/accept", views.accept_invitation, name="accept_invitation"),
|
path("invitations/accept", views.accept_invitation, name="accept_invitation"),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
from uuid import UUID
|
||||||
|
|
||||||
from rest_framework import permissions, status
|
from rest_framework import permissions, status
|
||||||
from rest_framework.decorators import api_view, permission_classes
|
from rest_framework.decorators import api_view, permission_classes
|
||||||
from rest_framework.generics import get_object_or_404
|
from rest_framework.generics import get_object_or_404
|
||||||
|
|
@ -60,11 +62,25 @@ def list_invitations(request, course_session_id: int):
|
||||||
course_session_user = get_object_or_404(
|
course_session_user = get_object_or_404(
|
||||||
CourseSessionUser, user=request.user, course_session=course_session
|
CourseSessionUser, user=request.user, course_session=course_session
|
||||||
)
|
)
|
||||||
snippets = MentorInvitation.objects.filter(participant=course_session_user)
|
invitations = MentorInvitation.objects.filter(participant=course_session_user)
|
||||||
serializer = InvitationSerializer(snippets, many=True)
|
serializer = InvitationSerializer(invitations, many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
|
@api_view(["DELETE"])
|
||||||
|
@permission_classes([IsAuthenticated, CourseSessionMember])
|
||||||
|
def delete_invitation(request, course_session_id: int, invitation_id: UUID):
|
||||||
|
course_session = get_object_or_404(CourseSession, id=course_session_id)
|
||||||
|
course_session_user = get_object_or_404(
|
||||||
|
CourseSessionUser, user=request.user, course_session=course_session
|
||||||
|
)
|
||||||
|
get_object_or_404(
|
||||||
|
MentorInvitation, id=invitation_id, participant=course_session_user
|
||||||
|
).delete()
|
||||||
|
|
||||||
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
@api_view(["POST"])
|
@api_view(["POST"])
|
||||||
@permission_classes([IsAuthenticated, CourseSessionMember])
|
@permission_classes([IsAuthenticated, CourseSessionMember])
|
||||||
def create_invitation(request, course_session_id: int):
|
def create_invitation(request, course_session_id: int):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue