def test_enable_internet(self): i = 0 for contract in self.contracts: service = Service(contract=contract) if service.is_internet_activated(): internet_contract = contract.get_service_contract(self.service) if internet_contract: #выключаем интернет абоненту - имитируя блокировку интернет за неуплату if internet_contract.status == settings.CONTRACT_STATUS['active']: internet_contract.status = settings.CONTRACT_STATUS['closed'] internet_contract.save() limit_down = LimitDown(contract=contract) if limit_down.can_make(): self.client.post('/login', {'contract': contract.contract, 'password': contract.password}) response = self.client.get('/enable_internet') self.assertEqual(json.loads(response.content)['success'], True) self.assertEqual(json.loads(response.content)['title'], u'Интернет включён на %s дня' % limit_down.get_trust_days_duration()) self.assertEqual(json.loads(response.content)['message'], u'Не забудьте внести оплату в течении указанного периода. Важно: для активации вашего тарифа, завершите текущее соединение с интернетом и через пять минут подключитесь заново.') #проверяем ContractLimit contract_limit = ContractLimit.objects.get(contract=internet_contract, date__gte=getFirstDay(), date__lte=getLastDay()) self.assertEqual(contract_limit.summa, settings.TRUST_PAY_LIMIT) self.assertEqual(contract_limit.days, unicode(limit_down.get_trust_days_duration())) #проверяем TaskLimitRestoration task_limit_restoration = TaskLimitRestoration.objects.get( \ contract=internet_contract, \ date=datetime.now() + timedelta(days=limit_down.get_trust_days_duration())) self.assertEqual(task_limit_restoration.summa, settings.TRUST_PAY_LIMIT) #проверяем ContractStatusLog contract_status_log = ContractStatusLog.objects.get(contract=internet_contract, start_date=date.today(), comment=u'Включение услуги при понижении лимита через личный кабинет') self.assertEqual(contract_status_log.status, settings.CONTRACT_STATUS['active']) #проверяем что статусы об отключении при недостатке средств убраны #contract_statuses = ContractStatus.objects.filter(contract=contract, status=settings.CONTRACT_STATUS['closed'], start_date__gte=getFirstDay()) #self.assertEqual(len(contract_statuses), 0) #проверяем что создана запись о том что услуга включена через обещанный платёж contract_status = ContractStatus.objects.get(contract=internet_contract, status=settings.CONTRACT_STATUS['active'], start_date=date.today(), comment=u'Включение услуги при понижении лимита через личный кабинет') self.assertEqual(contract_status.end_date, date.today() + timedelta(days=limit_down.get_trust_days_duration() - 1)) #проверяем что текущий лимит абонента понижен internet_contract = Contract.objects.get(contract=internet_contract) self.assertEqual(internet_contract.limit, settings.TRUST_PAY_LIMIT) #logout self.client.post('/logout') i = i + 1 print u"Test: <test_enable_internet>. Всего договоров: %i, Обработано: %i" % (len(self.contracts), i)
def test_internet(self): for contract in self.contracts: self.client.post('/login', {'contract': contract.contract, 'password': contract.password}) response = self.client.get('/internet') service = Service(contract=contract) if service.is_internet_activated(): title_exist = True if 'Произошла ошибка!' in response.content else False message_exist = True if 'Данная услуга у вас не привязана к данному логину. Предварительно осуществите привязку.' in response.content else False self.assertEqual(title_exist, False) self.assertEqual(message_exist, False) promise_pay_header_exist = True if '<li><a href="#promise_pay">Обещанный платёж</a></li>' in response.content else False promise_pay_error_title_exist = True if 'Услуга "Обещанный платёж" не доступна!' in response.content else False promise_pay_bad_balance_exist = True if 'Текущий баланс не положителен.' in response.content else False promise_pay_already_used_exist = True if 'Данная услуга уже была активирована в текущем месяце.' in response.content else False promise_pay_not_blocked_exist = True if 'Интернет на текущий момент не заблокирован.' in response.content else False promise_pay_manual_limit_exist = True if 'Понижение лимита уже было произведено вручную.' in response.content else False promise_pay_corporate_exist = True if 'Данный договор представляет юридическое лицо.' in response.content else False limit_down = LimitDown(contract=contract) if limit_down.can_make(): self.assertEqual(promise_pay_header_exist, True) self.assertEqual(promise_pay_error_title_exist, False) self.assertEqual(promise_pay_bad_balance_exist, False) self.assertEqual(promise_pay_already_used_exist, False) self.assertEqual(promise_pay_not_blocked_exist, False) self.assertEqual(promise_pay_manual_limit_exist, False) self.assertEqual(promise_pay_corporate_exist, False) else: self.assertEqual(promise_pay_error_title_exist, True) if limit_down.get_trust_pay_not_available_reason()['message'] == u'Текущий баланс не положителен.': self.assertEqual(promise_pay_bad_balance_exist, True) if limit_down.get_trust_pay_not_available_reason()['message'] == u'Данная услуга уже была активирована в текущем месяце.': self.assertEqual(promise_pay_already_used_exist, True) if limit_down.get_trust_pay_not_available_reason()['message'] == u'Интернет на текущий момент не заблокирован.': self.assertEqual(promise_pay_not_blocked_exist, True) if limit_down.get_trust_pay_not_available_reason()['message'] == u'Понижение лимита уже было произведено вручную.': self.assertEqual(promise_pay_manual_limit_exist, True) if limit_down.get_trust_pay_not_available_reason()['message'] == u'Данный договор представляет юридическое лицо.': self.assertEqual(promise_pay_corporate_exist, True) #logout self.client.post('/logout')
def test_enable_internet_on_already_enabled(self): i = 0 for contract in self.contracts: service = Service(contract=contract) if service.is_internet_activated(): internet_contract = contract.get_service_contract(self.service) if internet_contract: # выключаем интернет абоненту - имитируя блокировку интернет за неуплату if internet_contract.status == settings.CONTRACT_STATUS["active"]: internet_contract.status = settings.CONTRACT_STATUS["closed"] internet_contract.save() limit_down = LimitDown(contract=contract) if limit_down.can_make(): self.client.post("/login", {"contract": contract.contract, "password": contract.password}) # первый раз включаем интренет response = self.client.get("/enable_internet") # второй раз включаем интернет response = self.client.get("/enable_internet") self.assertEqual(json.loads(response.content)["success"], False) self.assertEqual( json.loads(response.content)["title"], u'Услуга "Обещанный платёж" не доступна!' ) self.assertEqual( json.loads(response.content)["message"], u"Данная услуга уже была активирована в текущем месяце.", ) self.client.post("/logout") i = i + 1 print u"Test: <test_enable_internet_on_already_enabled>. Всего договоров: %i, Обработано: %i" % ( len(self.contracts), i, )
def worker(req): contract = req.params()['service_contract'] if contract: #уведомляем админов проекта о попытке активации услуги notify(u'Попытка активации доверенного платежа', u'Контракт: %s в %s попытался активировать услугу "Доверенный платёж"' % (contract.contract, datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) #проверяем не было ли уже понижений в текущем месяце, если были то понижение невозможно limit_down = LimitDown(contract=contract) duration = limit_down.get_trust_days_duration() #на сколько дней включить Интернет if limit_down.can_make(): tariff = Tariff(contract=contract) #обновляем лимит и статус услуги абонента summa = tariff.get_limit() contract.status = settings.CONTRACT_STATUS['active'] #включаем услугу contract.limit = summa contract.save() #понижаем лимит абоненту ContractLimit.objects.create(contract=contract, summa=summa, days=duration) #создаём таску для восстановления лимита биллингом TaskLimitRestoration.objects.create(contract=contract, summa=summa, date=datetime.now() + timedelta(days=duration)) #откладываем изменение статуса в лог ContractStatusLog.objects.create( \ contract=contract, \ status=settings.CONTRACT_STATUS['active'], \ start_date=date.today(), end_date=date.today() + timedelta(days=duration - 1), comment=u'Включение услуги при понижении лимита через личный кабинет' \ ) #обрабатываем предыдущие статусы контракта в текущем месяце processing_contract_statuses(contract) #создаём запись о том что услуга включена через обещанный платёж ContractStatus.objects.create( \ contract=contract, \ status=settings.CONTRACT_STATUS['active'], \ start_date=date.today(), \ end_date=date.today() + timedelta(days=duration - 1), \ comment=u'Включение услуги при понижении лимита через личный кабинет' \ ) #уведомляем админов проекта об успешной активации услуги notify(u'Уведомление', u'Контракт: %s в %s успешно активировал услугу "Доверенный платёж"' % (contract.contract, datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) return {'success': True, \ 'title': u'Интернет включён на %i дня' % duration, \ 'message': u'Не забудьте внести оплату в течении указанного периода.<br><br><b>Важно: для активации вашего тарифа, завершите текущее соединение с интернетом и через 5-10 минут подключитесь заново</b>.<br><br>Если подключение осуществляется через WiFi оборудование (роутер), то необходимо отключить его от сети на 5-10 минут.' } else: #уведомляем админа проекта о том что активации услуги не возможна notify(u'Уведомление', u'Контракт: %s в %s не может активировать услугу "Доверенный платёж", т.к. "%s"' % (contract.contract, datetime.now().strftime("%Y-%m-%d %H:%M:%S"), limit_down.get_trust_pay_not_available_reason()['message'])) return {'success': False, \ 'title': limit_down.get_trust_pay_not_available_reason()['title'], \ 'message': limit_down.get_trust_pay_not_available_reason()['message'] } else: return {'success': False, \ 'title': u'Произошла ошибка!', \ 'message': u'Услуга Интернет у вас не привязана к данному логину. Предварительно осуществите привязку.' }