dfc0f84e |
1 | # -*- encoding: utf-8 -*- |
2 | from django.contrib.sites.models import Site |
3 | from django.core import mail |
4 | from django.db import models |
5 | from django.db.models.fields import CharField |
6 | from django.db.models.fields.related import ForeignKey |
7 | |
8 | from django.test import TestCase |
9 | |
10 | from auf.django.mailing.models import EntreeLog, Enveloppe, envoyer,\ |
11 | ModeleCourriel |
12 | |
13 | class TestDestinataire(models.Model): |
14 | adresse_courriel = CharField(max_length=128) |
15 | nom = CharField(max_length=64) |
16 | |
17 | |
18 | class TestEnveloppeParams(models.Model): |
19 | |
20 | destinataire = ForeignKey(TestDestinataire) |
21 | enveloppe = ForeignKey(Enveloppe, unique=True) |
22 | |
23 | def get_adresse(self): |
24 | return self.destinataire.adresse_courriel |
25 | |
26 | def get_corps_context(self): |
27 | context = { |
28 | 'nom_destinataire' : self.destinataire.nom |
29 | } |
30 | return context |
31 | |
32 | |
33 | class MailTest(TestCase): |
34 | |
35 | def setUp(self): |
36 | self.dest1 = TestDestinataire(adresse_courriel='dest1@test.org', |
37 | nom='nom dest1') |
38 | self.dest1.save() |
39 | self.dest2 = TestDestinataire(adresse_courriel='dest2@test.org', |
40 | nom='nom dest2') |
41 | self.dest2.save() |
42 | self.modele_courriel = ModeleCourriel(code='mod_test', |
43 | sujet='sujet_modele', corps='{{ nom_destinataire }}{{ url }}', |
44 | html=False) |
45 | self.modele_courriel.save() |
46 | |
47 | def get_site(self): |
48 | return Site.objects.all()[0] |
49 | |
50 | def create_enveloppe_params(self): |
51 | enveloppe = Enveloppe(modele=self.modele_courriel) |
52 | enveloppe.save() |
53 | enveloppe_params = TestEnveloppeParams(enveloppe=enveloppe, destinataire=self.dest1) |
54 | enveloppe_params.save() |
55 | return enveloppe, enveloppe_params |
56 | |
57 | |
58 | def test_envoi_simple(self): |
59 | enveloppe, enveloppe_params = self.create_enveloppe_params() |
60 | |
61 | envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy') |
62 | |
63 | self.assertEqual(len(mail.outbox), 1) |
64 | self.assertEqual(mail.outbox[0].body, self.dest1.nom + |
65 | 'http://example.com/acces/' + enveloppe.jeton) |
66 | self.assertEqual(mail.outbox[0].to, [self.dest1.adresse_courriel]) |
67 | |
68 | entrees_log = EntreeLog.objects.all() |
69 | self.assertEqual(len(entrees_log), 1) |
70 | self.assertEqual(entrees_log[0].enveloppe, enveloppe) |
71 | self.assertEqual(entrees_log[0].adresse, self.dest1.adresse_courriel) |
72 | |
73 | # normalement un deuxième envoi ne devrait rien envoyer de ce qui a |
74 | # déjà été logué |
75 | envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy') |
76 | self.assertEqual(len(mail.outbox), 1) |
77 | entrees_log = EntreeLog.objects.all() |
78 | self.assertEqual(len(entrees_log), 1) |
79 | |
80 | # par contre si une erreur s'est produite l'envoi devrait être retenté |
81 | entrees_log[0].erreur = u'libellé erreur' |
82 | entrees_log[0].save() |
83 | envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy') |
84 | self.assertEqual(len(mail.outbox), 2) |
85 | entrees_log = EntreeLog.objects.all() |
86 | self.assertEqual(len(entrees_log), 2) |
87 | |
88 | entrees_log[0].delete() |
89 | |
90 | # le courriel devrait également être renvoyé si l'adresse du destinataire |
91 | # a changé |
92 | self.dest1.adresse_courriel = 'autre_adresse@test.org' |
93 | self.dest1.save() |
94 | envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy') |
95 | self.assertEqual(len(mail.outbox), 3) |
96 | entrees_log = EntreeLog.objects.all() |
97 | self.assertEqual(len(entrees_log), 2) |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |