You've already forked httpie-cli
							
							
				mirror of
				https://github.com/httpie/cli.git
				synced 2025-10-30 23:47:52 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			139 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import pytest
 | |
| import shutil
 | |
| import json
 | |
| from httpie.sessions import SESSIONS_DIR_NAME
 | |
| from httpie.status import ExitStatus
 | |
| from httpie.cli.options import PARSER_SPEC_VERSION
 | |
| from tests.utils import DUMMY_HOST, httpie
 | |
| from tests.fixtures import SESSION_FILES_PATH, SESSION_FILES_NEW, SESSION_FILES_OLD, read_session_file
 | |
| 
 | |
| 
 | |
| OLD_SESSION_FILES_PATH = SESSION_FILES_PATH / 'old'
 | |
| 
 | |
| 
 | |
| @pytest.mark.requires_installation
 | |
| def test_plugins_cli_error_message_without_args():
 | |
|     # No arguments
 | |
|     result = httpie(no_debug=True)
 | |
|     assert result.exit_status == ExitStatus.ERROR
 | |
|     assert 'usage: ' in result.stderr
 | |
|     assert 'specify one of these' in result.stderr
 | |
|     assert 'please use the http/https commands:' in result.stderr
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     'example',
 | |
|     [
 | |
|         'pie.dev/get',
 | |
|         'DELETE localhost:8000/delete',
 | |
|         'POST pie.dev/post header:value a=b header_2:value x:=1',
 | |
|     ],
 | |
| )
 | |
| @pytest.mark.requires_installation
 | |
| def test_plugins_cli_error_messages_with_example(example):
 | |
|     result = httpie(*example.split(), no_debug=True)
 | |
|     assert result.exit_status == ExitStatus.ERROR
 | |
|     assert 'usage: ' in result.stderr
 | |
|     assert f'http {example}' in result.stderr
 | |
|     assert f'https {example}' in result.stderr
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     'example',
 | |
|     [
 | |
|         'cli',
 | |
|         'plugins',
 | |
|         'cli foo',
 | |
|         'plugins unknown',
 | |
|         'plugins unknown.com A:B c=d',
 | |
|         'unknown.com UNPARSABLE????SYNTAX',
 | |
|     ],
 | |
| )
 | |
| @pytest.mark.requires_installation
 | |
| def test_plugins_cli_error_messages_invalid_example(example):
 | |
|     result = httpie(*example.split(), no_debug=True)
 | |
|     assert result.exit_status == ExitStatus.ERROR
 | |
|     assert 'usage: ' in result.stderr
 | |
|     assert f'http {example}' not in result.stderr
 | |
|     assert f'https {example}' not in result.stderr
 | |
| 
 | |
| 
 | |
| HTTPIE_CLI_SESSIONS_UPGRADE_OPTIONS = [
 | |
|     (
 | |
|         # Default settings
 | |
|         [],
 | |
|         {'__host__': json.dumps(None)},
 | |
|     ),
 | |
|     (
 | |
|         # When --bind-cookies is applied, the __host__ becomes DUMMY_URL.
 | |
|         ['--bind-cookies'],
 | |
|         {'__host__': json.dumps(DUMMY_HOST)},
 | |
|     ),
 | |
| ]
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     'old_session_file, new_session_file', zip(SESSION_FILES_OLD, SESSION_FILES_NEW)
 | |
| )
 | |
| @pytest.mark.parametrize(
 | |
|     'extra_args, extra_variables',
 | |
|     HTTPIE_CLI_SESSIONS_UPGRADE_OPTIONS,
 | |
| )
 | |
| def test_httpie_sessions_upgrade(tmp_path, old_session_file, new_session_file, extra_args, extra_variables):
 | |
|     session_path = tmp_path / 'session.json'
 | |
|     shutil.copyfile(old_session_file, session_path)
 | |
| 
 | |
|     result = httpie(
 | |
|         'cli', 'sessions', 'upgrade', *extra_args, DUMMY_HOST, str(session_path)
 | |
|     )
 | |
|     assert result.exit_status == ExitStatus.SUCCESS
 | |
|     assert read_session_file(session_path) == read_session_file(
 | |
|         new_session_file, extra_variables=extra_variables
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_httpie_sessions_upgrade_on_non_existent_file(tmp_path):
 | |
|     session_path = tmp_path / 'session.json'
 | |
|     result = httpie('cli', 'sessions', 'upgrade', DUMMY_HOST, str(session_path))
 | |
|     assert result.exit_status == ExitStatus.ERROR
 | |
|     assert 'does not exist' in result.stderr
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     'extra_args, extra_variables',
 | |
|     HTTPIE_CLI_SESSIONS_UPGRADE_OPTIONS,
 | |
| )
 | |
| def test_httpie_sessions_upgrade_all(tmp_path, mock_env, extra_args, extra_variables):
 | |
|     mock_env._create_temp_config_dir = False
 | |
|     mock_env.config_dir = tmp_path / "config"
 | |
| 
 | |
|     session_dir = mock_env.config_dir / SESSIONS_DIR_NAME / DUMMY_HOST
 | |
|     session_dir.mkdir(parents=True)
 | |
|     for original_session_file in SESSION_FILES_OLD:
 | |
|         shutil.copy(original_session_file, session_dir)
 | |
| 
 | |
|     result = httpie(
 | |
|         'cli', 'sessions', 'upgrade-all', *extra_args, env=mock_env
 | |
|     )
 | |
|     assert result.exit_status == ExitStatus.SUCCESS
 | |
| 
 | |
|     for refactored_session_file, expected_session_file in zip(
 | |
|         sorted(session_dir.glob("*.json")),
 | |
|         SESSION_FILES_NEW
 | |
|     ):
 | |
|         assert read_session_file(refactored_session_file) == read_session_file(
 | |
|             expected_session_file, extra_variables=extra_variables
 | |
|         )
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     'load_func, extra_options', [
 | |
|         (json.loads, []),
 | |
|         (json.loads, ['--format=json'])
 | |
|     ]
 | |
| )
 | |
| def test_cli_export(load_func, extra_options):
 | |
|     response = httpie('cli', 'export-args', *extra_options)
 | |
|     assert response.exit_status == ExitStatus.SUCCESS
 | |
|     assert load_func(response)['version'] == PARSER_SPEC_VERSION
 |