def test_deactivate_number(self):
"""We can deactivate one of the Subscriber's numbers via POST.
Pushes number into the 'available' state and disassociates the number
from the subscriber. Starts an async post task (which we will mock).
Should also create a 'deactivate_number' UsageEvent.
"""
# This subscriber currently has only one number and deleting the last
# number is verboten, so first we've gotta add another number.
new_number = models.Number(number='6285574719987', state="inuse",
network=self.user_profile.network,
subscriber=self.sub,
kind="number.nexmo.monthly")
new_number.save()
# Deactivate the original number.
url = '/api/v2/numbers/%s' % self.number.number
data = {
'state': 'available'
}
header = {
'HTTP_AUTHORIZATION': 'Token %s' % self.user_profile.network.api_token
}
with mock.patch('endagaweb.tasks.async_post.delay') as mocked_task:
response = self.client.post(url, data=data, **header)
self.assertEqual(200, response.status_code)
# Reload the original number from the db and check its state.
number = models.Number.objects.get(id=self.number.id)
self.assertEqual(data['state'], number.state)
# The subscriber should now have one associated number. Reload the
# sub from the db to verify.
subscriber = models.Subscriber.objects.get(id=self.sub.id)
self.assertEqual(new_number.number, subscriber.numbers())
# The original number should not be associated with a Subscriber or a
# Network.
self.assertEqual(None, number.subscriber)
self.assertEqual(None, number.network)
# The mocked task should have been called with specific arguments
self.assertTrue(mocked_task.called)
args, _ = mocked_task.call_args
task_endpoint, task_data = args
expected_url = '%s/config/deactivate_number' % self.bts.inbound_url
self.assertEqual(expected_url, task_endpoint)
# The task_data should be signed with the BTS UUID and should have a
# jwt key which is a dict with a number key.
serializer = itsdangerous.JSONWebSignatureSerializer(self.bts.secret)
task_data = serializer.loads(task_data['jwt'])
self.assertEqual(number.number, task_data['number'])
# A 'deactivate_number' UsageEvent should have been created.
event = models.UsageEvent.objects.get(to_number=number.number,
kind='deactivate_number')
self.assertEqual('deactivated phone number: %s' % number.number,
event.reason)
test_api_v2.py 文件源码
python
阅读 20
收藏 0
点赞 0
评论 0
评论列表
文章目录