ref(piaf): enleve du crappy code de test-a-la-rache; ajoute du meilleur code de test
Parent
b573f329c1
révision
41a4e04ea7
|
@ -98,8 +98,6 @@ class TipiPaiement(models.Model):
|
|||
'mel': self.email,
|
||||
'montant': '{}'.format(int(self.amount*100)),
|
||||
}
|
||||
# FIXME: to be removed
|
||||
params['urlcl'] = 'http://apps.villedeviolaines.fr/piaf/paid_invoice'
|
||||
r = Request('GET', url, params=params)
|
||||
return r.prepare().url
|
||||
|
||||
|
|
|
@ -16,11 +16,12 @@
|
|||
|
||||
import re
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from bs4 import BeautifulSoup as bs
|
||||
from urllib.parse import urlparse, parse_qs
|
||||
|
||||
from django.test import TestCase, Client
|
||||
from django.urls import reverse
|
||||
from django.test.utils import override_settings
|
||||
from django.core import mail
|
||||
|
||||
from piaf.base import resthys, models
|
||||
|
@ -162,21 +163,25 @@ class PrepareInvoice(TestCase):
|
|||
models.Abuse.objects.all().delete()
|
||||
|
||||
|
||||
class ForbidUnpayInvoice(TestCase):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
|
||||
def test_forbid_unpay_invoice(self):
|
||||
response = self.client.post(
|
||||
reverse('retrieve_invoice'),
|
||||
{'numero': '54', 'nom': 'Isabelle Merignac'},
|
||||
follow=True,
|
||||
)
|
||||
response = self.client.get(reverse('unpay_invoice'))
|
||||
self.assertEqual(response.status_code, 404)
|
||||
def get_paiement_post_data(content):
|
||||
url = re.search(
|
||||
r"'(http://www.jepaiemesserviceslocaux.dgfip.finances.gouv[^']+)'",
|
||||
content,
|
||||
re.MULTILINE
|
||||
).group(1)
|
||||
qs = parse_qs(urlparse(url).query)
|
||||
data = dict([
|
||||
[k, v[0]]
|
||||
for k, v in qs.items() if k in
|
||||
['numcli', 'exer', 'refdet', 'objet', 'saisie', 'mel', 'montant']
|
||||
])
|
||||
data['resultrans'] = 'P'
|
||||
data['numauto'] = '420042'
|
||||
data['dattrans'] = datetime.now().strftime('%d%m%Y')
|
||||
data['heurtrans'] = datetime.now().strftime('%H%M')
|
||||
return data
|
||||
|
||||
|
||||
@override_settings(DEBUG=True)
|
||||
class PayInvoice(TestCase):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
|
@ -198,16 +203,9 @@ class PayInvoice(TestCase):
|
|||
)
|
||||
self.assertContains(response, 'Payer la facture')
|
||||
self.before = self.clean_timestamp(response.content.decode())
|
||||
data = dict([
|
||||
(i.get('name'), i.get('value'))
|
||||
for i in
|
||||
bs(response.content, 'html.parser')
|
||||
.find("form", id="payment_ko")
|
||||
.find_all('input')
|
||||
])
|
||||
data['saisie'] = 'T'
|
||||
|
||||
data = get_paiement_post_data(response.content.decode())
|
||||
data['resultrans'] = 'R'
|
||||
data.pop('csrfmiddlewaretoken', None)
|
||||
|
||||
response = self.tipi_client.post(
|
||||
reverse('paid_invoice'),
|
||||
|
@ -220,17 +218,7 @@ class PayInvoice(TestCase):
|
|||
self.assertContains(response, 'Paiement refusé')
|
||||
self.assertContains(response, 'Payer la facture')
|
||||
|
||||
data = dict([
|
||||
(i.get('name'), i.get('value'))
|
||||
for i in
|
||||
bs(response.content, 'html.parser')
|
||||
.find("form", id="payment_ok")
|
||||
.find("div")
|
||||
.find_all('input')
|
||||
])
|
||||
data['saisie'] = 'T'
|
||||
data['resultrans'] = 'P'
|
||||
data.pop('csrfmiddlewaretoken', None)
|
||||
data = get_paiement_post_data(response.content.decode())
|
||||
|
||||
response = self.tipi_client.post(
|
||||
reverse('paid_invoice'),
|
||||
|
@ -243,7 +231,8 @@ class PayInvoice(TestCase):
|
|||
self.assertContains(response, 'Paiement reçu')
|
||||
self.assertContains(response, 'Facture payée')
|
||||
|
||||
self.client.get(reverse('unpay_invoice'))
|
||||
resthys.put('unpay/54', data={})
|
||||
|
||||
response = self.client.get(reverse('prepare_invoice'))
|
||||
response = self.client.get(reverse('prepare_invoice'))
|
||||
self.assertContains(response, 'Payer la facture')
|
||||
|
@ -257,18 +246,12 @@ class PayInvoice(TestCase):
|
|||
self.assertEqual(self.before, self.after)
|
||||
|
||||
def tearDown(self):
|
||||
response = self.client.post(
|
||||
reverse('retrieve_invoice'),
|
||||
{'numero': '54', 'nom': 'Isabelle Merignac'},
|
||||
follow=True,
|
||||
)
|
||||
self.client.get(reverse('unpay_invoice'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
resthys.put('unpay/54', data={})
|
||||
resthys.put('individus/53', data={'email': 'merigmarc@test.com'})
|
||||
# flush messages
|
||||
response = self.client.get(reverse('prepare_invoice'))
|
||||
self.client.get(reverse('home'))
|
||||
|
||||
|
||||
@override_settings(DEBUG=True)
|
||||
class PayMergedInvoice(TestCase):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
|
@ -297,16 +280,8 @@ class PayMergedInvoice(TestCase):
|
|||
self.assertContains(response, 'Payer les factures (176,00')
|
||||
self.before = self.clean_timestamp(response.content.decode())
|
||||
|
||||
data = dict([
|
||||
(i.get('name'), i.get('value'))
|
||||
for i in
|
||||
bs(response.content, 'html.parser')
|
||||
.find("form", id="payment_ko")
|
||||
.find_all('input')
|
||||
])
|
||||
data['saisie'] = 'T'
|
||||
data = get_paiement_post_data(response.content.decode())
|
||||
data['resultrans'] = 'R'
|
||||
data.pop('csrfmiddlewaretoken', None)
|
||||
|
||||
response = self.tipi_client.post(
|
||||
reverse('paid_invoice'),
|
||||
|
@ -319,17 +294,7 @@ class PayMergedInvoice(TestCase):
|
|||
self.assertContains(response, 'Paiement refusé')
|
||||
self.assertContains(response, 'Payer les factures (176,00')
|
||||
|
||||
data = dict([
|
||||
(i.get('name'), i.get('value'))
|
||||
for i in
|
||||
bs(response.content, 'html.parser')
|
||||
.find("form", id="payment_ok")
|
||||
.find("div")
|
||||
.find_all('input')
|
||||
])
|
||||
data['saisie'] = 'T'
|
||||
data['resultrans'] = 'P'
|
||||
data.pop('csrfmiddlewaretoken', None)
|
||||
data = get_paiement_post_data(response.content.decode())
|
||||
|
||||
response = self.tipi_client.post(
|
||||
reverse('paid_invoice'),
|
||||
|
@ -342,7 +307,9 @@ class PayMergedInvoice(TestCase):
|
|||
self.assertContains(response, 'Paiement reçu')
|
||||
self.assertContains(response, 'Factures payées (176,00')
|
||||
|
||||
self.client.get(reverse('unpay_invoice'))
|
||||
resthys.put('unpay/34', data={})
|
||||
resthys.put('unpay/53', data={})
|
||||
|
||||
response = self.client.get(reverse('prepare_merged_invoices'))
|
||||
response = self.client.get(reverse('prepare_merged_invoices'))
|
||||
self.assertContains(response, 'Payer les factures (176,00')
|
||||
|
@ -356,32 +323,13 @@ class PayMergedInvoice(TestCase):
|
|||
self.assertMultiLineEqual(self.before, self.after)
|
||||
|
||||
def tearDown(self):
|
||||
response = self.client.post(
|
||||
reverse('retrieve_invoice'),
|
||||
{'numero': '54', 'nom': 'Isabelle Merignac'},
|
||||
follow=True,
|
||||
)
|
||||
self.client.get(reverse('unpay_invoice'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response = self.client.post(
|
||||
reverse('retrieve_invoice'),
|
||||
{'numero': '34', 'nom': 'Raphael Leroy'},
|
||||
follow=True,
|
||||
)
|
||||
self.client.get(reverse('unpay_invoice'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response = self.client.post(
|
||||
reverse('retrieve_invoice'),
|
||||
{'numero': '53', 'nom': 'Raphael Leroy'},
|
||||
follow=True,
|
||||
)
|
||||
self.client.get(reverse('unpay_invoice'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
resthys.put('unpay/34', data={})
|
||||
resthys.put('unpay/53', data={})
|
||||
resthys.put('unpay/54', data={})
|
||||
# flush messages
|
||||
response = self.client.get(reverse('prepare_merged_invoices'))
|
||||
self.client.get(reverse('home'))
|
||||
|
||||
|
||||
@override_settings(DEBUG=True)
|
||||
class PayInvoiceOnBackendFailure(TestCase):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
|
@ -397,17 +345,7 @@ class PayInvoiceOnBackendFailure(TestCase):
|
|||
)
|
||||
self.assertContains(response, 'Payer la facture')
|
||||
|
||||
data = dict([
|
||||
(i.get('name'), i.get('value'))
|
||||
for i in
|
||||
bs(response.content, 'html.parser')
|
||||
.find("form", id="payment_ok")
|
||||
.find("div")
|
||||
.find_all('input')
|
||||
])
|
||||
data['saisie'] = 'T'
|
||||
data['resultrans'] = 'P'
|
||||
data.pop('csrfmiddlewaretoken', None)
|
||||
data = get_paiement_post_data(response.content.decode())
|
||||
|
||||
with self.settings(RESTHYS_BASEURL='http://127.0.0.1:8080/doomtofail'):
|
||||
tipi_response = self.tipi_client.post(
|
||||
|
@ -470,13 +408,7 @@ class PayInvoiceOnBackendFailure(TestCase):
|
|||
logger.setLevel(previous_level)
|
||||
|
||||
def tearDown(self):
|
||||
response = self.client.post(
|
||||
reverse('retrieve_invoice'),
|
||||
{'numero': '54', 'nom': 'Isabelle Merignac'},
|
||||
follow=True,
|
||||
)
|
||||
self.client.get(reverse('unpay_invoice'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
resthys.put('unpay/54', data={})
|
||||
|
||||
|
||||
class TrustedPaidInvoice(TestCase):
|
||||
|
|
|
@ -37,5 +37,4 @@ urlpatterns = [
|
|||
name='register_paiement',
|
||||
),
|
||||
path('paid_invoice', views.PaidInvoice.as_view(), name='paid_invoice'),
|
||||
path('unpay_invoice', views.UnpayInvoice.as_view(), name='unpay_invoice'),
|
||||
]
|
||||
|
|
|
@ -22,7 +22,6 @@ from django.shortcuts import HttpResponseRedirect, get_object_or_404
|
|||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.http import Http404, HttpResponseBadRequest
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.http import HttpResponse
|
||||
|
@ -129,30 +128,6 @@ class PrepareInvoice(mixins.HackyMessagesMixin, generic.edit.FormView):
|
|||
context['prestations'] = utils.regroup_prestations(
|
||||
context['invoice']['prestations_set']
|
||||
)
|
||||
|
||||
# FIXME to be removed
|
||||
if 'emailform' not in context and 'paiement' in self.request.session:
|
||||
paiement = models.TipiPaiement.objects.get(
|
||||
pk=self.request.session['paiement'],
|
||||
)
|
||||
data = {
|
||||
'numcli': paiement.numcli,
|
||||
'exer': datetime.today().year,
|
||||
'refdet': paiement.refdet,
|
||||
'objet': paiement.objet,
|
||||
'montant': paiement.amount*100,
|
||||
'mel': paiement.email,
|
||||
'saisie': paiement.saisie,
|
||||
'numauto': '420042',
|
||||
'dattrans': '01062018',
|
||||
'heurtrans': '1142',
|
||||
}
|
||||
context['paid_form'] = forms.PaidInvoiceForm(
|
||||
{**data, **{'resultrans': 'P'}}
|
||||
)
|
||||
context['unpaid_form'] = forms.PaidInvoiceForm(
|
||||
{**data, **{'resultrans': 'R'}}
|
||||
)
|
||||
return context
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
|
@ -219,29 +194,6 @@ class PrepareMergedInvoices(PrepareInvoice):
|
|||
context['prestations'] = utils.regroup_prestations(
|
||||
context['invoice']['prestations_set']
|
||||
)
|
||||
|
||||
# FIXME to be removed
|
||||
paiement = models.TipiPaiement.objects.get(
|
||||
pk=self.request.session['paiement'],
|
||||
)
|
||||
data = {
|
||||
'numcli': paiement.numcli,
|
||||
'exer': datetime.today().year,
|
||||
'refdet': paiement.refdet,
|
||||
'objet': paiement.objet,
|
||||
'montant': paiement.amount*100,
|
||||
'mel': paiement.email,
|
||||
'saisie': paiement.saisie,
|
||||
'numauto': '420042',
|
||||
'dattrans': '01062018',
|
||||
'heurtrans': '1142',
|
||||
}
|
||||
context['paid_form'] = forms.PaidInvoiceForm(
|
||||
{**data, **{'resultrans': 'P'}}
|
||||
)
|
||||
context['unpaid_form'] = forms.PaidInvoiceForm(
|
||||
{**data, **{'resultrans': 'R'}}
|
||||
)
|
||||
return context
|
||||
|
||||
|
||||
|
@ -343,26 +295,3 @@ class RegisterPaiement(generic.edit.FormView):
|
|||
"l'assistance."
|
||||
)
|
||||
return super().form_valid(form)
|
||||
|
||||
|
||||
# FIXME: to be removed
|
||||
class UnpayInvoice(generic.RedirectView):
|
||||
url = reverse_lazy('prepare_invoice')
|
||||
http_method_names = ['get']
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
if not settings.DEBUG:
|
||||
raise Http404
|
||||
if 'merged_invoices' in request.session:
|
||||
invoice_nums = request.session.get('merged_invoices')['numeros']
|
||||
self.url = reverse_lazy('prepare_merged_invoices')
|
||||
else:
|
||||
invoice_nums = [request.session.get('invoice')['numero']]
|
||||
|
||||
for n in invoice_nums:
|
||||
resthys.put('unpay/{}'.format(n))
|
||||
messages.success(
|
||||
self.request,
|
||||
"Paiement reverté pour la facture n° {}".format(n),
|
||||
)
|
||||
return super().get(request, *args, **kwargs)
|
||||
|
|
|
@ -182,18 +182,6 @@ Période du
|
|||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<form id="payment_ok" method="post" action="{% url "paid_invoice" %}">{% csrf_token %}
|
||||
<div style="display:none">{{ paid_form.as_p }}</div>
|
||||
<input type="submit" class="btn btn-success" value="Paiement réussi"/>
|
||||
</form>
|
||||
<form id="payment_ko" method="post" action="{% url "paid_invoice" %}">{% csrf_token %}
|
||||
<div style="display:none">{{ unpaid_form.as_p }}</div>
|
||||
<input type="submit" class="btn btn-danger" value="Paiement échoué"/>
|
||||
</form>
|
||||
<p>
|
||||
<a class="btn btn-warning" href="{% url "unpay_invoice" %}">Reverter le paiement</a>
|
||||
</p>
|
||||
|
||||
</main>
|
||||
{% if not invoice.compte_payeur.email %}
|
||||
<div id="get_email" class="modal" tabindex="-1" role="dialog">
|
||||
|
|
Chargement…
Référencer dans un nouveau ticket