From 6b28eea39bbd454f42fa1fb61184b9a92a331513 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Fri, 3 Aug 2018 16:14:30 +0300 Subject: [PATCH] Make service unique for speed, type and price. And test it --- tariff_app/locale/ru/LC_MESSAGES/django.po | 3 + tariff_app/models.py | 1 + .../templates/tariff_app/editTarif.html | 2 + tariff_app/tests.py | 64 +++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 tariff_app/tests.py diff --git a/tariff_app/locale/ru/LC_MESSAGES/django.po b/tariff_app/locale/ru/LC_MESSAGES/django.po index 3c8b803..72211d2 100644 --- a/tariff_app/locale/ru/LC_MESSAGES/django.po +++ b/tariff_app/locale/ru/LC_MESSAGES/django.po @@ -215,3 +215,6 @@ msgstr "Вы уверены что хотите удалить тариф?" msgid "IS Daily service" msgstr "Услуга на сутки" + +msgid "Service with this Speed In, Speed Out, Price and Script already exists." +msgstr "Услуга с такой скоростью, ценой и логикой уже есть" diff --git a/tariff_app/models.py b/tariff_app/models.py index 6ca5e04..1698403 100644 --- a/tariff_app/models.py +++ b/tariff_app/models.py @@ -54,6 +54,7 @@ class Tariff(models.Model): ordering = ('title',) verbose_name = _('Service') verbose_name_plural = _('Services') + unique_together = ('speedIn', 'speedOut', 'amount', 'calc_type') class PeriodicPay(models.Model): diff --git a/tariff_app/templates/tariff_app/editTarif.html b/tariff_app/templates/tariff_app/editTarif.html index d151da0..8be8cd1 100644 --- a/tariff_app/templates/tariff_app/editTarif.html +++ b/tariff_app/templates/tariff_app/editTarif.html @@ -24,6 +24,8 @@
{% csrf_token %} + {% bootstrap_form_errors form %} + {% bootstrap_icon 'tag' as ic %} {% bootstrap_field form.title addon_before=ic %} diff --git a/tariff_app/tests.py b/tariff_app/tests.py new file mode 100644 index 0000000..84cc318 --- /dev/null +++ b/tariff_app/tests.py @@ -0,0 +1,64 @@ +from abc import ABCMeta + +from django.conf import settings +from django.shortcuts import resolve_url +from django.test import TestCase + +from accounts_app.models import UserProfile +from group_app.models import Group +from tariff_app.models import Tariff + + +class MyBaseTestCase(metaclass=ABCMeta): + def _client_get_check_login(self, url): + """ + Checks if url is protected from unauthorized access + :param url: + :return: authorized response + """ + r = self.client.get(url) + self.assertRedirects(r, "%s?next=%s" % (getattr(settings, 'LOGIN_URL'), url)) + self.client.force_login(self.adminuser) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + return r + + def setUp(self): + grp = Group.objects.create(title='Grp1') + my_admin = UserProfile.objects.create_superuser('+79781234567', 'local_superuser', 'ps') + self.adminuser = my_admin + self.group = grp + + +class ServiceTestCase(MyBaseTestCase, TestCase): + def setUp(self): + super(ServiceTestCase, self).setUp() + trf = Tariff.objects.create( + title='test', + descr='Some descr', + speedIn=10.0, + speedOut=2.0, + amount=1.0, + calc_type='Df' + ) + trf.groups.add(self.group.pk) + trf.save() + self.tariff = trf + + def test_add_same_services(self): + print('test_add_same_services') + url = resolve_url('tariff_app:add') + self._client_get_check_login(url) + self.client.post(url, data={ + 'title': 'same srv', + 'descr': 'descriptive', + 'speedIn': 10.0, + 'speedOut': 2.0, + 'amount': 1.0, + 'calc_type': 'Df' + }) + try: + Tariff.objects.get(title='same srv') + raise self.failureException('Services cannot be saved because it duplicates other service') + except Tariff.DoesNotExist: + pass