Add API for sending emails for signupees

This commit is contained in:
Aarni Halinen
2020-11-07 21:32:49 +02:00
parent 00c6920c8a
commit b1921d4926
4 changed files with 45 additions and 3 deletions
+3 -2
View File
@@ -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
)
+15
View File
@@ -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)
+4
View File
@@ -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
View File
@@ -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