Browse Source

Make tests for passport create, change and delete

devel
bashmak 8 years ago
parent
commit
c8b6c68b64
  1. 2
      abonapp/models.py
  2. 16
      abonapp/templates/abonapp/passport_view.html
  3. 72
      abonapp/tests.py
  4. 2
      abonapp/urls.py
  5. 71
      abonapp/views.py

2
abonapp/models.py

@ -296,7 +296,7 @@ class PassportInfo(models.Model):
number = models.CharField(_('Pasport number'), max_length=6, validators=(validators.integer_validator,)) number = models.CharField(_('Pasport number'), max_length=6, validators=(validators.integer_validator,))
distributor = models.CharField(_('Distributor'), max_length=64) distributor = models.CharField(_('Distributor'), max_length=64)
date_of_acceptance = models.DateField() date_of_acceptance = models.DateField()
abon = models.OneToOneField(Abon, on_delete=models.SET_NULL, blank=True, null=True)
abon = models.OneToOneField(Abon, on_delete=models.CASCADE, blank=True, null=True)
class Meta: class Meta:
db_table = 'passport_info' db_table = 'passport_info'

16
abonapp/templates/abonapp/passport_view.html

@ -4,7 +4,7 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-sm-6">
<div class="col-sm-12">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">{% trans 'Passport information' %}</h3> <h3 class="panel-title">{% trans 'Passport information' %}</h3>
@ -12,14 +12,14 @@
<div class="panel-body"> <div class="panel-body">
<form role="form" class="form-horizontal" action="{% url 'abonapp:passport_view' group.pk abon.username %}" method="post">{% csrf_token %} <form role="form" class="form-horizontal" action="{% url 'abonapp:passport_view' group.pk abon.username %}" method="post">{% csrf_token %}
{% bootstrap_field frm.series label_class='col-sm-3' field_class='col-sm-9' form_group_class='form-group-sm' %}
{% bootstrap_field frm.number label_class='col-sm-3' field_class='col-sm-9' form_group_class='form-group-sm' %}
{% bootstrap_field frm.distributor label_class='col-sm-3' field_class='col-sm-9' form_group_class='form-group-sm' %}
{% bootstrap_field form.series label_class='col-sm-5 col-md-3' field_class='col-sm-7 col-md-9' form_group_class='form-group-sm' %}
{% bootstrap_field form.number label_class='col-sm-5 col-md-3' field_class='col-sm-7 col-md-9' form_group_class='form-group-sm' %}
{% bootstrap_field form.distributor label_class='col-sm-5 col-md-3' field_class='col-sm-7 col-md-9' form_group_class='form-group-sm' %}
<div class="form-group-sm"> <div class="form-group-sm">
<label for="id_date_of_acceptance" class="col-sm-3 control-label">{% trans 'Date of acceptance' %}</label>
<div class="col-sm-9">
{{ frm.date_of_acceptance }}{{ frm.date_of_acceptance.errors }}
<label for="id_date_of_acceptance" class="col-sm-5 col-md-3 control-label">{% trans 'Date of acceptance' %}</label>
<div class="col-sm-7 col-md-9">
{{ form.date_of_acceptance }}{{ form.date_of_acceptance.errors }}
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
$(function () { $(function () {
@ -31,7 +31,7 @@
</div> </div>
<div class="form-group-sm"> <div class="form-group-sm">
<div class="col-sm-offset-3 col-sm-9">
<div class="col-sm-offset-5 col-md-offset-3 col-sm-7 col-md-9">
<button type="submit" class="btn btn-primary btn-sm"> <button type="submit" class="btn btn-primary btn-sm">
<span class="glyphicon glyphicon-save"></span> {% trans 'Save' %} <span class="glyphicon glyphicon-save"></span> {% trans 'Save' %}
</button> </button>

72
abonapp/tests.py

@ -1,4 +1,5 @@
from hashlib import md5 from hashlib import md5
from datetime import date
from accounts_app.models import UserProfile from accounts_app.models import UserProfile
from django.shortcuts import resolve_url from django.shortcuts import resolve_url
@ -7,7 +8,7 @@ from django.conf import settings
from django.utils import timezone from django.utils import timezone
from xmltodict import parse from xmltodict import parse
from abonapp.models import Abon, AbonStreet
from abonapp.models import Abon, AbonStreet, PassportInfo
from abonapp.pay_systems import allpay from abonapp.pay_systems import allpay
from group_app.models import Group from group_app.models import Group
@ -254,3 +255,72 @@ class StreetTestCase(TestCase):
self.assertEqual(r.status_code, 302) self.assertEqual(r.status_code, 302)
after_count = AbonStreet.objects.exclude(pk=self.street.pk).count() after_count = AbonStreet.objects.exclude(pk=self.street.pk).count()
self.assertEqual(after_count, 0) self.assertEqual(after_count, 0)
class PassportTestCase(TestCase):
def setUp(self):
grp = Group.objects.create(title='Grp1')
a1 = Abon.objects.create_user(
telephone='+79781234567',
username='pay_account1',
password='passw1'
)
a1.group = grp
a1.save(update_fields=('group',))
passport_item = PassportInfo.objects.create(
series='1243',
number='738517',
distributor='Distributor',
date_of_acceptance=date(year=2014, month=9, day=14),
abon=a1
)
my_admin = UserProfile.objects.create_superuser('+79781234567', 'local_superuser', 'ps')
self.adminuser = my_admin
self.passport = passport_item
self.abon = a1
self.group = grp
def test_create_update_delete(self):
self.passport_make()
self.passport_change()
self.passport_remove_item_with_user()
def passport_make(self):
print('passport_make')
url = resolve_url('abonapp:passport_view', self.group.pk, self.abon.username)
self.client.force_login(self.adminuser)
self.client.post(url, {
'series': '1232',
'number': '123456',
'distributor': 'Distrib',
'date_of_acceptance': date(year=2013, month=1, day=17)
})
passport = PassportInfo.objects.filter(abon=self.abon).first()
self.assertIsNotNone(passport)
self.assertEqual('1232', passport.series)
self.assertEqual('123456', passport.number)
self.assertEqual('Distrib', passport.distributor)
def passport_change(self):
print('passport_change')
url = resolve_url('abonapp:passport_view', self.group.pk, self.abon.username)
self.client.force_login(self.adminuser)
self.client.post(url, {
'series': '9876',
'number': '987654',
'distributor': 'Long new text distributor',
'date_of_acceptance': date(year=1873, month=5, day=29)
})
passport = PassportInfo.objects.filter(abon=self.abon).first()
self.assertIsNotNone(passport)
self.assertEqual('9876', passport.series)
self.assertEqual('987654', passport.number)
self.assertEqual('Long new text distributor', passport.distributor)
def passport_remove_item_with_user(self):
print('passport_remove_item_with_user')
url = resolve_url('abonapp:del_abon', self.group.pk, self.abon.username)
self.client.force_login(self.adminuser)
self.client.post(url)
passport = PassportInfo.objects.filter(abon=self.abon).first()
self.assertIsNone(passport)

2
abonapp/urls.py

@ -12,7 +12,7 @@ subscriber_patterns = [
url(r'^pay/$', views.PayHistoryListView.as_view(), name='abon_phistory'), url(r'^pay/$', views.PayHistoryListView.as_view(), name='abon_phistory'),
url(r'^addinvoice/$', views.add_invoice, name='add_invoice'), url(r'^addinvoice/$', views.add_invoice, name='add_invoice'),
url(r'^pick/$', views.pick_tariff, name='pick_tariff'), url(r'^pick/$', views.pick_tariff, name='pick_tariff'),
url(r'^passport_view/$', views.passport_view, name='passport_view'),
url(r'^passport_view/$', views.PassportUpdateView.as_view(), name='passport_view'),
url(r'^chart/$', views.charts, name='charts'), url(r'^chart/$', views.charts, name='charts'),
url(r'^dials/$', views.DialsListView.as_view(), name='dials'), url(r'^dials/$', views.DialsListView.as_view(), name='dials'),
url(r'^reset_ip/$', views.reset_ip, name='reset_ip'), url(r'^reset_ip/$', views.reset_ip, name='reset_ip'),

71
abonapp/views.py

@ -509,39 +509,44 @@ class TaskLogListView(ListView):
return context return context
@login_required
@permission_required('abonapp.can_view_passport')
def passport_view(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
try:
if request.method == 'POST':
try:
passport_instance = models.PassportInfo.objects.get(abon=abon)
except models.PassportInfo.DoesNotExist:
passport_instance = None
frm = forms.PassportForm(request.POST, instance=passport_instance)
if frm.is_valid():
pi = frm.save(commit=False)
pi.abon = abon
pi.save()
messages.success(request, _('Passport information has been saved'))
return redirect('abonapp:passport_view', gid=gid, uname=uname)
else:
messages.error(request, _('fix form errors'))
else:
passp_instance = models.PassportInfo.objects.get(abon=abon)
frm = forms.PassportForm(instance=passp_instance)
except models.Abon.DoesNotExist:
messages.error(request, _('Abon does not exist'))
return redirect('abonapp:people_list', gid=gid)
except models.PassportInfo.DoesNotExist:
messages.warning(request, _('Passport info for the user does not exist'))
frm = forms.PassportForm()
return render(request, 'abonapp/passport_view.html', {
'group': get_object_or_404(Group, pk=gid),
'abon': abon,
'frm': frm
})
@method_decorator(login_required, name='dispatch')
@method_decorator(permission_required('abonapp.can_view_passport'), name='dispatch')
class PassportUpdateView(UpdateView):
form_class = forms.PassportForm
model = models.PassportInfo
template_name = 'abonapp/passport_view.html'
def get_object(self, queryset=None):
self.abon = get_object_or_404(models.Abon, username=self.kwargs.get('uname'))
try:
passport_instance = models.PassportInfo.objects.get(abon=self.abon)
except models.PassportInfo.DoesNotExist:
passport_instance = None
return passport_instance
def form_valid(self, form):
pi = form.save(commit=False)
pi.abon = self.abon
pi.save()
messages.success(self.request, _('Passport information has been saved'))
return super(PassportUpdateView, self).form_valid(form)
def get_success_url(self):
return resolve_url('abonapp:passport_view',
gid=self.kwargs.get('gid'),
uname=self.kwargs.get('uname'))
def form_invalid(self, form):
messages.error(self.request, _('fix form errors'))
return super(PassportUpdateView, self).form_invalid(form)
def get_context_data(self, **kwargs):
context = {
'group': get_object_or_404(Group, pk=self.kwargs.get('gid')),
'abon': self.abon
}
context.update(kwargs)
return super(PassportUpdateView, self).get_context_data(**context)
@login_required @login_required

Loading…
Cancel
Save