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