zulip_bots: Add test for create-plan command of Baremetrics bot.

This commit is contained in:
Viraat Chandra 2018-01-01 15:13:05 +06:00 committed by showell
parent 94f82dfe4c
commit 2f429fcb86
3 changed files with 90 additions and 13 deletions

View file

@ -2,7 +2,6 @@
from typing import Any, List from typing import Any, List
import requests import requests
import logging
class BaremetricsHandler(object): class BaremetricsHandler(object):
def initialize(self, bot_handler: Any) -> None: def initialize(self, bot_handler: Any) -> None:
@ -13,11 +12,14 @@ class BaremetricsHandler(object):
'Authorization': 'Bearer ' + self.api_key 'Authorization': 'Bearer ' + self.api_key
} }
self.commands = ['help', 'list-commands', 'account-info', 'list-sources', 'list-plans <source_id>', self.commands = ['help',
'list-customers <source_id>', 'list-subscriptions <source_id>', 'create-plan <source_id> ' 'list-commands',
'<oid> <name> <currency> ' 'account-info',
'<amount> <interval> ' 'list-sources',
'<interval_count>'] 'list-plans <source_id>',
'list-customers <source_id>',
'list-subscriptions <source_id>',
'create-plan <source_id> <oid> <name> <currency> <amount> <interval> <interval_count>']
self.descriptions = ['Display bot info', 'Display the list of available commands', 'Display the account info', self.descriptions = ['Display bot info', 'Display the list of available commands', 'Display the account info',
'List the sources', 'List the plans for the source', 'List the customers in the source', 'List the sources', 'List the plans for the source', 'List the customers in the source',
@ -199,7 +201,7 @@ class BaremetricsHandler(object):
'amount': int(parameters[4]), 'amount': int(parameters[4]),
'interval': parameters[5], 'interval': parameters[5],
'interval_count': int(parameters[6]) 'interval_count': int(parameters[6])
} } # type: Any
url = 'https://api.baremetrics.com/v1/{}/plans'.format(parameters[0]) url = 'https://api.baremetrics.com/v1/{}/plans'.format(parameters[0])
create_plan_response = requests.post(url, data=data_header, headers=self.auth_header) create_plan_response = requests.post(url, data=data_header, headers=self.auth_header)

View file

@ -0,0 +1,64 @@
{
"request": {
"method": "POST",
"api_url": "https://api.baremetrics.com/v1/TEST/plans",
"headers": {
"Authorization": "Bearer TEST"
},
"data": {
"oid": "1",
"name": "TEST",
"currency": "USD",
"amount": 123,
"interval": "TEST",
"interval_count": 123
}
},
"response": {
"plan": {
"oid": "1",
"source_id": "TEST",
"source": "TEST",
"name": "TEST",
"interval": "TEST",
"interval_count": 123,
"trial_duration": null,
"trial_duration_unit": null,
"created": null,
"active": true,
"setup_fees": 0,
"amounts": [
{
"currency": "USD",
"symbol": "$",
"symbol_right": false,
"amount": 1
}
]
}
},
"response-headers": {
"X-TokenExpires": "0",
"Server": "cloudflare-nginx",
"X-RateLimit-Remaining": "3593",
"X-Powered-By": "Phusion Passenger 5.0.30",
"Set-Cookie": "__cfduid=dd26464e3e6779b6a05b27d2681aea0851514374567; expires=Thu, 27-Dec-18 11:36:07 GMT; path=/; domain=.baremetrics.com; HttpOnly; Secure, LSW_WEB=\"LSW_WEB1\"; path=/",
"X-Runtime": "0.031730",
"Access-Control-Allow-Credentials": "false",
"Access-Control-Allow-Methods": "GET, OPTIONS, POST, PUT, DELETE",
"Content-Encoding": "gzip",
"Connection": "keep-alive",
"ETag": "W/\"110de39b319ed195bf1414ac4f3c9a01\"",
"Date": "Wed, 27 Dec 2017 11:36:08 GMT",
"X-RateLimit-Limit": "3600",
"X-Version": "721",
"X-Commit": "2dcec7190a2bd01c8d3d8527d386486c4bb5474c",
"Status": "200 OK",
"Content-Type": "application/json; charset=utf-8",
"Transfer-Encoding": "chunked",
"Access-Control-Allow-Headers": "Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type",
"Cache-Control": "max-age=0, private, must-revalidate",
"X-Request-Id": "0b292131-81bb-4df2-bdb9-089a50b17e63",
"CF-RAY": "3d3bfaf6feee2eff-DEL"
}
}

View file

@ -24,12 +24,17 @@ class TestBaremetricsBot(BotTestCase):
def test_list_commands_command(self) -> None: def test_list_commands_command(self) -> None:
with self.mock_config_info({'api_key': 'TEST'}), \ with self.mock_config_info({'api_key': 'TEST'}), \
patch('requests.get'): patch('requests.get'):
self.verify_reply('list-commands', '**Available Commands:** \n - help : Display bot info\n - list-commands ' self.verify_reply('list-commands', '**Available Commands:** \n'
': Display the list of available commands\n - account-info : Display ' ' - help : Display bot info\n'
'the account info\n - list-sources : List the sources\n - list-plans ' ' - list-commands : Display the list of available commands\n'
'<source_id> : List the plans for the source\n - list-customers ' ' - account-info : Display the account info\n'
'<source_id> : List the customers in the source\n - list-subscriptions ' ' - list-sources : List the sources\n'
'<source_id> : List the subscriptions in the source\n') ' - list-plans <source_id> : List the plans for the source\n'
' - list-customers <source_id> : List the customers in the source\n'
' - list-subscriptions <source_id> : List the subscriptions in the '
'source\n'
' - create-plan <source_id> <oid> <name> <currency> <amount> <interval> '
'<interval_count> : Create a plan in the given source\n')
def test_account_info_command(self) -> None: def test_account_info_command(self) -> None:
with self.mock_config_info({'api_key': 'TEST'}): with self.mock_config_info({'api_key': 'TEST'}):
@ -91,3 +96,9 @@ class TestBaremetricsBot(BotTestCase):
patch('requests.get'): patch('requests.get'):
with self.mock_http_conversation('test_key_error'): with self.mock_http_conversation('test_key_error'):
self.verify_reply('list-plans TEST', 'Invalid Response From API.') self.verify_reply('list-plans TEST', 'Invalid Response From API.')
def test_create_plan_command(self) -> None:
with self.mock_config_info({'api_key': 'TEST'}), \
patch('requests.get'):
with self.mock_http_conversation('create_plan'):
self.verify_reply('create-plan TEST 1 TEST USD 123 TEST 123', 'Plan Created.')