| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- # -*- coding:utf-8 -*-
- import json
- from unittest.mock import MagicMock, patch
- import pytest
- from dw_base.ds import cli
- @patch('dw_base.ds.cli.DSClient')
- def test_get_invokes_client_get(MockClient, capsys):
- inst = MagicMock()
- inst.get.return_value = {'code': 0}
- MockClient.return_value = inst
- cli.main(['get', '/projects', '-p', 'pageNo=1', '-p', 'pageSize=10'])
- inst.get.assert_called_once_with(
- '/projects', params={'pageNo': '1', 'pageSize': '10'})
- out = capsys.readouterr().out
- assert json.loads(out) == {'code': 0}
- @patch('dw_base.ds.cli.DSClient')
- def test_get_o_writes_file(MockClient, tmp_path, capsys):
- """新特性:-o 把 JSON 写文件,stdout 不打,stderr 提示落点。"""
- inst = MagicMock()
- inst.get.return_value = {'code': 0, 'data': 'x'}
- MockClient.return_value = inst
- out_file = tmp_path / 'out.json'
- cli.main(['get', '/projects', '-o', str(out_file)])
- assert json.loads(out_file.read_text(encoding='utf-8')) == {'code': 0, 'data': 'x'}
- captured = capsys.readouterr()
- assert captured.out == ''
- assert '已写到' in captured.err
- assert str(out_file) in captured.err
- @patch('dw_base.ds.cli.DSClient')
- def test_post_with_json_body(MockClient, capsys):
- inst = MagicMock()
- inst.post.return_value = {'ok': True}
- MockClient.return_value = inst
- cli.main(['post', '/foo', '-j', '{"a":1,"b":"x"}'])
- inst.post.assert_called_once_with('/foo', json_body={'a': 1, 'b': 'x'})
- @patch('dw_base.ds.cli.DSClient')
- def test_post_no_body(MockClient, capsys):
- inst = MagicMock()
- inst.post.return_value = {}
- MockClient.return_value = inst
- cli.main(['post', '/foo'])
- inst.post.assert_called_once_with('/foo', json_body=None)
- def test_no_subcommand_exits():
- with pytest.raises(SystemExit):
- cli.main([])
- def test_unknown_subcommand_exits():
- with pytest.raises(SystemExit):
- cli.main(['bogus'])
- def test_kv_invalid_format_skipped(capsys):
- """-p 参数无 = 时跳过并 stderr 警告,不 raise。"""
- with patch('dw_base.ds.cli.DSClient') as MockClient:
- inst = MagicMock()
- inst.get.return_value = {}
- MockClient.return_value = inst
- cli.main(['get', '/p', '-p', 'no_equals', '-p', 'k=v'])
- inst.get.assert_called_once_with('/p', params={'k': 'v'})
- assert '需要 k=v 格式' in capsys.readouterr().err
|