SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit e0203c0b authored by Geert Kapteijns's avatar Geert Kapteijns
Browse files

Make request keyword arg of RequestThesisLinkForm and VetThesisLinkForm instead of user

Change all involved tests. Start moving email to templates.
parent 063eb56f
No related branches found
No related tags found
No related merge requests found
from django import forms from django import forms
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from django.urls import reverse
from scipost.models import Contributor, title_dict from scipost.models import Contributor, title_dict
...@@ -21,7 +23,8 @@ class RequestThesisLinkForm(forms.ModelForm): ...@@ -21,7 +23,8 @@ class RequestThesisLinkForm(forms.ModelForm):
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.user = kwargs.pop("user") self.request = kwargs.pop("request")
self.user = self.request.user
super(RequestThesisLinkForm, self).__init__(*args, **kwargs) super(RequestThesisLinkForm, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
...@@ -60,24 +63,28 @@ class VetThesisLinkForm(RequestThesisLinkForm): ...@@ -60,24 +63,28 @@ class VetThesisLinkForm(RequestThesisLinkForm):
self.order_fields(['action_option', 'refusal_reason', 'justification']) self.order_fields(['action_option', 'refusal_reason', 'justification'])
def vet_request(self, thesislink, user): def vet_request(self, thesislink, user):
mail_params = {
'vocative_title': title_dict[thesislink.requested_by.title],
'thesislink': thesislink,
'full_url': self.request.build_absolute_uri(
reverse('theses:thesis', kwargs={'thesislink_id': thesislink.id}))
}
if int(self.cleaned_data['action_option']) == VetThesisLinkForm.ACCEPT: if int(self.cleaned_data['action_option']) == VetThesisLinkForm.ACCEPT:
thesislink.vetted = True thesislink.vetted = True
thesislink.vetted_by = Contributor.objects.get(user=user) thesislink.vetted_by = Contributor.objects.get(user=user)
thesislink.save() thesislink.save()
email_text = ('Dear ' + title_dict[thesislink.requested_by.title] + ' ' message_plain = render_to_string('theses/thesislink_accepted.txt', mail_params)
+ thesislink.requested_by.user.last_name print(message_plain)
+ ', \n\nThe Thesis Link you have requested, concerning thesis with' email = EmailMessage(
+ ' title ' + thesislink.title + ' by ' + thesislink.author 'SciPost Thesis Link activated',
+ ', has been activated at https://scipost.org/thesis/' message_plain,
+ str(thesislink.id) + '.' 'SciPost Theses <theses@scipost.org>',
+ '\n\nThank you for your contribution, \nThe SciPost Team.') [thesislink.requested_by.user.email],
emailmessage = EmailMessage('SciPost Thesis Link activated', email_text, ['theses@scipost.org'],
'SciPost Theses <theses@scipost.org>', reply_to=['theses@scipost.org']
[thesislink.requested_by.user.email], )
['theses@scipost.org'], email.send(fail_silently=False)
reply_to=['theses@scipost.org'])
emailmessage.send(fail_silently=False)
elif int(self.cleaned_data['action_option']) == VetThesisLinkForm.REFUSE: elif int(self.cleaned_data['action_option']) == VetThesisLinkForm.REFUSE:
email_text = ('Dear ' + title_dict[thesislink.requested_by.title] + ' ' email_text = ('Dear ' + title_dict[thesislink.requested_by.title] + ' '
+ thesislink.requested_by.user.last_name + thesislink.requested_by.user.last_name
......
Dear {{ vocative_title }} {{ thesislink.requested_by.user.last_name }},
The Thesis Link you have requested, concerning thesis with title `{{ thesislink.title }}' by {{ thesislink.author }},
has been activated at {{ full_url }}.
Thank you for your contribution,
The SciPost Team
import factory import factory
from django.test import TestCase from django.test import TestCase, RequestFactory
from scipost.factories import ContributorFactory from scipost.factories import ContributorFactory
from .factories import ThesisLinkFactory, VetThesisLinkFormFactory from .factories import ThesisLinkFactory, VetThesisLinkFormFactory
...@@ -14,30 +14,34 @@ class TestRequestThesisLink(TestCase): ...@@ -14,30 +14,34 @@ class TestRequestThesisLink(TestCase):
def setUp(self): def setUp(self):
self.contributor = ContributorFactory() self.contributor = ContributorFactory()
self.user = self.contributor.user self.user = self.contributor.user
self.request = RequestFactory()
self.request.user = self.user
self.valid_form_data = model_form_data( self.valid_form_data = model_form_data(
ThesisLinkFactory(), RequestThesisLinkForm, form_kwargs={'user': self.user}) ThesisLinkFactory(), RequestThesisLinkForm, form_kwargs={'request': self.request})
def test_valid_data_is_valid(self): def test_valid_data_is_valid(self):
form_data = self.valid_form_data form_data = self.valid_form_data
form = RequestThesisLinkForm(self.valid_form_data, user=self.user) form = RequestThesisLinkForm(self.valid_form_data, request=self.request)
self.assertTrue(form.is_valid()) self.assertTrue(form.is_valid())
def test_data_without_user_is_not_valid(self): def test_data_without_user_is_not_valid(self):
form_data = self.valid_form_data form_data = self.valid_form_data
with self.assertRaises(KeyError): request = RequestFactory()
RequestThesisLinkForm(self.valid_form_data) with self.assertRaises(AttributeError):
RequestThesisLinkForm(self.valid_form_data, request=request)
# Should we define a more semantic error like UserNotDefinedError?
self.assertTrue(False)
def test_empty_domain_is_invalid(self): def test_empty_domain_is_invalid(self):
form_data = self.valid_form_data form_data = self.valid_form_data
form_data['domain'] = '' form_data['domain'] = ''
form = RequestThesisLinkForm(form_data, user=self.user) form = RequestThesisLinkForm(form_data, request=self.request)
self.assertEqual(form.errors['domain'], ['This field is required.']) self.assertEqual(form.errors['domain'], ['This field is required.'])
def test_thesislink_is_requested_by_correct_contributor(self): def test_thesislink_is_requested_by_correct_contributor(self):
form_data = self.valid_form_data form_data = self.valid_form_data
contributor = ContributorFactory() form = RequestThesisLinkForm(form_data, request=self.request)
form = RequestThesisLinkForm(form_data, user=contributor.user)
# Check if the user is properly saved to the new ThesisLink as `requested_by` # Check if the user is properly saved to the new ThesisLink as `requested_by`
thesislink = form.save() thesislink = form.save()
self.assertEqual(thesislink.requested_by, contributor) self.assertEqual(thesislink.requested_by, self.contributor)
...@@ -102,7 +102,9 @@ class TestVetThesisLinkRequests(TestCase): ...@@ -102,7 +102,9 @@ class TestVetThesisLinkRequests(TestCase):
def test_thesislink_is_vetted_by_correct_contributor_and_mail_is_sent(self): def test_thesislink_is_vetted_by_correct_contributor_and_mail_is_sent(self):
contributor = ContributorFactory() contributor = ContributorFactory()
contributor.user.groups.add(Group.objects.get(name="Vetting Editors")) contributor.user.groups.add(Group.objects.get(name="Vetting Editors"))
post_data = model_form_data(ThesisLinkFactory(), VetThesisLinkForm, form_kwargs={'user': contributor.user}) request = RequestFactory().get(self.target)
request.user = contributor.user
post_data = model_form_data(ThesisLinkFactory(), VetThesisLinkForm, form_kwargs={'request': request})
post_data["action_option"] = VetThesisLinkForm.ACCEPT post_data["action_option"] = VetThesisLinkForm.ACCEPT
target = reverse('theses:vet_thesislink', kwargs={'pk': self.thesislink.id}) target = reverse('theses:vet_thesislink', kwargs={'pk': self.thesislink.id})
...@@ -124,7 +126,10 @@ class TestVetThesisLinkRequests(TestCase): ...@@ -124,7 +126,10 @@ class TestVetThesisLinkRequests(TestCase):
def test_thesislink_that_is_refused_is_deleted_and_mail_is_sent(self): def test_thesislink_that_is_refused_is_deleted_and_mail_is_sent(self):
contributor = ContributorFactory() contributor = ContributorFactory()
contributor.user.groups.add(Group.objects.get(name="Vetting Editors")) contributor.user.groups.add(Group.objects.get(name="Vetting Editors"))
post_data = model_form_data(ThesisLinkFactory(), VetThesisLinkForm, form_kwargs={'user': contributor.user}) request = RequestFactory().get(self.target)
request.user = contributor.user
post_data = model_form_data(ThesisLinkFactory(), VetThesisLinkForm, form_kwargs={'request': request})
post_data["action_option"] = VetThesisLinkForm.REFUSE post_data["action_option"] = VetThesisLinkForm.REFUSE
target = reverse('theses:vet_thesislink', kwargs={'pk': self.thesislink.id}) target = reverse('theses:vet_thesislink', kwargs={'pk': self.thesislink.id})
......
...@@ -40,7 +40,7 @@ class RequestThesisLink(CreateView): ...@@ -40,7 +40,7 @@ class RequestThesisLink(CreateView):
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super(RequestThesisLink, self).get_form_kwargs() kwargs = super(RequestThesisLink, self).get_form_kwargs()
kwargs['user'] = self.request.user kwargs['request'] = self.request
return kwargs return kwargs
...@@ -82,7 +82,7 @@ class VetThesisLink(UpdateView): ...@@ -82,7 +82,7 @@ class VetThesisLink(UpdateView):
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super(VetThesisLink, self).get_form_kwargs() kwargs = super(VetThesisLink, self).get_form_kwargs()
kwargs['user'] = self.request.user kwargs['request'] = self.request
return kwargs return kwargs
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment