You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
8.5 KiB
222 lines
8.5 KiB
from django.shortcuts import resolve_url
|
|
from django.test import TestCase
|
|
from django.test.client import Client
|
|
from agent import NasNetworkError
|
|
from .models import AbonTariff, Abon, AbonGroup, LogicError, AbonRawPassword
|
|
from tariff_app.models import Tariff
|
|
|
|
|
|
class AbonTestCase(TestCase):
|
|
def setUp(self):
|
|
try:
|
|
Tariff.objects.create(
|
|
title='test_tariff',
|
|
descr='taroff descr',
|
|
speedIn=1.2,
|
|
speedOut=3.0,
|
|
amount=3
|
|
)
|
|
abon = Abon()
|
|
abon.username = '1234567'
|
|
abon.fio = 'mainuser'
|
|
abon.telephone = '+79788328884'
|
|
abon.set_password('ps')
|
|
abon.is_superuser = True
|
|
abon.save()
|
|
abon_group = AbonGroup.objects.create(title='abon_group')
|
|
abon_group.profiles.add(abon)
|
|
except NasNetworkError:
|
|
pass
|
|
|
|
# проверка на пополнение счёта
|
|
def test_add_ballance(self):
|
|
try:
|
|
abon = Abon.objects.get(username='1234567')
|
|
ballance = abon.ballance
|
|
abon.add_ballance(abon, 13, 'test pay')
|
|
abon.save(update_fields=['ballance'])
|
|
self.assertEqual(abon.ballance, ballance+13)
|
|
ballance = abon.ballance
|
|
abon.add_ballance(abon, 5.34, 'test float pay')
|
|
abon.save(update_fields=['ballance'])
|
|
self.assertEqual(abon.ballance, ballance+5.34)
|
|
except NasNetworkError:
|
|
pass
|
|
|
|
# пробуем выбрать услугу
|
|
def test_pick_tariff(self):
|
|
try:
|
|
tariff = Tariff.objects.get(title='test_tariff')
|
|
abon = Abon.objects.get(username='1234567')
|
|
try:
|
|
abon.pick_tariff(tariff, abon)
|
|
# нет денег, должно всплыть исключение и сюда дойти мы не должны
|
|
self.assertFalse(True)
|
|
except LogicError:
|
|
pass
|
|
act_tar = abon.active_tariff()
|
|
# если недостаточно денег на счету
|
|
assert abon.ballance <= tariff.amount
|
|
# У абонента на счету 0, не должна быть куплена услуга
|
|
self.assertEqual(act_tar, None)
|
|
# Раз услуги нет то и доступа быть не должно
|
|
self.assertTrue(not abon.is_access())
|
|
|
|
# с деньгами
|
|
abon.add_ballance(abon, 7.34, 'add pay for test pick tariff')
|
|
abon.pick_tariff(tariff, abon)
|
|
act_tar = abon.active_tariff()
|
|
# должны получить указанную услугу
|
|
self.assertEqual(act_tar, tariff)
|
|
# и получить доступ
|
|
self.assertTrue(abon.is_access())
|
|
except NasNetworkError:
|
|
pass
|
|
|
|
# тестим очередь услуг
|
|
def test_services_queue(self):
|
|
abon = Abon.objects.get(username='1234567')
|
|
tariff = Tariff.objects.get(title='test_tariff')
|
|
abon.add_ballance(abon, 9, 'add pay for test services queue')
|
|
abon.save()
|
|
abon.pick_tariff(tariff, abon)
|
|
abon.pick_tariff(tariff, abon)
|
|
abon.pick_tariff(tariff, abon)
|
|
# снять деньги должно было только за первый выбор, остальные стают в очередь услуг
|
|
self.assertEqual(abon.ballance, 6)
|
|
|
|
c = Client()
|
|
# login
|
|
c.post(resolve_url('acc_app:login'), {'login': '1234567', 'password': 'ps'})
|
|
url = resolve_url('abonapp:compl_srv', gid=1, uid=1, srvid=1)
|
|
resp = c.get(url)
|
|
print('RESP:', resp)
|
|
self.assertEqual(resp.status_code, 200)
|
|
resp = c.post(url, data={
|
|
'finish_confirm': 'yes'
|
|
})
|
|
print('RESP:', resp)
|
|
# при успешной остановке услуги идёт редирект на др страницу
|
|
self.assertEqual(resp.status_code, 302)
|
|
# текущей услуги быть не должно
|
|
act_tar = abon.active_tariff()
|
|
self.assertIsNone(act_tar)
|
|
# не активных услуг останется 2
|
|
noact_count = AbonTariff.objects.filter(abon=abon).filter(time_start=None).count()
|
|
self.assertEqual(noact_count, 2)
|
|
|
|
# проверяем платёжку alltime
|
|
def test_allpay(self):
|
|
from hashlib import md5
|
|
from djing.settings import pay_SECRET, pay_SERV_ID
|
|
import xmltodict
|
|
def sig(act, pay_account, pay_id):
|
|
md = md5()
|
|
s = '_'.join((str(act), str(pay_account), pay_SERV_ID, str(pay_id), pay_SECRET))
|
|
md.update(bytes(s, 'utf-8'))
|
|
return md.hexdigest()
|
|
c = Client()
|
|
url = resolve_url('abonapp:terminal_pay')
|
|
r = c.get(url, {
|
|
'ACT': 1, 'PAY_ACCOUNT': '1234567',
|
|
'SERVICE_ID': pay_SERV_ID,
|
|
'PAY_ID': 3561234,
|
|
'TRADE_POINT': 377,
|
|
'SIGN': sig(1, 1234567, 3561234)
|
|
})
|
|
xobj = xmltodict.parse(r.content)
|
|
self.assertEqual(int(xobj['pay-response']['status_code']), 21)
|
|
r = c.get(url, {
|
|
'ACT': 4, 'PAY_ACCOUNT': '1234567',
|
|
'SERVICE_ID': pay_SERV_ID,
|
|
'PAY_ID': 3561234,
|
|
'PAY_AMOUNT': 1.0,
|
|
'TRADE_POINT': 377,
|
|
'SIGN': sig(4, 1234567, 3561234)
|
|
})
|
|
xobj = xmltodict.parse(r.content)
|
|
self.assertEqual(int(xobj['pay-response']['status_code']), 22)
|
|
r = c.get(url, {
|
|
'ACT': 4, 'PAY_ACCOUNT': '1234567',
|
|
'SERVICE_ID': pay_SERV_ID,
|
|
'PAY_ID': 3561234,
|
|
'PAY_AMOUNT': 1.0,
|
|
'TRADE_POINT': 377,
|
|
'SIGN': sig(4, 1234567, 3561234)
|
|
})
|
|
xobj = xmltodict.parse(r.content)
|
|
self.assertEqual(int(xobj['pay-response']['status_code']), -100)
|
|
r = c.get(url, {
|
|
'ACT': 7, 'PAY_ACCOUNT': '1234567',
|
|
'SERVICE_ID': pay_SERV_ID,
|
|
'PAY_ID': 3561234,
|
|
'PAY_AMOUNT': 1.0,
|
|
'TRADE_POINT': 377,
|
|
'SIGN': sig(7, 1234567, 3561234)
|
|
})
|
|
xobj = xmltodict.parse(r.content)
|
|
self.assertEqual(int(xobj['pay-response']['status_code']), 11)
|
|
abon = Abon.objects.get(username='1234567')
|
|
self.assertEqual(abon.ballance, 1)
|
|
|
|
# пробуем добавить группу абонентов
|
|
def test_add_abongroup(self):
|
|
abon = Abon.objects.get(username='1234567')
|
|
ag = AbonGroup.objects.create(title='%&34%$&*(')
|
|
ag.profiles.add(abon)
|
|
|
|
# пробуем добавить абонента
|
|
def test_add_abon(self):
|
|
c = Client()
|
|
c.login(username='1234567', password='ps')
|
|
url = resolve_url('abonapp:add_abon', gid=1)
|
|
r = c.get(url)
|
|
# поглядим на страницу добавления абонента
|
|
self.assertEqual(r.status_code, 200)
|
|
r = c.post(url, {
|
|
'username': '123',
|
|
'password': 'ps',
|
|
'fio': 'Abon Fio',
|
|
'telephone': '+79783753914',
|
|
'is_active': True
|
|
})
|
|
self.assertEqual(r.status_code, 302)
|
|
r = c.get(resolve_url('abonapp:add_abon', gid=324))
|
|
self.assertEqual(r.status_code, 404)
|
|
try:
|
|
abn = Abon.objects.get(username='123')
|
|
self.assertIsNotNone(abn)
|
|
psw = AbonRawPassword.objects.get(account=abn, passw_text='ps')
|
|
self.assertIsNotNone(psw)
|
|
except Abon.DoesNotExist:
|
|
# абонент должен был создаться
|
|
self.assertTrue(False)
|
|
except AbonRawPassword.DoesNotExist:
|
|
# должен быть пароль абонента простым текстом
|
|
self.assertTrue(False)
|
|
|
|
# пробуем удалить абонента
|
|
def test_view_delentity(self):
|
|
c = Client()
|
|
c.login(username='1234567', password='ps')
|
|
url = resolve_url('abonapp:del_abon') + '?t=a&id=1'
|
|
r = c.get('/abons/1/addabon')
|
|
|
|
|
|
class AbonTariffTestCase(TestCase):
|
|
def setUp(self):
|
|
abon = Abon.objects.create(
|
|
username='1234567',
|
|
telephone='+79788328884'
|
|
)
|
|
tariff = Tariff.objects.create(
|
|
title='test_tariff',
|
|
descr='taroff descr',
|
|
speedIn=1.2,
|
|
speedOut=3.0,
|
|
amount=3
|
|
)
|
|
AbonTariff.objects.create(
|
|
abon=abon,
|
|
tariff=tariff
|
|
)
|