|
@@ -197,7 +197,7 @@ class ReceivableCostFilterOptionsToolTest(ToolLoaderMixin, unittest.TestCase):
|
|
|
'ListReceivableCostFilterOptionsTool',
|
|
'ListReceivableCostFilterOptionsTool',
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- def test_schema_has_exact_types_and_customer_dependency(self):
|
|
|
|
|
|
|
+ def test_schema_has_exact_types_and_optional_customer_id(self):
|
|
|
metadata = self.tool_class()().metadata()
|
|
metadata = self.tool_class()().metadata()
|
|
|
schema = metadata['input_schema']
|
|
schema = metadata['input_schema']
|
|
|
self.assertFalse(schema['additionalProperties'])
|
|
self.assertFalse(schema['additionalProperties'])
|
|
@@ -210,10 +210,12 @@ class ReceivableCostFilterOptionsToolTest(ToolLoaderMixin, unittest.TestCase):
|
|
|
{'type': 'integer', 'minimum': 1},
|
|
{'type': 'integer', 'minimum': 1},
|
|
|
schema['properties']['customer_id'],
|
|
schema['properties']['customer_id'],
|
|
|
)
|
|
)
|
|
|
|
|
+ self.assertNotIn('allOf', schema)
|
|
|
self.assertIn('子客户', json.dumps(schema, ensure_ascii=False))
|
|
self.assertIn('子客户', json.dumps(schema, ensure_ascii=False))
|
|
|
self.assertIn('禁止猜测', metadata['description'])
|
|
self.assertIn('禁止猜测', metadata['description'])
|
|
|
|
|
+ self.assertIn('可选', metadata['description'])
|
|
|
|
|
|
|
|
- def test_call_forwards_and_enforces_customer_linkage(self):
|
|
|
|
|
|
|
+ def test_call_forwards_sub_customer_with_optional_customer_id(self):
|
|
|
tool_class = self.tool_class()
|
|
tool_class = self.tool_class()
|
|
|
client = RecordingApiClient()
|
|
client = RecordingApiClient()
|
|
|
tool = tool_class(client)
|
|
tool = tool_class(client)
|
|
@@ -237,9 +239,18 @@ class ReceivableCostFilterOptionsToolTest(ToolLoaderMixin, unittest.TestCase):
|
|
|
},
|
|
},
|
|
|
'rq_filters',
|
|
'rq_filters',
|
|
|
), client.calls[-1])
|
|
), client.calls[-1])
|
|
|
|
|
+ tool.call(filter_type='子客户')
|
|
|
|
|
+ self.assertEqual(
|
|
|
|
|
+ {
|
|
|
|
|
+ 'filter_type': '子客户',
|
|
|
|
|
+ 'keyword': '',
|
|
|
|
|
+ 'page': 1,
|
|
|
|
|
+ 'limit': 20,
|
|
|
|
|
+ },
|
|
|
|
|
+ client.calls[-1][2],
|
|
|
|
|
+ )
|
|
|
tool.call(filter_type='主客户')
|
|
tool.call(filter_type='主客户')
|
|
|
for arguments in (
|
|
for arguments in (
|
|
|
- {'filter_type': '子客户'},
|
|
|
|
|
{'filter_type': 7},
|
|
{'filter_type': 7},
|
|
|
{'filter_type': '子客户', 'customer_id': 0},
|
|
{'filter_type': '子客户', 'customer_id': 0},
|
|
|
{'filter_type': '主客户', 'customer_id': 7},
|
|
{'filter_type': '主客户', 'customer_id': 7},
|
|
@@ -253,7 +264,7 @@ class ReceivableCostFilterOptionsToolTest(ToolLoaderMixin, unittest.TestCase):
|
|
|
with self.subTest(arguments=arguments):
|
|
with self.subTest(arguments=arguments):
|
|
|
with self.assertRaises((TypeError, ValueError)):
|
|
with self.assertRaises((TypeError, ValueError)):
|
|
|
tool.call(**arguments)
|
|
tool.call(**arguments)
|
|
|
- self.assertEqual(2, len(client.calls))
|
|
|
|
|
|
|
+ self.assertEqual(3, len(client.calls))
|
|
|
with self.assertRaisesRegex(RuntimeError, 'api client is required'):
|
|
with self.assertRaisesRegex(RuntimeError, 'api client is required'):
|
|
|
tool_class().call('主客户')
|
|
tool_class().call('主客户')
|
|
|
|
|
|