0.2
[auf_django_mailing.git] / tests / tests.py
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