Getting rid of 'name' and 'tags' for workbook create/update
Change-Id: I745af78861d098f4f8dedbcf1045d55cdd6e328b
This commit is contained in:
@@ -22,31 +22,15 @@ class Workbook(base.Resource):
|
|||||||
class WorkbookManager(base.ResourceManager):
|
class WorkbookManager(base.ResourceManager):
|
||||||
resource_class = Workbook
|
resource_class = Workbook
|
||||||
|
|
||||||
def create(self, name, tags=None, definition=None):
|
def create(self, definition):
|
||||||
self._ensure_not_empty(name=name)
|
self._ensure_not_empty(definition=definition)
|
||||||
|
|
||||||
data = {
|
return self._create('/workbooks', {'definition': definition})
|
||||||
'name': name,
|
|
||||||
'tags': tags,
|
|
||||||
}
|
|
||||||
|
|
||||||
if definition:
|
def update(self, definition):
|
||||||
data.update({'definition': definition})
|
self._ensure_not_empty(definition=definition)
|
||||||
|
|
||||||
return self._create('/workbooks', data)
|
return self._update('/workbooks', {'definition': definition})
|
||||||
|
|
||||||
def update(self, name, tags=None, definition=None):
|
|
||||||
self._ensure_not_empty(name=name)
|
|
||||||
|
|
||||||
data = {
|
|
||||||
'name': name,
|
|
||||||
'tags': tags,
|
|
||||||
}
|
|
||||||
|
|
||||||
if definition:
|
|
||||||
data.update({'definition': definition})
|
|
||||||
|
|
||||||
return self._update('/workbooks/%s' % name, data)
|
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
return self._list('/workbooks', response_key='workbooks')
|
return self._list('/workbooks', response_key='workbooks')
|
||||||
|
@@ -69,9 +69,7 @@ class Get(show.ShowOne):
|
|||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(Get, self).get_parser(prog_name)
|
parser = super(Get, self).get_parser(prog_name)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument('id', help='Execution identifier')
|
||||||
'id',
|
|
||||||
help='Execution identifier')
|
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@@ -87,17 +85,21 @@ class Create(show.ShowOne):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(Create, self).get_parser(prog_name)
|
parser = super(Create, self).get_parser(prog_name)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'workflow_name',
|
'workflow_name',
|
||||||
help='Execution workflow')
|
help='Execution workflow'
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'workflow_input',
|
'workflow_input',
|
||||||
nargs='?',
|
nargs='?',
|
||||||
help='Workflow input')
|
help='Workflow input'
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'params',
|
'params',
|
||||||
nargs='?',
|
nargs='?',
|
||||||
help='Workflow additional parameters')
|
help='Workflow additional parameters'
|
||||||
|
)
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@@ -132,9 +134,7 @@ class Delete(command.Command):
|
|||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(Delete, self).get_parser(prog_name)
|
parser = super(Delete, self).get_parser(prog_name)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument('id', help='Execution identifier')
|
||||||
'id',
|
|
||||||
help='Execution identifier')
|
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@@ -150,11 +150,13 @@ class Update(show.ShowOne):
|
|||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'id',
|
'id',
|
||||||
help='Execution identifier')
|
help='Execution identifier'
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'state',
|
'state',
|
||||||
choices=['RUNNING', 'SUSPENDED', 'STOPPED', 'SUCCESS', 'ERROR'],
|
choices=['RUNNING', 'SUSPENDED', 'STOPPED', 'SUCCESS', 'ERROR'],
|
||||||
help='Execution state')
|
help='Execution state'
|
||||||
|
)
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@@ -171,9 +173,8 @@ class GetInput(command.Command):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(GetInput, self).get_parser(prog_name)
|
parser = super(GetInput, self).get_parser(prog_name)
|
||||||
parser.add_argument(
|
|
||||||
'id',
|
parser.add_argument('id', help='Execution ID')
|
||||||
help='Execution ID')
|
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@@ -195,9 +196,8 @@ class GetOutput(command.Command):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(GetOutput, self).get_parser(prog_name)
|
parser = super(GetOutput, self).get_parser(prog_name)
|
||||||
parser.add_argument(
|
|
||||||
'id',
|
parser.add_argument('id', help='Execution ID')
|
||||||
help='Execution ID')
|
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
@@ -70,9 +70,12 @@ class Get(show.ShowOne):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(Get, self).get_parser(prog_name)
|
parser = super(Get, self).get_parser(prog_name)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'name',
|
'name',
|
||||||
help='Workbook name')
|
help='Workbook name'
|
||||||
|
)
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
@@ -87,16 +90,9 @@ class Create(show.ShowOne):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(Create, self).get_parser(prog_name)
|
parser = super(Create, self).get_parser(prog_name)
|
||||||
parser.add_argument(
|
|
||||||
'name',
|
|
||||||
help='Workbook name')
|
|
||||||
parser.add_argument(
|
|
||||||
'tags',
|
|
||||||
nargs='?',
|
|
||||||
help='Workbook tags separated by ","')
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'definition',
|
'definition',
|
||||||
nargs='?',
|
|
||||||
type=argparse.FileType('r'),
|
type=argparse.FileType('r'),
|
||||||
help='Workbook definition file'
|
help='Workbook definition file'
|
||||||
)
|
)
|
||||||
@@ -104,15 +100,8 @@ class Create(show.ShowOne):
|
|||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
if parsed_args.definition:
|
workbook = workbooks.WorkbookManager(self.app.client)\
|
||||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
.create(parsed_args.definition.read())
|
||||||
.create(parsed_args.name,
|
|
||||||
str(parsed_args.tags).split(','),
|
|
||||||
parsed_args.definition.read())
|
|
||||||
else:
|
|
||||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
|
||||||
.create(parsed_args.name,
|
|
||||||
str(parsed_args.tags).split(','), None)
|
|
||||||
|
|
||||||
return format(workbook)
|
return format(workbook)
|
||||||
|
|
||||||
@@ -122,9 +111,8 @@ class Delete(command.Command):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(Delete, self).get_parser(prog_name)
|
parser = super(Delete, self).get_parser(prog_name)
|
||||||
parser.add_argument(
|
|
||||||
'name',
|
parser.add_argument('name', help='Workbook name')
|
||||||
help='Workbook name')
|
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@@ -137,57 +125,20 @@ class Update(show.ShowOne):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(Update, self).get_parser(prog_name)
|
parser = super(Update, self).get_parser(prog_name)
|
||||||
parser.add_argument(
|
|
||||||
'name',
|
|
||||||
help='Workbook name')
|
|
||||||
parser.add_argument(
|
|
||||||
'tags',
|
|
||||||
nargs='?',
|
|
||||||
help='Workbook tags separated by ","')
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'definition',
|
'definition',
|
||||||
nargs='?',
|
|
||||||
type=argparse.FileType('r'),
|
type=argparse.FileType('r'),
|
||||||
help='Workbook definition file'
|
help='Workbook definition file'
|
||||||
)
|
)
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
|
||||||
if parsed_args.definition:
|
|
||||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
|
||||||
.update(parsed_args.name,
|
|
||||||
str(parsed_args.tags).split(','),
|
|
||||||
parsed_args.definition.read())
|
|
||||||
return format(workbook)
|
|
||||||
else:
|
|
||||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
|
||||||
.update(parsed_args.name,
|
|
||||||
tags=str(parsed_args.tags).split(','))
|
|
||||||
return format(workbook)
|
|
||||||
|
|
||||||
|
|
||||||
class UploadDefinition(command.Command):
|
|
||||||
"""Upload workbook definition."""
|
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
|
||||||
parser = super(UploadDefinition, self).get_parser(prog_name)
|
|
||||||
parser.add_argument(
|
|
||||||
'name',
|
|
||||||
help='Workbook name')
|
|
||||||
parser.add_argument(
|
|
||||||
'path',
|
|
||||||
type=argparse.FileType('r'),
|
|
||||||
help='Workbook definition file')
|
|
||||||
|
|
||||||
return parser
|
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
workbook = workbooks.WorkbookManager(self.app.client)\
|
||||||
.update(parsed_args.name,
|
.update(parsed_args.definition.read())
|
||||||
definition=parsed_args.path.read())
|
|
||||||
|
|
||||||
self.app.stdout.write(workbook.definition or "\n")
|
return format(workbook)
|
||||||
|
|
||||||
|
|
||||||
class GetDefinition(command.Command):
|
class GetDefinition(command.Command):
|
||||||
@@ -195,9 +146,8 @@ class GetDefinition(command.Command):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(GetDefinition, self).get_parser(prog_name)
|
parser = super(GetDefinition, self).get_parser(prog_name)
|
||||||
parser.add_argument(
|
|
||||||
'name',
|
parser.add_argument('name', help='Workbook name')
|
||||||
help='Workbook name')
|
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
@@ -235,8 +235,6 @@ class MistralShell(app.App):
|
|||||||
'workbook-create': mistralclient.commands.v2.workbooks.Create,
|
'workbook-create': mistralclient.commands.v2.workbooks.Create,
|
||||||
'workbook-delete': mistralclient.commands.v2.workbooks.Delete,
|
'workbook-delete': mistralclient.commands.v2.workbooks.Delete,
|
||||||
'workbook-update': mistralclient.commands.v2.workbooks.Update,
|
'workbook-update': mistralclient.commands.v2.workbooks.Update,
|
||||||
'workbook-upload-definition':
|
|
||||||
mistralclient.commands.v2.workbooks.UploadDefinition,
|
|
||||||
'workbook-get-definition':
|
'workbook-get-definition':
|
||||||
mistralclient.commands.v2.workbooks.GetDefinition,
|
mistralclient.commands.v2.workbooks.GetDefinition,
|
||||||
'execution-list': mistralclient.commands.v2.executions.List,
|
'execution-list': mistralclient.commands.v2.executions.List,
|
||||||
|
@@ -72,5 +72,7 @@ class BaseCommandTest(unittest2.TestCase):
|
|||||||
|
|
||||||
def call(self, command, app_args=[], prog_name=''):
|
def call(self, command, app_args=[], prog_name=''):
|
||||||
cmd = command(self.app, app_args)
|
cmd = command(self.app, app_args)
|
||||||
|
|
||||||
parsed_args = cmd.get_parser(prog_name).parse_args(app_args)
|
parsed_args = cmd.get_parser(prog_name).parse_args(app_args)
|
||||||
|
|
||||||
return cmd.take_action(parsed_args)
|
return cmd.take_action(parsed_args)
|
||||||
|
@@ -31,7 +31,12 @@ WORKBOOK_DICT = {
|
|||||||
|
|
||||||
|
|
||||||
WB_DEF = """
|
WB_DEF = """
|
||||||
Workflows:
|
---
|
||||||
|
version: '2.0
|
||||||
|
|
||||||
|
name: wb
|
||||||
|
|
||||||
|
workflows:
|
||||||
wf1:
|
wf1:
|
||||||
tasks:
|
tasks:
|
||||||
task1:
|
task1:
|
||||||
@@ -45,19 +50,23 @@ WORKBOOK_WITH_DEF = workbooks.Workbook(mock, WB_WITH_DEF_DICT)
|
|||||||
|
|
||||||
|
|
||||||
class TestCLIWorkbooksV2(base.BaseCommandTest):
|
class TestCLIWorkbooksV2(base.BaseCommandTest):
|
||||||
|
@mock.patch('argparse.open', create=True)
|
||||||
@mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.create')
|
@mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.create')
|
||||||
def test_create(self, mock):
|
def test_create(self, mock, mock_open):
|
||||||
mock.return_value = WORKBOOK
|
mock.return_value = WORKBOOK
|
||||||
|
mock_open.return_value = mock.MagicMock(spec=file)
|
||||||
|
|
||||||
result = self.call(workbook_cmd.Create, app_args=['name'])
|
result = self.call(workbook_cmd.Create, app_args=['wb.yaml'])
|
||||||
|
|
||||||
self.assertEqual(('a', 'a, b', '1', '1'), result[1])
|
self.assertEqual(('a', 'a, b', '1', '1'), result[1])
|
||||||
|
|
||||||
|
@mock.patch('argparse.open', create=True)
|
||||||
@mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.update')
|
@mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.update')
|
||||||
def test_update(self, mock):
|
def test_update(self, mock, mock_open):
|
||||||
mock.return_value = WORKBOOK
|
mock.return_value = WORKBOOK
|
||||||
|
mock_open.return_value = mock.MagicMock(spec=file)
|
||||||
|
|
||||||
result = self.call(workbook_cmd.Update, app_args=['name'])
|
result = self.call(workbook_cmd.Update, app_args=['definition'])
|
||||||
|
|
||||||
self.assertEqual(('a', 'a, b', '1', '1'), result[1])
|
self.assertEqual(('a', 'a, b', '1', '1'), result[1])
|
||||||
|
|
||||||
@@ -81,21 +90,7 @@ class TestCLIWorkbooksV2(base.BaseCommandTest):
|
|||||||
def test_delete(self, mock):
|
def test_delete(self, mock):
|
||||||
self.assertIsNone(self.call(workbook_cmd.Delete, app_args=['name']))
|
self.assertIsNone(self.call(workbook_cmd.Delete, app_args=['name']))
|
||||||
|
|
||||||
@mock.patch('argparse.open', create=True)
|
@mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.get')
|
||||||
@mock.patch(
|
|
||||||
'mistralclient.api.v2.workbooks.WorkbookManager.update'
|
|
||||||
)
|
|
||||||
def test_upload_definition(self, mock, mock_open):
|
|
||||||
mock.return_value = WORKBOOK_WITH_DEF
|
|
||||||
mock_open.return_value = mock.MagicMock(spec=file)
|
|
||||||
|
|
||||||
result = self.call(workbook_cmd.UploadDefinition,
|
|
||||||
app_args=['name', '1.txt'])
|
|
||||||
|
|
||||||
self.assertIsNone(result)
|
|
||||||
|
|
||||||
@mock.patch('mistralclient.api.v2.workbooks.'
|
|
||||||
'WorkbookManager.get')
|
|
||||||
def test_get_definition(self, mock):
|
def test_get_definition(self, mock):
|
||||||
mock.return_value = WORKBOOK_WITH_DEF
|
mock.return_value = WORKBOOK_WITH_DEF
|
||||||
|
|
||||||
|
@@ -24,62 +24,58 @@ WB_DEF = """
|
|||||||
---
|
---
|
||||||
version: 2.0
|
version: 2.0
|
||||||
|
|
||||||
|
name: wb
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
wf1:
|
wf1:
|
||||||
type: direct
|
type: direct
|
||||||
parameters:
|
input:
|
||||||
- param1
|
- param1
|
||||||
- param2
|
- param2
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
task1:
|
task1:
|
||||||
action: std.http url="localhost:8989"
|
action: std.http url="localhost:8989"
|
||||||
on-success: test_subsequent
|
on-success:
|
||||||
|
- test_subsequent
|
||||||
|
|
||||||
test_subsequent:
|
test_subsequent:
|
||||||
action: std.http url="http://some_url"
|
action: std.http url="http://some_url" server_id=1
|
||||||
parameters:
|
|
||||||
server_id: 1
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
WORKBOOK = {
|
WORKBOOK = {'definition': WB_DEF}
|
||||||
'name': "my_workbook",
|
|
||||||
'tags': ['deployment', 'demo'],
|
|
||||||
'definition': WB_DEF
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
URL_TEMPLATE = '/workbooks'
|
URL_TEMPLATE = '/workbooks'
|
||||||
URL_TEMPLATE_NAME = '/workbooks/%s'
|
URL_TEMPLATE_NAME = '/workbooks/%s'
|
||||||
URL_TEMPLATE_DEFINITION = '/workbooks/%s/definition'
|
|
||||||
|
|
||||||
|
|
||||||
class TestWorkbooksV2(base.BaseClientV2Test):
|
class TestWorkbooksV2(base.BaseClientV2Test):
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
mock = self.mock_http_post(content=WORKBOOK)
|
mock = self.mock_http_post(content=WORKBOOK)
|
||||||
|
|
||||||
wb = self.workbooks.create(WORKBOOK['name'],
|
wb = self.workbooks.create(WORKBOOK['definition'])
|
||||||
WORKBOOK['tags'],
|
|
||||||
WORKBOOK['definition'])
|
|
||||||
|
|
||||||
self.assertIsNotNone(wb)
|
self.assertIsNotNone(wb)
|
||||||
self.assertEqual(workbooks.Workbook(self.workbooks,
|
self.assertEqual(
|
||||||
WORKBOOK).__dict__, wb.__dict__)
|
workbooks.Workbook(self.workbooks, WORKBOOK).__dict__,
|
||||||
|
wb.__dict__
|
||||||
|
)
|
||||||
|
|
||||||
mock.assert_called_once_with(URL_TEMPLATE, json.dumps(WORKBOOK))
|
mock.assert_called_once_with(URL_TEMPLATE, json.dumps(WORKBOOK))
|
||||||
|
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
mock = self.mock_http_put(content=WORKBOOK)
|
mock = self.mock_http_put(content=WORKBOOK)
|
||||||
|
|
||||||
wb = self.workbooks.update(WORKBOOK['name'],
|
wb = self.workbooks.update(WORKBOOK['definition'])
|
||||||
WORKBOOK['tags'],
|
|
||||||
WORKBOOK['definition'])
|
|
||||||
|
|
||||||
self.assertIsNotNone(wb)
|
self.assertIsNotNone(wb)
|
||||||
self.assertEqual(workbooks.Workbook(self.workbooks,
|
self.assertEqual(
|
||||||
WORKBOOK).__dict__, wb.__dict__)
|
workbooks.Workbook(self.workbooks, WORKBOOK).__dict__,
|
||||||
mock.assert_called_once_with(
|
wb.__dict__
|
||||||
URL_TEMPLATE_NAME % WORKBOOK['name'],
|
)
|
||||||
json.dumps(WORKBOOK))
|
|
||||||
|
mock.assert_called_once_with(URL_TEMPLATE, json.dumps(WORKBOOK))
|
||||||
|
|
||||||
def test_list(self):
|
def test_list(self):
|
||||||
mock = self.mock_http_get(content={'workbooks': [WORKBOOK]})
|
mock = self.mock_http_get(content={'workbooks': [WORKBOOK]})
|
||||||
@@ -87,25 +83,32 @@ class TestWorkbooksV2(base.BaseClientV2Test):
|
|||||||
workbook_list = self.workbooks.list()
|
workbook_list = self.workbooks.list()
|
||||||
|
|
||||||
self.assertEqual(1, len(workbook_list))
|
self.assertEqual(1, len(workbook_list))
|
||||||
|
|
||||||
wb = workbook_list[0]
|
wb = workbook_list[0]
|
||||||
|
|
||||||
self.assertEqual(workbooks.Workbook(self.workbooks,
|
self.assertEqual(
|
||||||
WORKBOOK).__dict__, wb.__dict__)
|
workbooks.Workbook(self.workbooks, WORKBOOK).__dict__,
|
||||||
|
wb.__dict__
|
||||||
|
)
|
||||||
|
|
||||||
mock.assert_called_once_with(URL_TEMPLATE)
|
mock.assert_called_once_with(URL_TEMPLATE)
|
||||||
|
|
||||||
def test_get(self):
|
def test_get(self):
|
||||||
mock = self.mock_http_get(content=WORKBOOK)
|
mock = self.mock_http_get(content=WORKBOOK)
|
||||||
|
|
||||||
wb = self.workbooks.get(WORKBOOK['name'])
|
wb = self.workbooks.get('wb')
|
||||||
|
|
||||||
self.assertIsNotNone(wb)
|
self.assertIsNotNone(wb)
|
||||||
self.assertEqual(workbooks.Workbook(self.workbooks,
|
self.assertEqual(
|
||||||
WORKBOOK).__dict__, wb.__dict__)
|
workbooks.Workbook(self.workbooks, WORKBOOK).__dict__,
|
||||||
mock.assert_called_once_with(URL_TEMPLATE_NAME % WORKBOOK['name'])
|
wb.__dict__
|
||||||
|
)
|
||||||
|
|
||||||
|
mock.assert_called_once_with(URL_TEMPLATE_NAME % 'wb')
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
mock = self.mock_http_delete(status_code=204)
|
mock = self.mock_http_delete(status_code=204)
|
||||||
|
|
||||||
self.workbooks.delete(WORKBOOK['name'])
|
self.workbooks.delete('wb')
|
||||||
|
|
||||||
mock.assert_called_once_with(URL_TEMPLATE_NAME % WORKBOOK['name'])
|
mock.assert_called_once_with(URL_TEMPLATE_NAME % 'wb')
|
||||||
|
Reference in New Issue
Block a user