@@ -316,6 +316,31 @@ def test_guess_when_method_set_but_invalid_and_item_exists(self):
316316 key = 'old_item' , value = 'b' , sep = '=' , orig = 'old_item=b' ),
317317 ]
318318
319+ def test_guess_when_method_not_set_but_request_items_present (self ):
320+ """When method is None but request_items exist, _guess_method
321+ should produce a user-friendly error instead of an AssertionError.
322+
323+ This state can occur when argparse misassigns positional arguments
324+ due to intermixed optional and positional arguments (e.g.,
325+ ``http POST --auth-type bearer --auth token URL``).
326+ See https://github.com/httpie/cli/issues/1614
327+ """
328+ self .parser .args = argparse .Namespace ()
329+ self .parser .args .method = None
330+ self .parser .args .url = 'http://example.com/'
331+ self .parser .args .request_items = [
332+ KeyValueArg (
333+ key = 'test' , value = 'header' , sep = ':' , orig = 'test:header' )
334+ ]
335+ self .parser .args .ignore_stdin = False
336+ self .parser .env = MockEnvironment ()
337+ # Patch print_usage since the parser isn't fully initialized in
338+ # unit tests (no spec attribute).
339+ self .parser .print_usage = lambda * a , ** kw : None
340+ with pytest .raises (SystemExit ) as exc_info :
341+ self .parser ._guess_method ()
342+ assert exc_info .value .code == 2
343+
319344
320345class TestNoOptions :
321346
0 commit comments