Skip to content
This repository was archived by the owner on Sep 19, 2018. It is now read-only.

Commit b3612ee

Browse files
committed
sending emails to country ambassadors when event is created
1 parent 3628a01 commit b3612ee

File tree

7 files changed

+114
-0
lines changed

7 files changed

+114
-0
lines changed

codeweekeu/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@
220220
# defined apps
221221
'web',
222222
'api',
223+
'mailer'
223224
)
224225
########## END APP CONFIGURATION
225226

mailer/event_report_mailer.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
#!/usr/bin/python
22
# -*- coding: utf-8 -*-
3+
from django.core.mail import send_mail
4+
from django.template import loader, Context
5+
from web.processors.user import get_ambassadors_for_country
6+
37

48
'''
59
Generates and sends event report to ambassadors users
610
'''
11+
def send_event_report_email (user, event):
12+
template = loader.get_template("mailer/event_email.txt")
13+
context = Context({'user': user, 'event': event})
14+
15+
txt_content = template.render(context)
16+
17+
send_mail('New event needs your attention', txt_content, "[email protected]", [user.email])
18+
19+
def send_email_to_country_ambassadors(event):
20+
ambassadors = get_ambassadors_for_country(event.country)
21+
for user in ambassadors:
22+
send_event_report_email(user, event)
23+
24+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Hello, {{user.first_name}}!
2+
3+
New event {{ event.title }} has been added to the codeweek.eu site and it needs your revision. Could you be kind enough to check if everything is ok and approve it, otherwise request an update.
4+
5+
6+
Thank you for your help!
7+
8+
Codeweek.eu Team

mailer/tests.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
1+
import datetime
12
from django.test import TestCase
3+
from mailer.event_report_mailer import send_event_report_email
4+
5+
from api.models.events import Event
6+
from django.contrib.auth.models import User
7+
from api.models import UserProfile
8+
9+
from django.core import mail
210

311
# Create your tests here.
12+
13+
class EmailTestCase(TestCase):
14+
def setUp(self):
15+
self.u1 = User.objects.create(username='user1', email='[email protected]', first_name='Nejc')
16+
self.up1 = UserProfile.objects.create(user=self.u1)
17+
18+
self.event = Event.objects.create(
19+
organizer="Organizer 1",
20+
creator=User.objects.filter(pk=1)[0],
21+
title="Event 1 - Pending",
22+
description="Some description - Pending",
23+
location="Near here",
24+
start_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=3),
25+
end_date=datetime.datetime.now() + datetime.timedelta(days=3, hours=3),
26+
event_url="http://eee.com",
27+
contact_person="[email protected]",
28+
country="SI",
29+
pub_date=datetime.datetime.now(),
30+
tags=["tag1", "tag2"])
31+
32+
33+
def test_send_event_email(self):
34+
send_event_report_email(self.u1, self.event)
35+
email = mail.outbox[0]
36+
37+
self.assertEquals('New event needs your attention', email.subject)
38+
self.assertEquals('[email protected]', email.from_email)
39+
self.assertEquals([self.u1.email], email.to)
40+
self.assertIn(self.u1.first_name, email.body)
41+
self.assertIn(self.event.title, email.body)

web/processors/event.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from django_countries import countries
88

99
from web.processors import media
10+
from mailer.event_report_mailer import send_email_to_country_ambassadors
1011

1112

1213
def get_client_ip(forwarded=None, remote=None):
@@ -100,6 +101,7 @@ def create_or_update_event(event_id=None, **event_data):
100101

101102
else:
102103
event = Event.objects.create(**event_data)
104+
send_email_to_country_ambassadors(event)
103105

104106
return event
105107

web/processors/user.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ def get_ambassadors_for_countries():
2929
countries_ambassadors.sort()
3030
return countries_ambassadors
3131

32+
def get_ambassadors_for_country(country):
33+
ambassadors = User.objects.filter(groups__name='ambassadors', userprofile__country=country)
34+
return ambassadors
35+
36+
3237
def update_user_email(user_id, new_email):
3338
user = User.objects.get(id=user_id)
3439
user.email = new_email

web/tests/test_user_processors.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import datetime
2+
from django.test import TestCase
3+
from django.db import IntegrityError
4+
from django.contrib.auth.models import User, Group
5+
6+
from api.models.events import Event
7+
from api.models import UserProfile
8+
from web.processors.user import get_ambassadors_for_country
9+
10+
11+
class EventTestCase(TestCase):
12+
13+
def setUp(self):
14+
self.u1 = User.objects.create(username='user1')
15+
self.up1 = UserProfile.objects.create(user=self.u1)
16+
17+
Event.objects.create(organizer="asdasd",
18+
creator=User.objects.filter(pk=1)[0],
19+
title="asdasd",
20+
description="asdsad",
21+
location="asdsad",
22+
start_date=datetime.datetime.now(),
23+
end_date=datetime.datetime.now(),
24+
event_url="http://eee.com",
25+
contact_person="[email protected]",
26+
country="SI",
27+
audience=[1],
28+
theme=[1],
29+
pub_date=datetime.datetime.now(),
30+
tags=["tag1", "tag2"])
31+
32+
def test_get_ambassadors_for_country(self):
33+
self.up1.country = "SI"
34+
self.up1.save()
35+
36+
group = Group.objects.get(name="ambassadors")
37+
38+
group.user_set.add(self.u1)
39+
40+
self.assertItemsEqual ([self.u1], get_ambassadors_for_country("SI"))
41+
self.assertItemsEqual ([], get_ambassadors_for_country("FR"))
42+

0 commit comments

Comments
 (0)