interactive bots: Create Baremetrics bot.
This commit is contained in:
parent
b80a0cb297
commit
d8c6cb7c0a
0
zulip_bots/zulip_bots/bots/baremetrics/__init__.py
Normal file
0
zulip_bots/zulip_bots/bots/baremetrics/__init__.py
Normal file
BIN
zulip_bots/zulip_bots/bots/baremetrics/assets/list-commands.png
Normal file
BIN
zulip_bots/zulip_bots/bots/baremetrics/assets/list-commands.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
2
zulip_bots/zulip_bots/bots/baremetrics/baremetrics.conf
Normal file
2
zulip_bots/zulip_bots/bots/baremetrics/baremetrics.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
[baremetrics]
|
||||
api_key = <api_key>
|
172
zulip_bots/zulip_bots/bots/baremetrics/baremetrics.py
Normal file
172
zulip_bots/zulip_bots/bots/baremetrics/baremetrics.py
Normal file
|
@ -0,0 +1,172 @@
|
|||
# See readme.md for instructions on running this code.
|
||||
|
||||
from typing import Any
|
||||
import requests
|
||||
|
||||
class BaremetricsHandler(object):
|
||||
def initialize(self, bot_handler: Any) -> None:
|
||||
self.config_info = bot_handler.get_config_info('baremetrics')
|
||||
self.api_key = self.config_info['api_key']
|
||||
|
||||
self.auth_header = {
|
||||
'Authorization': 'Bearer ' + self.api_key
|
||||
}
|
||||
|
||||
self.commands = ['help', 'list-commands', 'account-info', 'list-sources', 'list-plans <source_id>',
|
||||
'list-customers <source_id>',
|
||||
'list-subscriptions <source_id>']
|
||||
|
||||
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 subscriptions in the source']
|
||||
|
||||
def usage(self) -> str:
|
||||
return '''
|
||||
This bot gives updates about customer behavior, financial performance, and analytics
|
||||
for an organization using the Baremetrics Api.\n
|
||||
Enter `list-commands` to show the list of available commands.
|
||||
Version 1.0
|
||||
'''
|
||||
|
||||
def handle_message(self, message: Any, bot_handler: Any) -> None:
|
||||
message['content'] = message['content'].strip()
|
||||
|
||||
if message['content'].lower() == 'help':
|
||||
bot_handler.send_reply(message, self.usage())
|
||||
return
|
||||
|
||||
if message['content'].lower() == 'list-commands':
|
||||
response = '**Available Commands:** \n'
|
||||
for command, description in zip(self.commands, self.descriptions):
|
||||
response += ' - {} : {}\n'.format(command, description)
|
||||
|
||||
bot_handler.send_reply(message, response)
|
||||
return
|
||||
|
||||
if message['content'] == '':
|
||||
bot_handler.send_reply(message, 'No Command Specified')
|
||||
return
|
||||
|
||||
response = self.generate_response(message['content'])
|
||||
bot_handler.send_reply(message, response)
|
||||
|
||||
def generate_response(self, command: str) -> str:
|
||||
try:
|
||||
if command.lower() == 'account-info':
|
||||
return self.get_account_info()
|
||||
|
||||
if command.lower() == 'list-sources':
|
||||
return self.get_sources()
|
||||
|
||||
part_commands = command.split()
|
||||
|
||||
try:
|
||||
if part_commands[0].lower() == 'list-plans':
|
||||
return self.get_plans(part_commands[1])
|
||||
|
||||
if part_commands[0].lower() == 'list-customers':
|
||||
return self.get_customers(part_commands[1])
|
||||
|
||||
if part_commands[0].lower() == 'list-subscriptions':
|
||||
return self.get_subscriptions(part_commands[1])
|
||||
|
||||
except IndexError:
|
||||
return 'Missing Params.'
|
||||
except KeyError:
|
||||
return 'Invalid Response From API.'
|
||||
|
||||
return 'Invalid Command.'
|
||||
|
||||
def get_account_info(self) -> str:
|
||||
url = "https://api.baremetrics.com/v1/account"
|
||||
account_response = requests.get(url, headers=self.auth_header)
|
||||
|
||||
account_data = account_response.json()
|
||||
account_data = account_data['account']
|
||||
|
||||
response = '**Your account information:** \n'
|
||||
response += 'Id: {id}\n'.format(id=account_data['id'])
|
||||
response += 'Company: {company}\n'.format(company=account_data['company'])
|
||||
response += 'Default Currency: {currency_name}'.format(currency_name=account_data['default_currency']['name'])
|
||||
|
||||
return response
|
||||
|
||||
def get_sources(self) -> str:
|
||||
url = 'https://api.baremetrics.com/v1/sources'
|
||||
sources_response = requests.get(url, headers=self.auth_header)
|
||||
|
||||
sources_data = sources_response.json()
|
||||
sources_data = sources_data['sources']
|
||||
|
||||
response = '**Listing sources:** \n'
|
||||
for index, source in enumerate(sources_data):
|
||||
response += '{}.ID: {}\nProvider: {}\nProvider ID: {}\n\n'.format(index + 1, source['id'],
|
||||
source['provider'],
|
||||
source['provider_id'])
|
||||
|
||||
return response
|
||||
|
||||
def get_plans(self, source_id: str) -> str:
|
||||
url = 'https://api.baremetrics.com/v1/{}/plans'.format(source_id)
|
||||
plans_response = requests.get(url, headers=self.auth_header)
|
||||
|
||||
plans_data = plans_response.json()
|
||||
plans_data = plans_data['plans']
|
||||
|
||||
template = '{}.Name: {}\nActive: {}\nInterval: {}\nInterval Count: {}\nAmounts: \n'
|
||||
response = '**Listing plans:** \n'
|
||||
for index, plan in enumerate(plans_data):
|
||||
response += template.format(index + 1, plan['name'], plan['active'], plan['interval'],
|
||||
plan['interval_count'])
|
||||
|
||||
for amount in plan['amounts']:
|
||||
response += ' - {} {}\n'.format(amount['amount'], amount['currency'])
|
||||
|
||||
response += '\n'
|
||||
|
||||
return response
|
||||
|
||||
def get_customers(self, source_id: str) -> str:
|
||||
url = 'https://api.baremetrics.com/v1/{}/customers'.format(source_id)
|
||||
customers_response = requests.get(url, headers=self.auth_header)
|
||||
|
||||
customers_data = customers_response.json()
|
||||
customers_data = customers_data['customers']
|
||||
|
||||
template = '{}.Name: {}\nDisplay Name: {}\nOID: {}\nActive: {}\nEmail: {}\nNotes: {}\nCurrent Plans: \n'
|
||||
response = '**Listing customers:** \n'
|
||||
for index, customer in enumerate(customers_data):
|
||||
response += template.format(index + 1, customer['display_name'], customer['name'], customer['oid'],
|
||||
customer['is_active'], customer['email'], customer['notes'])
|
||||
|
||||
for plan in customer['current_plans']:
|
||||
response += ' - {}\n'.format(plan['name'])
|
||||
|
||||
response += '\n'
|
||||
|
||||
return response
|
||||
|
||||
def get_subscriptions(self, source_id: str) -> str:
|
||||
url = 'https://api.baremetrics.com/v1/{}/subscriptions'.format(source_id)
|
||||
subscriptions_response = requests.get(url, headers=self.auth_header)
|
||||
|
||||
subscriptions_data = subscriptions_response.json()
|
||||
subscriptions_data = subscriptions_data['subscriptions']
|
||||
|
||||
template = '{}.Customer Name: {}\nCustomer Display Name: {}\nCustomer OID: {}\nCustomer Email: {}\n' \
|
||||
'Active: {}\nPlan Name: {}\nPlan Amounts: \n'
|
||||
response = '**Listing subscriptions:** \n'
|
||||
for index, subscription in enumerate(subscriptions_data):
|
||||
response += template.format(index + 1, subscription['customer']['name'],
|
||||
subscription['customer']['display_name'],
|
||||
subscription['customer']['oid'], subscription['customer']['email'],
|
||||
subscription['active'], subscription['plan']['name'])
|
||||
|
||||
for amount in subscription['plan']['amounts']:
|
||||
response += ' - {} {}\n'.format(amount['amount'], amount['symbol'])
|
||||
|
||||
response += '\n'
|
||||
|
||||
return response
|
||||
|
||||
handler_class = BaremetricsHandler
|
41
zulip_bots/zulip_bots/bots/baremetrics/doc.md
Normal file
41
zulip_bots/zulip_bots/bots/baremetrics/doc.md
Normal file
|
@ -0,0 +1,41 @@
|
|||
# Baremetrics bot
|
||||
|
||||
The Baremetrics bot is a Zulip bot that gives updates about customer behavior, financial performance, and
|
||||
analytics for an organization using the [Baremetrics](https://baremetrics.com/) API.
|
||||
|
||||
To use the Baremetrics bot, you can simply call it with `@<botname>` followed
|
||||
by a command, like so:
|
||||
|
||||
```
|
||||
@Baremetrics help
|
||||
```
|
||||
|
||||
## Setup
|
||||
|
||||
Before usage, you will need to configure the bot by putting the value of the `<api_key>` in the config file.
|
||||
To do this, follow the given steps:
|
||||
|
||||
1. Login at [Baremetrics Console](https://app.baremetrics.com/settings/api).
|
||||
2. Note the `Live API Key`.
|
||||
3. Open up `zulip_bots/bots/baremetrics/baremetrics.conf` in an editor and
|
||||
change the value of the `<api_key>` attribute to the noted `Live API Key`.
|
||||
|
||||
## Developer Notes
|
||||
|
||||
Be sure to add the command and its description to their respective lists (named `commands` and `descriptions`)
|
||||
so that it can be displayed with the other available commands using `@<botname> list-commands`. Also modify
|
||||
the `test_list_commands_command` in `test_baremetrics.py`.
|
||||
|
||||
## Links
|
||||
|
||||
- [Baremetrics](https://baremetrics.com/)
|
||||
- [Baremetrics Developer API](https://developers.baremetrics.com/reference)
|
||||
- [Baremetrics Dashboard](https://app.baremetrics.com/setup)
|
||||
|
||||
## Usage
|
||||
|
||||
`@Baremetrics list-commands` - This command gives a list of all available commands along with short
|
||||
short descriptions.
|
||||
|
||||
Example:
|
||||
![](assets/list-commands.png)
|
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"request": {
|
||||
"api_url": "https://api.baremetrics.com/v1/account",
|
||||
"headers": {
|
||||
"Authorization": "Bearer TEST"
|
||||
}
|
||||
},
|
||||
"response": {
|
||||
"account": {
|
||||
"id": 376418,
|
||||
"default_currency": {
|
||||
"id": "usd",
|
||||
"alternate_symbols": [
|
||||
"US$"
|
||||
],
|
||||
"decimal_mark": ".",
|
||||
"disambiguate_symbol": "US$",
|
||||
"html_entity": "$",
|
||||
"iso_code": "USD",
|
||||
"iso_numeric": "840",
|
||||
"name": "United States Dollar",
|
||||
"priority": 1,
|
||||
"smallest_denomination": 1,
|
||||
"subunit": "Cent",
|
||||
"subunit_to_unit": 100,
|
||||
"symbol": "$",
|
||||
"symbol_first": true,
|
||||
"thousands_separator": ","
|
||||
},
|
||||
"company": "NA",
|
||||
"created_at": 1514301115,
|
||||
"stack": "seg"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"request": {
|
||||
"api_url": "https://api.baremetrics.com/v1/TEST/customers",
|
||||
"headers": {
|
||||
"Authorization": "Bearer TEST"
|
||||
}
|
||||
},
|
||||
"response": {
|
||||
"customers": [],
|
||||
"meta": {
|
||||
"pagination": {
|
||||
"has_more": false,
|
||||
"page": 0,
|
||||
"per_page": 30,
|
||||
"total_count": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
"request": {
|
||||
"api_url": "https://api.baremetrics.com/v1/TEST/plans",
|
||||
"headers": {
|
||||
"Authorization": "Bearer TEST"
|
||||
}
|
||||
},
|
||||
"response": {
|
||||
"plans": [],
|
||||
"meta": {
|
||||
"pagination": {
|
||||
"has_more": false,
|
||||
"page": 0,
|
||||
"per_page": 30
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"request": {
|
||||
"api_url": "https://api.baremetrics.com/v1/sources",
|
||||
"headers": {
|
||||
"Authorization": "Bearer TEST"
|
||||
}
|
||||
},
|
||||
"response": {
|
||||
"sources": [
|
||||
{
|
||||
"id": "5f7QC5NC0Ywgcu",
|
||||
"provider": "baremetrics",
|
||||
"provider_id": null
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"pagination": {
|
||||
"has_more": false,
|
||||
"page": 0,
|
||||
"per_page": 30
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
"request": {
|
||||
"api_url": "https://api.baremetrics.com/v1/TEST/subscriptions",
|
||||
"headers": {
|
||||
"Authorization": "Bearer TEST"
|
||||
}
|
||||
},
|
||||
"response": {
|
||||
"subscriptions": [],
|
||||
"meta": {
|
||||
"pagination": {
|
||||
"has_more": false,
|
||||
"page": 0,
|
||||
"per_page": 30
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
53
zulip_bots/zulip_bots/bots/baremetrics/test_baremetrics.py
Normal file
53
zulip_bots/zulip_bots/bots/baremetrics/test_baremetrics.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
from zulip_bots.test_lib import BotTestCase
|
||||
|
||||
class TestBaremetricsBot(BotTestCase):
|
||||
bot_name = "baremetrics"
|
||||
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info({'api_key': 'TEST'}):
|
||||
self.verify_reply('', 'No Command Specified')
|
||||
|
||||
def test_help_query(self) -> None:
|
||||
with self.mock_config_info({'api_key': 'TEST'}):
|
||||
self.verify_reply('help', '''
|
||||
This bot gives updates about customer behavior, financial performance, and analytics
|
||||
for an organization using the Baremetrics Api.\n
|
||||
Enter `list-commands` to show the list of available commands.
|
||||
Version 1.0
|
||||
''')
|
||||
|
||||
def test_list_commands_command(self) -> None:
|
||||
with self.mock_config_info({'api_key': 'TEST'}):
|
||||
self.verify_reply('list-commands', '**Available Commands:** \n - help : Display bot info\n - list-commands '
|
||||
': Display the list of available commands\n - account-info : Display '
|
||||
'the account info\n - list-sources : List the sources\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')
|
||||
|
||||
def test_account_info_command(self) -> None:
|
||||
with self.mock_config_info({'api_key': 'TEST'}):
|
||||
with self.mock_http_conversation('account_info'):
|
||||
self.verify_reply('account-info', '**Your account information:** \nId: 376418\nCompany: NA\nDefault '
|
||||
'Currency: United States Dollar')
|
||||
|
||||
def test_list_sources_command(self) -> None:
|
||||
with self.mock_config_info({'api_key': 'TEST'}):
|
||||
with self.mock_http_conversation('list_sources'):
|
||||
self.verify_reply('list-sources', '**Listing sources:** \n1.ID: 5f7QC5NC0Ywgcu\nProvider: '
|
||||
'baremetrics\nProvider ID: None\n\n')
|
||||
|
||||
def test_list_plans_command(self) -> None:
|
||||
with self.mock_config_info({'api_key': 'TEST'}):
|
||||
with self.mock_http_conversation('list_plans'):
|
||||
self.verify_reply('list-plans TEST', '**Listing plans:** \n')
|
||||
|
||||
def test_list_customers_command(self) -> None:
|
||||
with self.mock_config_info({'api_key': 'TEST'}):
|
||||
with self.mock_http_conversation('list_customers'):
|
||||
self.verify_reply('list-customers TEST', '**Listing customers:** \n')
|
||||
|
||||
def test_list_subscriptions_command(self) -> None:
|
||||
with self.mock_config_info({'api_key': 'TEST'}):
|
||||
with self.mock_http_conversation('list_subscriptions'):
|
||||
self.verify_reply('list-subscriptions TEST', '**Listing subscriptions:** \n')
|
Loading…
Reference in a new issue