Add API for sending emails for signupees
This commit is contained in:
@@ -40,14 +40,15 @@ CBOX_SCHEMA = {
|
||||
}
|
||||
|
||||
|
||||
def createSignupForm(name="Form1", start_time=timezone.now(), end_time=month_from_now(), questions=ALL_QUESTION_TYPES, schema=ALL_QUESTIONS_SCHEMA, visible=True):
|
||||
def createSignupForm(name="Form1", start_time=timezone.now(), end_time=month_from_now(), questions=ALL_QUESTION_TYPES, schema=ALL_QUESTIONS_SCHEMA, visible=True, quota=1):
|
||||
return SignupForm.objects.create(
|
||||
title=name,
|
||||
start_time=start_time,
|
||||
end_time=end_time,
|
||||
questions=questions,
|
||||
visible=visible,
|
||||
schema=schema
|
||||
schema=schema,
|
||||
quota=quota
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -82,3 +82,18 @@ class SignupTestCase(APITestCase):
|
||||
@skip("NotImplemented")
|
||||
def test_delete_signup_token(self):
|
||||
pass
|
||||
|
||||
# TODO: Use some mocking library and check that mailjet is actually called
|
||||
def test_signupee_sendemail(self):
|
||||
form = self.signupForm
|
||||
emailURL = f"/api/signupForm/{form.id}/sendemail/"
|
||||
payload = {
|
||||
"subject": "Email subject",
|
||||
"content": "Markdown",
|
||||
"mode": "actual"
|
||||
}
|
||||
no_auth_response = self.client.post(emailURL, payload, format="json")
|
||||
self.assertEqual(no_auth_response.status_code, status.HTTP_401_UNAUTHORIZED)
|
||||
self.client.force_authenticate(user=self.authClient)
|
||||
response = self.client.post(emailURL, payload, format="json")
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
|
||||
@@ -101,3 +101,7 @@ def send_signup_email(to, subject, id, uuid, content):
|
||||
)
|
||||
|
||||
return send_email(to, subject, message, True)
|
||||
|
||||
def admin_send_email_signupees(list, subject, content):
|
||||
for to in list:
|
||||
send_email(to, subject, markdown.markdown(content), True)
|
||||
|
||||
+23
-1
@@ -21,7 +21,7 @@ from jsonschema.exceptions import ValidationError
|
||||
|
||||
from webapp.models import *
|
||||
from webapp.serializers import *
|
||||
from webapp.utils import decode_base64_file
|
||||
from webapp.utils import admin_send_email_signupees, decode_base64_file
|
||||
|
||||
|
||||
class SignupPermission(BasePermission):
|
||||
@@ -105,6 +105,28 @@ class SignupFormViewSet(ModelViewSet):
|
||||
return SignupForm.objects.filter(visible=True, end_time__gt=timezone.now()).order_by('start_time')
|
||||
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
def sendemail(self, request, pk=None, *args, **kwargs):
|
||||
subject = request.data["subject"]
|
||||
content = request.data["content"]
|
||||
mode = request.data["mode"]
|
||||
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
filter = {'pk': pk}
|
||||
signupForm = get_object_or_404(queryset, **filter)
|
||||
if (mode == "all"):
|
||||
admin_send_email_signupees(signupForm.signups, subject, content)
|
||||
return JsonResponse(status=201, data={"message": "Email sent"})
|
||||
elif (mode == "actual"):
|
||||
admin_send_email_signupees(signupForm.signups, subject, content)
|
||||
return JsonResponse(status=201, data={"message": "Email sent"})
|
||||
elif (mode == "reserved"):
|
||||
admin_send_email_signupees(signupForm.signups, subject, content)
|
||||
return JsonResponse(status=201, data={"message": "Email sent"})
|
||||
else:
|
||||
return JsonResponse(status=400, data={"error": f"Bad mode '{mode}'"})
|
||||
|
||||
|
||||
class SignupViewSet(ModelViewSet):
|
||||
queryset = Signup.objects.filter(deleted=False)
|
||||
serializer_class = SignupSerializer
|
||||
|
||||
Reference in New Issue
Block a user