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

Commit 1a27297

Browse files
committed
Merge pull request #269 from naisnouk/fea_emails
Fea emails
2 parents 98428cc + 55a70a7 commit 1a27297

File tree

9 files changed

+143
-26
lines changed

9 files changed

+143
-26
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/__init__.py

Whitespace-only changes.

mailer/event_report_mailer.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/python
2+
# -*- 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+
7+
8+
'''
9+
Generates and sends event report to ambassadors users
10+
'''
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('A new event on codeweek.eu 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)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Hello, {{user.first_name}}!
2+
3+
A new event {{ event.title }} has been added to the codeweek.eu site and it needs your revision. Would you be kind enough to check if everything is ok and approve it, or otherwise request an update: http://events.codeweek.eu{% url 'web.view_event' event.id event.slug %}
4+
5+
Thank you for your help!
6+
7+
Codeweek.eu Team

mailer/tests.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import datetime
2+
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
10+
11+
12+
class EmailTestCase(TestCase):
13+
def setUp(self):
14+
self.u1 = User.objects.create(username='user1', email='[email protected]', first_name='Nejc')
15+
self.up1 = UserProfile.objects.create(user=self.u1)
16+
17+
self.event = Event.objects.create(
18+
organizer="Organizer 1",
19+
creator=User.objects.filter(pk=1)[0],
20+
title="Event 1 - Pending",
21+
description="Some description - Pending",
22+
location="Near here",
23+
start_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=3),
24+
end_date=datetime.datetime.now() + datetime.timedelta(days=3, hours=3),
25+
event_url="http://eee.com",
26+
contact_person="[email protected]",
27+
country="SI",
28+
pub_date=datetime.datetime.now(),
29+
tags=["tag1", "tag2"])
30+
31+
32+
def test_send_event_email(self):
33+
send_event_report_email(self.u1, self.event)
34+
email = mail.outbox[0]
35+
36+
self.assertEquals('A new event on codeweek.eu needs your attention', email.subject)
37+
self.assertEquals('[email protected]', email.from_email)
38+
self.assertEquals([self.u1.email], email.to)
39+
self.assertIn(self.u1.first_name, email.body)
40+
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
@@ -34,6 +34,11 @@ def get_ambassadors_for_countries():
3434
countries_ambassadors.sort()
3535
return countries_ambassadors
3636

37+
def get_ambassadors_for_country(country):
38+
ambassadors = User.objects.filter(groups__name='ambassadors', userprofile__country=country)
39+
return ambassadors
40+
41+
3742
def update_user_email(user_id, new_email):
3843
user = User.objects.get(id=user_id)
3944
user.email = new_email

web/tests/test_events_processors.py

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,9 @@ def get_user(self):
1919
return User.objects.get(pk=1)
2020

2121
def create_event(self, title="Event title",
22-
start_date=datetime.datetime.now() + datetime.timedelta(days=0, hours=3),
23-
end_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=3),
24-
country_code="SI",
25-
status="PENDING"):
22+
start_date=datetime.datetime.now() + datetime.timedelta(days=0, hours=3),
23+
end_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=3),
24+
country_code="SI", status="PENDING"):
2625

2726
event_data = {
2827
"end_date": start_date,
@@ -36,7 +35,7 @@ def create_event(self, title="Event title",
3635
"location": "Ljubljana",
3736
"audience": [1],
3837
"theme": [1],
39-
"status": status,
38+
"status": status,
4039
}
4140
return create_or_update_event(**event_data)
4241

@@ -45,19 +44,19 @@ def setUp(self):
4544
self.up1 = UserProfile.objects.create(user=self.u1)
4645

4746
Event.objects.create(organizer="asdasd",
48-
creator=User.objects.filter(pk=1)[0],
49-
title="asdasd",
50-
description="asdsad",
51-
location="asdsad",
52-
start_date=datetime.datetime.now(),
53-
end_date=datetime.datetime.now(),
54-
event_url="http://eee.com",
55-
contact_person="[email protected]",
56-
country="SI",
57-
audience=[1],
58-
theme=[1],
59-
pub_date=datetime.datetime.now(),
60-
tags=["tag1", "tag2"])
47+
creator=User.objects.filter(pk=1)[0],
48+
title="asdasd",
49+
description="asdsad",
50+
location="asdsad",
51+
start_date=datetime.datetime.now(),
52+
end_date=datetime.datetime.now(),
53+
event_url="http://eee.com",
54+
contact_person="[email protected]",
55+
country="SI",
56+
audience=[1],
57+
theme=[1],
58+
pub_date=datetime.datetime.now(),
59+
tags=["tag1", "tag2"])
6160

6261
def test_get_event(self):
6362
test_event = Event.objects.get(title="asdasd")
@@ -135,15 +134,15 @@ def test_get_approved_event_without_filter_returns_zero(self):
135134

136135
def test_get_approved_event_without_filter_with_pending_event(self):
137136
self.create_event(start_date=datetime.datetime.now() + datetime.timedelta(days=0, hours=3),
138-
end_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=3),
139-
status="APPROVED",)
137+
end_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=3),
138+
status="APPROVED",)
140139
events = get_approved_events()
141140
self.assertEqual(1, len(events))
142141

143142
def test_get_approved_event_without_filter_with_approved_event_but_passed_date(self):
144143
self.create_event(start_date=datetime.datetime.now() - datetime.timedelta(days=1, hours=3),
145-
end_date=datetime.datetime.now() - datetime.timedelta(days=2, hours=3),
146-
status="APPROVED")
144+
end_date=datetime.datetime.now() - datetime.timedelta(days=2, hours=3),
145+
status="APPROVED")
147146
events = get_approved_events()
148147
self.assertEqual(0, len(events))
149148

@@ -157,8 +156,8 @@ def test_get_approved_event_with_filter_country_code_and_order_with_approved_eve
157156
countries = ["IS", "DK", "FI", "FI", "LI"]
158157
for index, country in enumerate(countries):
159158
self.create_event(title="Testing event" + str(index + 1), country_code=country, status="APPROVED",
160-
start_date=datetime.datetime.now() + datetime.timedelta(days=0, hours=index + 1),
161-
end_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=index + 1))
159+
start_date=datetime.datetime.now() + datetime.timedelta(days=0, hours=index + 1),
160+
end_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=index + 1))
162161

163162
events = get_approved_events(order="start_date")
164163
self.assertEqual(5, len(events))
@@ -172,8 +171,8 @@ def test_get_approved_event_with_filter_country_code_and_order_and_limit__with_a
172171
countries = ["IS", "DK", "FI", "FI", "FI"]
173172
for index, country in enumerate(countries):
174173
self.create_event(title="Testing event" + str(index + 1), country_code=country, status="APPROVED",
175-
start_date=datetime.datetime.now() + datetime.timedelta(days=0, hours=index + 1),
176-
end_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=index + 1))
174+
start_date=datetime.datetime.now() + datetime.timedelta(days=0, hours=index + 1),
175+
end_date=datetime.datetime.now() + datetime.timedelta(days=1, hours=index + 1))
177176

178177
events = get_approved_events(order="start_date", limit=2, country_code="FI")
179178
self.assertEqual(2, len(events))

web/tests/test_user_processors.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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"))

0 commit comments

Comments
 (0)