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,))
distributor = models.CharField(_('Distributor'), max_length=64)
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:
db_table = 'passport_info'

16
abonapp/templates/abonapp/passport_view.html

@ -4,7 +4,7 @@
{% block content %}
<div class="row">
<div class="col-sm-6">
<div class="col-sm-12">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans 'Passport information' %}</h3>
@ -12,14 +12,14 @@
<div class="panel-body">
<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">
<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>
<script type="text/javascript">
$(function () {
@ -31,7 +31,7 @@
</div>
<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">
<span class="glyphicon glyphicon-save"></span> {% trans 'Save' %}
</button>

72
abonapp/tests.py

@ -1,4 +1,5 @@
from hashlib import md5
from datetime import date
from accounts_app.models import UserProfile
from django.shortcuts import resolve_url
@ -7,7 +8,7 @@ from django.conf import settings
from django.utils import timezone
from xmltodict import parse
from abonapp.models import Abon, AbonStreet
from abonapp.models import Abon, AbonStreet, PassportInfo
from abonapp.pay_systems import allpay
from group_app.models import Group
@ -254,3 +255,72 @@ class StreetTestCase(TestCase):
self.assertEqual(r.status_code, 302)
after_count = AbonStreet.objects.exclude(pk=self.street.pk).count()
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'^addinvoice/$', views.add_invoice, name='add_invoice'),
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'^dials/$', views.DialsListView.as_view(), name='dials'),
url(r'^reset_ip/$', views.reset_ip, name='reset_ip'),

71
abonapp/views.py

@ -509,39 +509,44 @@ class TaskLogListView(ListView):
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

Loading…
Cancel
Save