From 5417d7e49752592f1fc935b7fed26798dc330bbf Mon Sep 17 00:00:00 2001 From: Mike Bellika Date: Mon, 4 Nov 2024 20:58:08 +0100 Subject: [PATCH 01/20] Implement curl command parsing --- src/posting/app.py | 25 ++++- src/posting/importing/curl.py | 131 +++++++++++++++++++++++++ src/posting/widgets/request/url_bar.py | 14 ++- 3 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 src/posting/importing/curl.py diff --git a/src/posting/app.py b/src/posting/app.py index fb1d50f1..dff3f31f 100644 --- a/src/posting/app.py +++ b/src/posting/app.py @@ -5,6 +5,7 @@ import httpx +from posting.importing.curl import CurlImport from rich.console import Group from rich.text import Text from textual import on, log, work @@ -66,7 +67,7 @@ from posting.widgets.request.request_metadata import RequestMetadata from posting.widgets.request.request_options import RequestOptions from posting.widgets.request.request_scripts import RequestScripts -from posting.widgets.request.url_bar import UrlInput, UrlBar +from posting.widgets.request.url_bar import CurlMessage, UrlInput, UrlBar from posting.widgets.response.response_area import ResponseArea from posting.widgets.response.response_trace import Event, ResponseTrace from posting.widgets.response.script_output import ScriptOutput @@ -692,6 +693,28 @@ def build_request_model(self, request_options: Options) -> RequestModel: **request_editor_args, ) + def on_curl_message(self, event: CurlMessage): + curl_import = CurlImport(event.curl_command) + self.headers_table.replace_all_rows(curl_import.headers) + self.url_input.value = curl_import.url + + # Clear existing data + self.request_body_text_area.text = "" + self.request_editor.form_editor.replace_all_rows([]) + + if curl_import.is_form_data: + self.request_editor.request_body_type_select.value = "form-body-editor" + self.request_editor.form_editor.replace_all_rows(curl_import.data_pairs) + self.request_body_text_area.text = "" + elif curl_import.data: + self.request_editor.form_editor.replace_all_rows([]) + self.request_editor.request_body_type_select.value = "text-body-editor" + self.request_body_text_area.text = curl_import.data + else: + self.request_editor.request_body_type_select.value = "no-body-label" + + self.method_selector.value = curl_import.method + def load_request_model(self, request_model: RequestModel) -> None: """Load a request model into the UI.""" self.selected_method = request_model.method diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py new file mode 100644 index 00000000..69a50365 --- /dev/null +++ b/src/posting/importing/curl.py @@ -0,0 +1,131 @@ +import argparse +import shlex + + +class CurlImport: + def __init__(self, curl_command): + # Remove leading 'curl ' if present + if curl_command.strip().startswith("curl "): + curl_command = curl_command.strip()[5:] + + curl_command = curl_command.replace("\\\n", " ") + curl_command = curl_command.replace("\\", " ") + + # Split the command string into tokens + tokens = shlex.split(curl_command) + parser = argparse.ArgumentParser() + # Define the arguments to parse + parser.add_argument("-X", "--request", help="Specify request command to use") + parser.add_argument( + "-H", "--header", action="append", help="Pass custom header(s) to server" + ) + parser.add_argument("-d", "--data", help="HTTP POST data") + parser.add_argument("--data-raw", help="HTTP POST raw data") + parser.add_argument("--data-binary", help="HTTP POST binary data") + parser.add_argument( + "-F", "--form", action="append", help="Specify multipart MIME data" + ) + parser.add_argument("-u", "--user", help="Server user and password") + parser.add_argument( + "--compressed", action="store_true", help="Request compressed response" + ) + parser.add_argument( + "-k", + "--insecure", + action="store_true", + help="Allow insecure server connections when using SSL", + ) + parser.add_argument("-e", "--referer", help="Referrer URL") + parser.add_argument("-A", "--user-agent", help="User-Agent to send to server") + parser.add_argument("url", nargs="?") + # Parse the arguments + args = parser.parse_intermixed_args(tokens) + # Extract components + self.method = args.request or ( + "POST" + if args.data or args.form or args.data_raw or args.data_binary + else "GET" + ) + self.headers = ( + [header.split(": ") for header in args.header] if args.header else [] + ) + self.url = args.url + self.user = args.user + self.compressed = args.compressed + self.insecure = args.insecure + self.referer = args.referer + self.user_agent = args.user_agent + + # Determine if the data is form data + self.is_form_data = False + content_type_header = next( + (value for name, value in self.headers if name.lower() == "content-type"), + "", + ).lower() + + if args.form: + self.is_form_data = True + elif args.data or args.data_raw or args.data_binary: + if "application/x-www-form-urlencoded" in content_type_header: + self.is_form_data = True + elif not any("content-type" in h.lower() for h, _ in self.headers): + # Default content type for -d is application/x-www-form-urlencoded + self.is_form_data = True + + # Store raw data + self.data = args.data or args.data_raw or args.data_binary + + # Parse data into key-value pairs if it is form data + if self.is_form_data and self.data: + self.data_pairs = self.parse_data(self.data) + else: + self.data_pairs = [] # Not form data, so no key-value pairs + + # Parse form data into key-value pairs + if args.form: + self.form = self.parse_form(args.form) + else: + self.form = [] + + def parse_data(self, data_str): + """Parse the data string into a list of tuples.""" + if not data_str: + return [] + pairs = data_str.split("&") + data = [] + for pair in pairs: + if "=" in pair: + key, value = pair.split("=", 1) + data.append((key, value)) + else: + data.append((pair, "")) + return data + + def parse_form(self, form_list): + """Parse the form data into a list of tuples.""" + if not form_list: + return [] + form_data = [] + for item in form_list: + if "=" in item: + key, value = item.split("=", 1) + form_data.append((key, value)) + else: + form_data.append((item, "")) + return form_data + + def as_dict(self): + return { + "method": self.method, + "url": self.url, + "headers": self.headers, + "data": self.data, + "data_pairs": self.data_pairs, + "form": self.form, + "user": self.user, + "compressed": self.compressed, + "insecure": self.insecure, + "referer": self.referer, + "user_agent": self.user_agent, + "is_form_data": self.is_form_data, + } diff --git a/src/posting/widgets/request/url_bar.py b/src/posting/widgets/request/url_bar.py index 42f06ae2..d9141200 100644 --- a/src/posting/widgets/request/url_bar.py +++ b/src/posting/widgets/request/url_bar.py @@ -7,7 +7,7 @@ from textual.containers import Horizontal, Vertical from textual.css.query import NoMatches from textual.design import ColorSystem -from textual.events import Blur +from textual.events import Blur, Paste from textual.message import Message from textual.widgets import Input, Button, Label from textual_autocomplete import DropdownItem @@ -28,6 +28,12 @@ from posting.widgets.variable_autocomplete import VariableAutoComplete +class CurlMessage(Message): + def __init__(self, curl_command): + super().__init__() + self.curl_command = curl_command + + class UrlInput(PostingInput): """ The URL input. @@ -104,6 +110,12 @@ def on_theme_change(self, theme: Theme) -> None: if theme.url: self.highlighter.url_styles = theme.url.fill_with_defaults(theme) + def on_paste(self, event: Paste): + if not event.text.startswith("curl "): + return + event.prevent_default() + self.post_message(CurlMessage(event.text)) + class SendRequestButton(Button, can_focus=False): """ From ae58ab3efbb59305812a2923cd00d9400b0d5063 Mon Sep 17 00:00:00 2001 From: Mike Bellika Date: Mon, 4 Nov 2024 21:42:13 +0100 Subject: [PATCH 02/20] Handle headers without a space after colon --- src/posting/importing/curl.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 69a50365..2bf49a53 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -46,9 +46,11 @@ def __init__(self, curl_command): if args.data or args.form or args.data_raw or args.data_binary else "GET" ) - self.headers = ( - [header.split(": ") for header in args.header] if args.header else [] - ) + self.headers = [] + for header in args.header or []: + name, sep, value = header.partition(":") + if sep: + self.headers.append([name.strip(), value.strip()]) self.url = args.url self.user = args.user self.compressed = args.compressed From 607b7d9cb2f65fbc5037c2214f7b5a7cf60093ad Mon Sep 17 00:00:00 2001 From: Mike Bellika Date: Mon, 4 Nov 2024 21:42:22 +0100 Subject: [PATCH 03/20] Add docstrings --- src/posting/importing/curl.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 2bf49a53..80583174 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -3,11 +3,22 @@ class CurlImport: + """ + Parses a curl command string and extracts HTTP request components. + """ + def __init__(self, curl_command): + """ + Initialize the parser with a curl command. + + Args: + curl_command (str): The curl command string to parse. + """ # Remove leading 'curl ' if present if curl_command.strip().startswith("curl "): curl_command = curl_command.strip()[5:] + # Replace line breaks and `\`. If we don't do this, argparse can crash when pasting requests from chrome curl_command = curl_command.replace("\\\n", " ") curl_command = curl_command.replace("\\", " ") @@ -38,7 +49,7 @@ def __init__(self, curl_command): parser.add_argument("-e", "--referer", help="Referrer URL") parser.add_argument("-A", "--user-agent", help="User-Agent to send to server") parser.add_argument("url", nargs="?") - # Parse the arguments + args = parser.parse_intermixed_args(tokens) # Extract components self.method = args.request or ( From 0dbaa9c40e55fb19ae1086de4833238fef08b109 Mon Sep 17 00:00:00 2001 From: Mike Bellika Date: Mon, 4 Nov 2024 21:42:30 +0100 Subject: [PATCH 04/20] Notify on error/success --- src/posting/app.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/posting/app.py b/src/posting/app.py index dff3f31f..68eff039 100644 --- a/src/posting/app.py +++ b/src/posting/app.py @@ -694,7 +694,17 @@ def build_request_model(self, request_options: Options) -> RequestModel: ) def on_curl_message(self, event: CurlMessage): - curl_import = CurlImport(event.curl_command) + try: + curl_import = CurlImport(event.curl_command) + except SystemExit: + self.notify( + title="Could not parse curl request", + message="An error occurred while parsing the curl request.", + timeout=5, + severity="error", + ) + return + self.headers_table.replace_all_rows(curl_import.headers) self.url_input.value = curl_import.url @@ -705,15 +715,18 @@ def on_curl_message(self, event: CurlMessage): if curl_import.is_form_data: self.request_editor.request_body_type_select.value = "form-body-editor" self.request_editor.form_editor.replace_all_rows(curl_import.data_pairs) - self.request_body_text_area.text = "" elif curl_import.data: - self.request_editor.form_editor.replace_all_rows([]) self.request_editor.request_body_type_select.value = "text-body-editor" self.request_body_text_area.text = curl_import.data else: self.request_editor.request_body_type_select.value = "no-body-label" self.method_selector.value = curl_import.method + self.notify( + title="Curl request imported", + message=f"Successfully imported curl request to {curl_import.url}", + timeout=3, + ) def load_request_model(self, request_model: RequestModel) -> None: """Load a request model into the UI.""" From 2aeb4d39583a356047fda4fc08437fee26926be5 Mon Sep 17 00:00:00 2001 From: Mike Bellika Date: Mon, 4 Nov 2024 21:42:36 +0100 Subject: [PATCH 05/20] Add unit tests --- tests/test_curl_import.py | 195 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 tests/test_curl_import.py diff --git a/tests/test_curl_import.py b/tests/test_curl_import.py new file mode 100644 index 00000000..75afc1a5 --- /dev/null +++ b/tests/test_curl_import.py @@ -0,0 +1,195 @@ +import pytest +from posting.importing.curl import CurlImport + + +def test_simple_get(): + """Test a simple GET request.""" + curl_command = "curl http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.method == "GET" + assert curl_import.url == "http://example.com" + assert curl_import.headers == [] + assert curl_import.data is None + + +def test_get_with_headers(): + """Test GET request with headers.""" + curl_command = "curl -H 'Accept: application/json' -H 'User-Agent: TestAgent' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.method == "GET" + assert curl_import.url == "http://example.com" + assert curl_import.headers == [ + ["Accept", "application/json"], + ["User-Agent", "TestAgent"], + ] + assert curl_import.data is None + + +def test_post_with_form_data(): + """Test POST request with form data using -d.""" + curl_command = "curl -X POST -d 'key1=value1&key2=value2' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.method == "POST" + assert curl_import.url == "http://example.com" + assert curl_import.data == "key1=value1&key2=value2" + assert curl_import.is_form_data is True + assert curl_import.data_pairs == [("key1", "value1"), ("key2", "value2")] + + +def test_post_with_json_data(): + """Test POST request with JSON data.""" + curl_command = "curl -X POST -H 'Content-Type: application/json' -d '{\"key\":\"value\"}' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.method == "POST" + assert curl_import.url == "http://example.com" + assert curl_import.data == '{"key":"value"}' + assert curl_import.is_form_data is False + assert curl_import.data_pairs == [] + + +def test_post_with_form_option(): + """Test POST request with form data using -F.""" + curl_command = ( + "curl -X POST -F 'field1=value1' -F 'field2=value2' http://example.com" + ) + curl_import = CurlImport(curl_command) + assert curl_import.method == "POST" + assert curl_import.url == "http://example.com" + assert curl_import.form == [("field1", "value1"), ("field2", "value2")] + assert curl_import.is_form_data is True + + +def test_multiple_data_options(): + """Test handling of multiple -d options.""" + curl_command = "curl -d 'key1=value1' -d 'key2=value2' http://example.com" + curl_import = CurlImport(curl_command) + # Depending on implementation, data might be concatenated or last one used + assert ( + curl_import.data == "key1=value1key2=value2" + or curl_import.data == "key2=value2" + ) + assert curl_import.is_form_data is True + assert curl_import.data_pairs in ( + [("key1", "value1"), ("key2", "value2")], + [("key2", "value2")], + ) + + +def test_curl_with_user_and_password(): + """Test parsing of user credentials.""" + curl_command = "curl -u username:password http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.user == "username:password" + assert curl_import.url == "http://example.com" + + +def test_curl_with_insecure(): + """Test parsing of --insecure flag.""" + curl_command = "curl -k http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.insecure is True + + +def test_curl_with_referer(): + """Test parsing of referer.""" + curl_command = "curl -e 'http://referrer.com' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.referer == "http://referrer.com" + + +def test_curl_with_user_agent(): + """Test parsing of user-agent.""" + curl_command = "curl -A 'CustomAgent' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.user_agent == "CustomAgent" + + +def test_curl_with_compressed(): + """Test parsing of --compressed flag.""" + curl_command = "curl --compressed http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.compressed is True + + +def test_curl_with_method_and_data(): + """Test custom method with data.""" + curl_command = "curl -X PUT -d 'key=value' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.method == "PUT" + assert curl_import.data == "key=value" + assert curl_import.is_form_data is True + + +def test_curl_with_data_raw(): + """Test parsing of --data-raw.""" + curl_command = "curl --data-raw 'raw data' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.data == "raw data" + assert curl_import.is_form_data is True + + +def test_curl_with_data_binary(): + """Test parsing of --data-binary.""" + curl_command = "curl --data-binary 'binary data' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.data == "binary data" + assert curl_import.is_form_data is True + + +def test_curl_with_escaped_newlines(): + """Test parsing of curl command with escaped newlines.""" + curl_command = """curl -X POST \\ + -H 'Content-Type: application/json' \\ + -d '{"key": "value"}' \\ + http://example.com""" + curl_import = CurlImport(curl_command) + assert curl_import.method == "POST" + assert curl_import.url == "http://example.com" + assert curl_import.data == '{"key": "value"}' + assert curl_import.headers == [["Content-Type", "application/json"]] + + +def test_curl_with_no_space_in_header(): + """Test headers without space after colon.""" + curl_command = "curl -H 'Authorization:Bearer token' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.headers == [["Authorization", "Bearer token"]] + + +def test_curl_with_complex_command(): + """Test a complex curl command.""" + curl_command = ( + "curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' " + '-d \'{"name":"test","value":123}\' --compressed --insecure ' + "http://example.com/api/test" + ) + curl_import = CurlImport(curl_command) + assert curl_import.method == "POST" + assert curl_import.url == "http://example.com/api/test" + assert curl_import.headers == [ + ["Accept", "application/json"], + ["Content-Type", "application/json"], + ] + assert curl_import.data == '{"name":"test","value":123}' + assert curl_import.compressed is True + assert curl_import.insecure is True + assert curl_import.is_form_data is False + + +def test_curl_with_utf8_characters(): + """Test curl command with UTF-8 characters.""" + curl_command = "curl -d 'param=テスト' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.data == "param=テスト" + assert curl_import.data_pairs == [("param", "テスト")] + + +def test_curl_with_special_characters_in_data(): + """Test data containing special characters.""" + curl_command = "curl -d 'param=hello%20world&key=value%3Dtest' http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.data == "param=hello%20world&key=value%3Dtest" + assert curl_import.data_pairs == [ + ("param", "hello%20world"), + ("key", "value%3Dtest"), + ] From 7f7a913a46f571a8cad5ce0cdaf4b2554f30442c Mon Sep 17 00:00:00 2001 From: Mike Bellika Date: Mon, 4 Nov 2024 21:45:56 +0100 Subject: [PATCH 06/20] Disable ssl verification when using `--insecure` flag --- src/posting/app.py | 3 +++ tests/test_curl_import.py | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/posting/app.py b/src/posting/app.py index 68eff039..be6daa9c 100644 --- a/src/posting/app.py +++ b/src/posting/app.py @@ -721,6 +721,9 @@ def on_curl_message(self, event: CurlMessage): else: self.request_editor.request_body_type_select.value = "no-body-label" + if curl_import.insecure: + self.request_options.verify_ssl_checkbox.value = False + self.method_selector.value = curl_import.method self.notify( title="Curl request imported", diff --git a/tests/test_curl_import.py b/tests/test_curl_import.py index 75afc1a5..44380b40 100644 --- a/tests/test_curl_import.py +++ b/tests/test_curl_import.py @@ -176,6 +176,13 @@ def test_curl_with_complex_command(): assert curl_import.is_form_data is False +def test_curl_with_insecure(): + """Test parsing of --insecure flag.""" + curl_command = "curl -k http://example.com" + curl_import = CurlImport(curl_command) + assert curl_import.insecure is True + + def test_curl_with_utf8_characters(): """Test curl command with UTF-8 characters.""" curl_command = "curl -d 'param=テスト' http://example.com" From f260ae2505d380f946bf023d566eef097bc3f229 Mon Sep 17 00:00:00 2001 From: Mike Bellika Date: Mon, 4 Nov 2024 22:01:33 +0100 Subject: [PATCH 07/20] Remove extra import --- tests/test_curl_import.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_curl_import.py b/tests/test_curl_import.py index 44380b40..9aa0b086 100644 --- a/tests/test_curl_import.py +++ b/tests/test_curl_import.py @@ -1,4 +1,3 @@ -import pytest from posting.importing.curl import CurlImport From 3888fbe50417a2dda423d2d4cce929ecda93ca23 Mon Sep 17 00:00:00 2001 From: Mike Bellika Date: Mon, 4 Nov 2024 22:01:42 +0100 Subject: [PATCH 08/20] Remove redundant test --- tests/test_curl_import.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/test_curl_import.py b/tests/test_curl_import.py index 9aa0b086..d9bdd402 100644 --- a/tests/test_curl_import.py +++ b/tests/test_curl_import.py @@ -175,13 +175,6 @@ def test_curl_with_complex_command(): assert curl_import.is_form_data is False -def test_curl_with_insecure(): - """Test parsing of --insecure flag.""" - curl_command = "curl -k http://example.com" - curl_import = CurlImport(curl_command) - assert curl_import.insecure is True - - def test_curl_with_utf8_characters(): """Test curl command with UTF-8 characters.""" curl_command = "curl -d 'param=テスト' http://example.com" From 05b8fb8f70a08861be15780b37f80785f7a77084 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 16:05:28 +0000 Subject: [PATCH 09/20] Updating URL bar placeholder regarding curl import --- src/posting/widgets/request/url_bar.py | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/posting/widgets/request/url_bar.py b/src/posting/widgets/request/url_bar.py index d9141200..81f5fce5 100644 --- a/src/posting/widgets/request/url_bar.py +++ b/src/posting/widgets/request/url_bar.py @@ -172,7 +172,7 @@ def compose(self) -> ComposeResult: with Horizontal(): yield MethodSelector(id="method-selector") yield UrlInput( - placeholder="Enter a URL...", + placeholder="Enter a URL or paste a curl command...", id="url-input", ) yield Label(id="trace-markers") diff --git a/uv.lock b/uv.lock index e233b9b2..bc95e63d 100644 --- a/uv.lock +++ b/uv.lock @@ -869,7 +869,7 @@ wheels = [ [[package]] name = "posting" -version = "2.0.0" +version = "2.0.1" source = { editable = "." } dependencies = [ { name = "click" }, From b2a8e1d0f22ed4d8886dce3db7bc618f890ded53 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 16:11:28 +0000 Subject: [PATCH 10/20] Add type hinting --- src/posting/importing/curl.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 80583174..6f622eb8 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -7,7 +7,7 @@ class CurlImport: Parses a curl command string and extracts HTTP request components. """ - def __init__(self, curl_command): + def __init__(self, curl_command: str): """ Initialize the parser with a curl command. @@ -57,11 +57,12 @@ def __init__(self, curl_command): if args.data or args.form or args.data_raw or args.data_binary else "GET" ) - self.headers = [] + self.headers: list[tuple[str, str]] = [] for header in args.header or []: name, sep, value = header.partition(":") if sep: - self.headers.append([name.strip(), value.strip()]) + self.headers.append((name.strip(), value.strip())) + self.url = args.url self.user = args.user self.compressed = args.compressed @@ -100,12 +101,12 @@ def __init__(self, curl_command): else: self.form = [] - def parse_data(self, data_str): + def parse_data(self, data_str: str) -> list[tuple[str, str]]: """Parse the data string into a list of tuples.""" if not data_str: return [] pairs = data_str.split("&") - data = [] + data: list[tuple[str, str]] = [] for pair in pairs: if "=" in pair: key, value = pair.split("=", 1) @@ -114,11 +115,11 @@ def parse_data(self, data_str): data.append((pair, "")) return data - def parse_form(self, form_list): + def parse_form(self, form_list: list[str]) -> list[tuple[str, str]]: """Parse the form data into a list of tuples.""" if not form_list: return [] - form_data = [] + form_data: list[tuple[str, str]] = [] for item in form_list: if "=" in item: key, value = item.split("=", 1) @@ -127,7 +128,7 @@ def parse_form(self, form_list): form_data.append((item, "")) return form_data - def as_dict(self): + def as_dict(self) -> dict[str, object]: return { "method": self.method, "url": self.url, From f61898a1d658f38702528e766332b37f0fc11c1d Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 16:20:13 +0000 Subject: [PATCH 11/20] Start refactor of curl import --- src/posting/app.py | 19 +++----------- src/posting/importing/curl.py | 47 ++++++++++++++++++++++++----------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/posting/app.py b/src/posting/app.py index be6daa9c..53ebbf81 100644 --- a/src/posting/app.py +++ b/src/posting/app.py @@ -705,26 +705,13 @@ def on_curl_message(self, event: CurlMessage): ) return - self.headers_table.replace_all_rows(curl_import.headers) - self.url_input.value = curl_import.url - - # Clear existing data - self.request_body_text_area.text = "" - self.request_editor.form_editor.replace_all_rows([]) - - if curl_import.is_form_data: - self.request_editor.request_body_type_select.value = "form-body-editor" - self.request_editor.form_editor.replace_all_rows(curl_import.data_pairs) - elif curl_import.data: - self.request_editor.request_body_type_select.value = "text-body-editor" - self.request_body_text_area.text = curl_import.data - else: - self.request_editor.request_body_type_select.value = "no-body-label" + request_model = curl_import.to_request_model() + self.load_request_model(request_model) + # Handle special curl options that affect request options if curl_import.insecure: self.request_options.verify_ssl_checkbox.value = False - self.method_selector.value = curl_import.method self.notify( title="Curl request imported", message=f"Successfully imported curl request to {curl_import.url}", diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 6f622eb8..1fc9ae2f 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -1,5 +1,8 @@ import argparse import shlex +from typing import Any + +from posting.collection import Header, RequestBody, RequestModel class CurlImport: @@ -128,18 +131,32 @@ def parse_form(self, form_list: list[str]) -> list[tuple[str, str]]: form_data.append((item, "")) return form_data - def as_dict(self) -> dict[str, object]: - return { - "method": self.method, - "url": self.url, - "headers": self.headers, - "data": self.data, - "data_pairs": self.data_pairs, - "form": self.form, - "user": self.user, - "compressed": self.compressed, - "insecure": self.insecure, - "referer": self.referer, - "user_agent": self.user_agent, - "is_form_data": self.is_form_data, - } + def to_request_model(self) -> RequestModel: + """Convert the parsed curl command into a RequestModel.""" + # Build the request body if one exists + body: RequestBody | None = None + if self.data or self.form: + if self.is_form_data: + # Use form data pairs from either -F or -d + form_data = self.form or self.data_pairs + body = RequestBody(form_data=form_data) + else: + # Raw body content + body = RequestBody(content=self.data) + + # Convert headers to Header objects + headers = [Header(name=name, value=value) for name, value in self.headers] + + return RequestModel( + method=self.method, + url=self.url, + headers=headers, + body=body, + # Set reasonable defaults for other required fields + name="", # Empty name since this is a new request + params=[], # No query params parsed from curl + options=None, # Use default options + auth=None, # Auth not implemented yet for curl import + cookies=[], # No cookies parsed from curl yet + scripts=None, # No scripts for imported requests + ) From 029b9f151098604c6ea14f529c2f945e6099546a Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 16:27:04 +0000 Subject: [PATCH 12/20] Improving curl import --- src/posting/app.py | 4 --- src/posting/importing/curl.py | 53 ++++++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/src/posting/app.py b/src/posting/app.py index 53ebbf81..3f470e50 100644 --- a/src/posting/app.py +++ b/src/posting/app.py @@ -708,10 +708,6 @@ def on_curl_message(self, event: CurlMessage): request_model = curl_import.to_request_model() self.load_request_model(request_model) - # Handle special curl options that affect request options - if curl_import.insecure: - self.request_options.verify_ssl_checkbox.value = False - self.notify( title="Curl request imported", message=f"Successfully imported curl request to {curl_import.url}", diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 1fc9ae2f..cbf8bb99 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -1,8 +1,18 @@ import argparse import shlex -from typing import Any +from typing import cast -from posting.collection import Header, RequestBody, RequestModel +from posting.collection import ( + Auth, + FormItem, + Header, + HttpRequestMethod, + Options, + QueryParam, + RequestBody, + RequestModel, + Scripts, +) class CurlImport: @@ -55,16 +65,21 @@ def __init__(self, curl_command: str): args = parser.parse_intermixed_args(tokens) # Extract components - self.method = args.request or ( - "POST" - if args.data or args.form or args.data_raw or args.data_binary - else "GET" + self.method = cast( + HttpRequestMethod, + args.request + or ( + "POST" + if args.data or args.form or args.data_raw or args.data_binary + else "GET" + ), ) self.headers: list[tuple[str, str]] = [] - for header in args.header or []: - name, sep, value = header.partition(":") - if sep: - self.headers.append((name.strip(), value.strip())) + if args.header: + for header in args.header: + name, sep, value = header.partition(":") + if sep: + self.headers.append((name.strip(), value.strip())) self.url = args.url self.user = args.user @@ -139,7 +154,11 @@ def to_request_model(self) -> RequestModel: if self.is_form_data: # Use form data pairs from either -F or -d form_data = self.form or self.data_pairs - body = RequestBody(form_data=form_data) + body = RequestBody( + form_data=[ + FormItem(name=name, value=value) for name, value in form_data + ] + ) else: # Raw body content body = RequestBody(content=self.data) @@ -147,16 +166,22 @@ def to_request_model(self) -> RequestModel: # Convert headers to Header objects headers = [Header(name=name, value=value) for name, value in self.headers] + # Set options, including the insecure flag + options = Options( + verify_ssl=not self.insecure, # Invert insecure flag for verify_ssl + follow_redirects=True, # Default to following redirects + attach_cookies=True, # Default to attaching cookies + ) + return RequestModel( method=self.method, url=self.url, headers=headers, body=body, - # Set reasonable defaults for other required fields name="", # Empty name since this is a new request params=[], # No query params parsed from curl - options=None, # Use default options + options=options, auth=None, # Auth not implemented yet for curl import cookies=[], # No cookies parsed from curl yet - scripts=None, # No scripts for imported requests + scripts=Scripts(), # Empty scripts object ) From 571187567ae01f98620558aa67be8ccdce03f450 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 16:28:55 +0000 Subject: [PATCH 13/20] Parsing query parameters from curl and loading them into the UI --- src/posting/importing/curl.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index cbf8bb99..91ddea79 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -1,6 +1,7 @@ import argparse import shlex from typing import cast +from urllib.parse import parse_qsl, urlparse from posting.collection import ( Auth, @@ -148,6 +149,14 @@ def parse_form(self, form_list: list[str]) -> list[tuple[str, str]]: def to_request_model(self) -> RequestModel: """Convert the parsed curl command into a RequestModel.""" + # Parse URL and extract query parameters + parsed_url = urlparse(self.url) + base_url = f"{parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path}" + query_params = [ + QueryParam(name=name, value=value) + for name, value in parse_qsl(parsed_url.query) + ] + # Build the request body if one exists body: RequestBody | None = None if self.data or self.form: @@ -175,11 +184,11 @@ def to_request_model(self) -> RequestModel: return RequestModel( method=self.method, - url=self.url, + url=base_url, # Use the URL without query parameters headers=headers, body=body, name="", # Empty name since this is a new request - params=[], # No query params parsed from curl + params=query_params, # Add the parsed query parameters options=options, auth=None, # Auth not implemented yet for curl import cookies=[], # No cookies parsed from curl yet From 7bd914c5ecfe5950548ba205ea766f549ba69933 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 16:30:06 +0000 Subject: [PATCH 14/20] Typing improvements in curl import --- src/posting/importing/curl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 91ddea79..6fbd0601 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -1,7 +1,7 @@ import argparse import shlex from typing import cast -from urllib.parse import parse_qsl, urlparse +from urllib.parse import ParseResult, parse_qsl, urlparse from posting.collection import ( Auth, @@ -150,7 +150,7 @@ def parse_form(self, form_list: list[str]) -> list[tuple[str, str]]: def to_request_model(self) -> RequestModel: """Convert the parsed curl command into a RequestModel.""" # Parse URL and extract query parameters - parsed_url = urlparse(self.url) + parsed_url: ParseResult = urlparse(self.url) base_url = f"{parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path}" query_params = [ QueryParam(name=name, value=value) From d16d6d2f6a91c631ee631dfdadd4073de02cbe09 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 17:33:06 +0000 Subject: [PATCH 15/20] Importing auth --- src/posting/importing/curl.py | 78 +++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 6fbd0601..8896fbcb 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -1,10 +1,13 @@ import argparse +import base64 import shlex from typing import cast from urllib.parse import ParseResult, parse_qsl, urlparse from posting.collection import ( Auth, + BasicAuth, + DigestAuth, FormItem, Header, HttpRequestMethod, @@ -147,6 +150,72 @@ def parse_form(self, form_list: list[str]) -> list[tuple[str, str]]: form_data.append((item, "")) return form_data + def _extract_auth_from_headers(self) -> tuple[Auth | None, list[tuple[str, str]]]: + """Extract authentication info from headers, returning the Auth object and remaining headers. + + Returns: + A tuple of (Auth object or None, list of remaining headers) + """ + remaining_headers = [] + auth: Auth | None = None + + # First check the -u/--user parameter + if self.user: + username, _, password = self.user.partition(":") + # Default to empty password if none provided + auth = Auth.basic_auth(username, password) + + # Look for auth headers that might override the -u parameter + for name, value in self.headers: + header_lower = name.lower() + if header_lower == "authorization": + parts = value.split(" ", 1) + if len(parts) != 2: + # Not a valid auth header, keep it as a regular header + remaining_headers.append((name, value)) + continue + + auth_type, auth_value = parts + auth_type_lower = auth_type.lower() + + if auth_type_lower == "basic": + try: + # Basic auth is base64 encoded username:password + decoded = base64.b64decode(auth_value).decode() + username, _, password = decoded.partition(":") + auth = Auth.basic_auth(username, password) + except Exception: + # If we can't decode it, keep it as a header + remaining_headers.append((name, value)) + + elif auth_type_lower == "digest": + # Parse digest auth parameters + # Example: Digest username="user", realm="realm", nonce="nonce", uri="/path" + try: + params = {} + for param in auth_value.split(","): + key, _, value = param.partition("=") + key = key.strip() + value = value.strip(' "') + params[key] = value + + if "username" in params: + # We only need username/password for the auth model + auth = Auth.digest_auth( + username=params["username"], + password=params.get("password", ""), + ) + except Exception: + # If we can't parse it, keep it as a header + remaining_headers.append((name, value)) + else: + # Unknown auth type, keep as header + remaining_headers.append((name, value)) + else: + remaining_headers.append((name, value)) + + return auth, remaining_headers + def to_request_model(self) -> RequestModel: """Convert the parsed curl command into a RequestModel.""" # Parse URL and extract query parameters @@ -157,6 +226,9 @@ def to_request_model(self) -> RequestModel: for name, value in parse_qsl(parsed_url.query) ] + # Extract auth and get remaining headers + auth, remaining_headers = self._extract_auth_from_headers() + # Build the request body if one exists body: RequestBody | None = None if self.data or self.form: @@ -172,8 +244,8 @@ def to_request_model(self) -> RequestModel: # Raw body content body = RequestBody(content=self.data) - # Convert headers to Header objects - headers = [Header(name=name, value=value) for name, value in self.headers] + # Convert remaining headers to Header objects + headers = [Header(name=name, value=value) for name, value in remaining_headers] # Set options, including the insecure flag options = Options( @@ -190,7 +262,7 @@ def to_request_model(self) -> RequestModel: name="", # Empty name since this is a new request params=query_params, # Add the parsed query parameters options=options, - auth=None, # Auth not implemented yet for curl import + auth=auth, # Add the extracted auth cookies=[], # No cookies parsed from curl yet scripts=Scripts(), # Empty scripts object ) From 2fe9d8e9c47aa705c577418a644c20c269188890 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 17:44:21 +0000 Subject: [PATCH 16/20] Adding default name and description to curl imports --- src/posting/importing/curl.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 8896fbcb..8b7a7324 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -1,5 +1,6 @@ import argparse import base64 +from datetime import datetime import shlex from typing import cast from urllib.parse import ParseResult, parse_qsl, urlparse @@ -31,6 +32,8 @@ def __init__(self, curl_command: str): Args: curl_command (str): The curl command string to parse. """ + self.curl_command = curl_command + # Remove leading 'curl ' if present if curl_command.strip().startswith("curl "): curl_command = curl_command.strip()[5:] @@ -254,15 +257,17 @@ def to_request_model(self) -> RequestModel: attach_cookies=True, # Default to attaching cookies ) + curl_command = self.curl_command.strip() + description = f"Imported from curl at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}:\n{curl_command}" return RequestModel( method=self.method, url=base_url, # Use the URL without query parameters headers=headers, body=body, - name="", # Empty name since this is a new request - params=query_params, # Add the parsed query parameters + name=base_url, + description=description, + params=query_params, options=options, - auth=auth, # Add the extracted auth - cookies=[], # No cookies parsed from curl yet - scripts=Scripts(), # Empty scripts object + auth=auth, + scripts=Scripts(), ) From 5dd888f786a0a357ed394b9ed8981bb03a3f6356 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 17:44:50 +0000 Subject: [PATCH 17/20] Remove imports --- src/posting/importing/curl.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/posting/importing/curl.py b/src/posting/importing/curl.py index 8b7a7324..afa502c3 100644 --- a/src/posting/importing/curl.py +++ b/src/posting/importing/curl.py @@ -7,8 +7,6 @@ from posting.collection import ( Auth, - BasicAuth, - DigestAuth, FormItem, Header, HttpRequestMethod, From 22f3e71cac0bd660ce7a5fa1b4173642f348e7bf Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 17:51:12 +0000 Subject: [PATCH 18/20] Some tidying --- src/posting/app.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/posting/app.py b/src/posting/app.py index 3f470e50..b5ba837f 100644 --- a/src/posting/app.py +++ b/src/posting/app.py @@ -696,23 +696,21 @@ def build_request_model(self, request_options: Options) -> RequestModel: def on_curl_message(self, event: CurlMessage): try: curl_import = CurlImport(event.curl_command) - except SystemExit: + request_model = curl_import.to_request_model() + except Exception as e: self.notify( title="Could not parse curl request", - message="An error occurred while parsing the curl request.", + message=f"An error occurred: {e}", timeout=5, severity="error", ) - return - - request_model = curl_import.to_request_model() - self.load_request_model(request_model) - - self.notify( - title="Curl request imported", - message=f"Successfully imported curl request to {curl_import.url}", - timeout=3, - ) + else: + self.load_request_model(request_model) + self.notify( + title="Curl request imported", + message=f"Successfully imported curl request to {curl_import.url}", + timeout=3, + ) def load_request_model(self, request_model: RequestModel) -> None: """Load a request model into the UI.""" From 7b45ca01b0fed4ce760fa2f4dab11a51006bac0b Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 17:54:56 +0000 Subject: [PATCH 19/20] Test fixes, updating snapshots --- .coverage | Bin 53248 -> 53248 bytes ...n_run_command__hide_collection_browser.svg | 172 +++++------ ...test_loads_and_shows_discovery_options.svg | 236 +++++++-------- ...estHelpScreen.test_help_screen_appears.svg | 278 +++++++++--------- .../TestJumpMode.test_click_switch.svg | 182 ++++++------ .../TestJumpMode.test_focus_switch.svg | 182 ++++++------ .../TestJumpMode.test_loads.svg | 192 ++++++------ ...test_request_loaded_into_view__headers.svg | 220 +++++++------- ...ethodSelection.test_select_post_method.svg | 182 ++++++------ ...eShortcuts.test_expand_request_section.svg | 162 +++++----- ...erfaceShortcuts.test_expand_then_reset.svg | 182 ++++++------ ...Shortcuts.test_hide_collection_browser.svg | 172 +++++------ tests/test_curl_import.py | 12 +- 13 files changed, 1086 insertions(+), 1086 deletions(-) diff --git a/.coverage b/.coverage index 223c4c6114670f7ee72029e4768acd0e15b0de28..bcdd4f6620b5053c6bc96fc1fac1749a3593235e 100644 GIT binary patch delta 3813 zcmZWq2~<_p8s6vb183g*a=DlBUM_=wHWC~Cml1p0mR1TQ? zz3^2U4ez~PFEb^xG=WyjdM{0Fl}*ObXoZ2pd#Nawx6eTeeP^w^zyJUK|KI-}&UbEG zCv5A4JNy}+C#`cCpZ&{U%53gY1dP=I1@+E(9Ts$s5Bd!u>iGuKz@He4J zxKr@rhxoU6C%=FX<}PqYxDIX|H=j$OjREK~8=rJHSkp;LmW`Q3?#l{f(nw2ID3eNd zXW7^k2=WM%YmuwVt4eF?SH?7~OH3vMSxM|25UivTFH)M#k?|~n%+BVCXLb--k?ld| zQQVd7!6x38B$qW-meD!l6CkLbS}is=mX%l1$n9p5^Z4+%xY>Zk8P-LYObzZ8CzS~)Ks>zvWeEj zhLX&@IA$7Y$g?vcbdA&5U>=uJlR6ef`H`N52x z)_RlIa(I%P@4*H@P)zHrWJA8p+8~&#O+uc_=UFQR^L3{u-^lor)A>P+pFWjPps>CW z%+rH01p?~>L6hzj6$CQgq@f_1@gjQ)tc-;mDe(0-Ly$amBM+>uZK%|?9^gqv3ha!D z&N_|tn7Cpy$t#o@BUw}!;D;fYIkm8PU4y=Te?)c^S{a4xE%Z&2Z#$;)`r6vEx(e-> zED{9qQzs~EXrQ#8NJb0&8G(2e*^~L(daS6f(R&1P5M)iQt*&jTZ`3cMe05_D$t^le zHDdwz2lP4W#UG%T&=c4b&EyiL0vyFHP);ZZP^|={AJAo7$XS$K_<6KI*?=Fx)yPBY zPzn@_{HStX{*TlvrwV6fUOXW_E7pkVqA2`bXcp%1=lKv`i{h?qBb#(HDBaXbVgjtzl7&f$BoMSXl8Gnn z#Xgq*Q%IbaUA82YibEv#FP=`tA+j-vaFs^lsoIEvWyE8#jo5M#8>RK63F7bSm_bUG z#4?d&J00mHbc`UwOA>A2{%{sE^?IhLBaCDe$1$O#zSvGB(q25B4T*sF(zRPWZWl)| zxwzCv(+1T~4nw5;05&iVR_Y7N%{Q|48L(J)s5+n>&ebNN;^0_YIGnFLJ^7fil2c2A zs6;Lc5=ujE3cG;J%yOHW}b^h9OHZuZ%!?T>{ej6w`b8xW#@L`iD z0G;cT-yE9N{mkGnySqDAvVveV?7*rg%Lswd{k{N1e!cI=5y+`BWsG4b8A%nW zWjeP66b|FnR0FXX5-hb|cjjfTJ zdkA&4r*6eE=SFR&G;i1VmGUqQGM+p4-W%heCl9>yb31JN@<`vpA>bG)fQtZ~h@@|~nKt;9mwdfjyub}yiN5^eV0dq4 zUnb}6Y|tWNo!!(1;<`)0QqbE2K-<1N-dRs0CLwIM!Q`x?W*Glr5`7cEm0UnaKFC>1 z$-B5#W;vVCb$$5A@Qv2)g$G_8-J9Wd^H7X7XAR9scPH<)`^fIjRn$RlVzBc8(%&Ae zaL#H<7-3yThO>&aKc2zUI+YO$)5twrf>um8rqtKQZ}R4plYwo4lzxm>C11i5midmD z@4(fY?95BtgcX^zX8lrEgOWx&-!RsJn^)vOw6 zC^GW!R=B5bj&|YnF*n#$tTmYKIw`@cYaXWbNqhg>-XH(~*EgW;`U0#Xnh+S#ooHyg zc5LUx4ro*r$^?i1b{x9?Jpjhvx#nw9B}#>bBKC{%amUApE`al&GguY1%4x04rM_#I zo*FnGU{g8Dqz92-w)*kz)T|4ERIaG>PERpyK7^>U}nF?<+R;RE;;`~vPk%W*qau>&`w zMYsl6;HCH;bT`hyb8sq-LD@JA2VgHOp*t}|*U{x^=qHqd2GJMjG&+Xj&{1>{?L{x3 z2=p}CiJm|X`sHrv@-Vh54s92Pi2>H?Xn<8Zro!iROoC7A7z_WbV1zt9}r zOn|#|jE5aM#=)m_jDdfeOo@g>r=s9a9cRENb({{{CsQKecAW}`+jIX9}p delta 3920 zcmZ8k2~<=^7OhWp^Sl32)nEe+O|vwz%OW6)Y#McBSCbeQ6hv&4L>2)x&WtoBIr*7L z#8?w!#*HkKn28Y+lDMH@oEVIWnwezOAVPGaF)9*0F6h`y{Q?zi&guK!eXrhozp8E@ zeqAH1YlLgfoagJ_6FARL=DnA0Pv+wR{x3d^8}W;H5zfVN*of|+pV3$7BeVuBMbDrZ zB+FOjf6II1O>(&$FS|*-(lP0M>1AoQ6e>B3Ka0D?HDbA#D*6joh5f>7!dxL-|37`Z z{tf+neWG60{iNHbTc(?+bLBhvJ^V&~DgQKWtA3i@4b9F0-pLT8S63BBRaR8jl$I}y zs$RNqp{=^cR#hEYxx#lW1e3_LY&ViKS*J;YU9 zrDc^ib$5JR$#=QFoQvAYWkFF5{hPm7Juj=_!PN-OlQ>M`^L)Gz1Y?HPUs1`*n`Kg- z=gmoEb)Kh1gdllnQgKCDSyA}{bqqIw9L#f{rhhD>u&}JCw7jrT9Y;sEWa#SZqGh(i zD%+B!^iI>b2mjazC8djP)g)`mUMj}~fPX=K=p6nU9Y)*n7&L>QE>`f%ZHCu)-{Fr6c{lRc>fT?$N8d7?HU4wiB3e1}PI=1}QTXJUqdizC0!@TZzHaIw@1 z(-l?OifE4*GJcj9smS0}u|5>t=rA~IpzeU^1Z{LEoH4*eWx9~+S)pQeaaCz$je0zh zv_=TkoS=<}h0i@&Hy}DuJ1PJCqDOKIi-N_ElICP#ZRjwjo-!fB zm=?+e4{LZOYXldxF5j#TjD|L~n5sCe9q9`vs2gk61`Iw$pw=1!r&Eqe4|D#cEq|oe z&k8d+aw*$K>pQq!)t^c06AtqqjW#Ps)LK|YRaYx>c&&FZd`hjQN>J9C{o!Pee3E0K zVrz zvkG_l*@bwJq(93E5u#48;tru7?-PC#y71drkFKF3!oP%ev`uJ5uL;|QO=y;|PVSSx zms@0;@Ur}*FhW=IGL$a*{HNl3w1CusfZ*3wdP( zbq%mQP3Nq*X!Lr6(^}eG;PkGEJNk7>28}X{w<~{8GvlvgUYV#`ao2gBlCH+1E(B|M zWsFJ&9^;&q(bPizpE@fMs$t>uN*FbaUIl3f<9H=d&2xJuO;!S^OBXtR^6 z;z7+I{+qa14uIR=1aoJw-dS;@B+?3LiYqm0og9TF?c_?m#qZZ$r*3SzadCN~y46zj znQM06tS^ABGDuMy*1F2@qlg-{TM4PN+P9GLWrfot1N+)<@o?k#McfGUk`ueUbKB5vs8I#rV3sYf+-9m*VHJ(em9J9bNZs?{96yb+q4I zdspv@cqNL)%YCokAZ-nvWPgKOT)I(-q+FPfW2H}bVQqRnr2Xg4!v-as(pK}`SkTts z;B}gBHBT#{T28+z#FISn>Xb=J2#p7s9N&JP-g*3J&&3zJZfgUTU`pnAIIf*@^!1LF zs4i0O_n*D^^~&0?7h9VTjO)%_0@HhX<|;vIrLpehKd<^5wzt{1-rh?dcY0j|x_>!- zlJKj8bfcA#wA2D4Nnbt6Zc_ZI6XW8D?Y8%H?sEj*IgrKy4Jc@XK8i05rD4a>)L?OD zo5Xe&fDMkbU9hsYf8QSi6mOc4A=OUp!-=O#%y_3geq)*AbV>XdWgWB4b!8on^EVU^ z#Z0rJ#ey@Ngb{R=tJa@48+zN5Ca zHNEy`>xyD~6Q4L1Y(07ifR-JL?IFscbo+^0T~~dL0CZXoRo|;<`fYY)#oW1n(E~7b zzq#Y)+^!!#UVrKIjn=mgd{=S1XYg}OEqdwXr>jcL=3@Hq{XF_Sj@bSt(u4y;VpAZ9 zK5U04uBM&>r{;Sop6bl>JYDNR^npS!2eh>UP}h`gQQXPudJD8FM)Fy`)h^H~Nhpy+ z?WhgyMmy0q)QC2qwdfU8hwtEC{407McjHs|1a3!_xDD^dJMlKOh`!Klz-#d8FkTxRIR`8w0zJtuAkY6rYiJjd90c$nd6c#z>J*upRv4y?AqPnmClA2T$; zZ45`icNrqMg`oid#!wI6;_YgC9o)bO9=^%Y8Lnrjg>Nv_z`rttkT7(D>)3ek^=Fu$ z1dlLGgzXFy;MWYtz^@p_!GAK0g@+i%z%Lm_!?uCvkAkg?h=d0iM!@|H!{I)LVQ??Q zP`HO-2;9vu2!6pZ5Pr^ZB>aqF0BmOH4?kh(2X`{`g-r~7;0}h~(7v4+X7~|9FZd6J zp72A49`FN(?(ltvZt(96jqp8&uJ9d(F7R!J2H40D!>tTuxS62@H!&39Mp-?41G@qA bs~I)k@`cIhG~wHpH@g_}QS<3z!QB4=KFnzL diff --git a/tests/__snapshots__/test_snapshots/TestCommandPalette.test_can_run_command__hide_collection_browser.svg b/tests/__snapshots__/test_snapshots/TestCommandPalette.test_can_run_command__hide_collection_browser.svg index 101c7dfa..bac29bc5 100644 --- a/tests/__snapshots__/test_snapshots/TestCommandPalette.test_can_run_command__hide_collection_browser.svg +++ b/tests/__snapshots__/test_snapshots/TestCommandPalette.test_can_run_command__hide_collection_browser.svg @@ -19,162 +19,162 @@ font-weight: 700; } - .terminal-139384128-matrix { + .terminal-2113526484-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-139384128-title { + .terminal-2113526484-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-139384128-r1 { fill: #dfdfe1 } -.terminal-139384128-r2 { fill: #c5c8c6 } -.terminal-139384128-r3 { fill: #ff93dd } -.terminal-139384128-r4 { fill: #15111e;text-decoration: underline; } -.terminal-139384128-r5 { fill: #15111e } -.terminal-139384128-r6 { fill: #43365c } -.terminal-139384128-r7 { fill: #403e62 } -.terminal-139384128-r8 { fill: #210d17 } -.terminal-139384128-r9 { fill: #7e7c92 } -.terminal-139384128-r10 { fill: #e3e3e8 } -.terminal-139384128-r11 { fill: #efe3fb } -.terminal-139384128-r12 { fill: #9f9fa5 } -.terminal-139384128-r13 { fill: #632e53 } -.terminal-139384128-r14 { fill: #dfdfe1;font-weight: bold } -.terminal-139384128-r15 { fill: #6a6a74 } -.terminal-139384128-r16 { fill: #252532 } -.terminal-139384128-r17 { fill: #ff69b4 } -.terminal-139384128-r18 { fill: #252441 } -.terminal-139384128-r19 { fill: #737387 } -.terminal-139384128-r20 { fill: #e1e1e6 } -.terminal-139384128-r21 { fill: #918d9d } -.terminal-139384128-r22 { fill: #2e2e3c;font-weight: bold } -.terminal-139384128-r23 { fill: #2e2e3c } -.terminal-139384128-r24 { fill: #a0a0a6 } -.terminal-139384128-r25 { fill: #191928 } -.terminal-139384128-r26 { fill: #b74e87 } -.terminal-139384128-r27 { fill: #87878f } -.terminal-139384128-r28 { fill: #a3a3a9 } -.terminal-139384128-r29 { fill: #777780 } -.terminal-139384128-r30 { fill: #1f1f2d } -.terminal-139384128-r31 { fill: #04b375;font-weight: bold } -.terminal-139384128-r32 { fill: #ff7ec8;font-weight: bold } -.terminal-139384128-r33 { fill: #dbdbdd } + .terminal-2113526484-r1 { fill: #dfdfe1 } +.terminal-2113526484-r2 { fill: #c5c8c6 } +.terminal-2113526484-r3 { fill: #ff93dd } +.terminal-2113526484-r4 { fill: #15111e;text-decoration: underline; } +.terminal-2113526484-r5 { fill: #15111e } +.terminal-2113526484-r6 { fill: #43365c } +.terminal-2113526484-r7 { fill: #403e62 } +.terminal-2113526484-r8 { fill: #210d17 } +.terminal-2113526484-r9 { fill: #7e7c92 } +.terminal-2113526484-r10 { fill: #e3e3e8 } +.terminal-2113526484-r11 { fill: #efe3fb } +.terminal-2113526484-r12 { fill: #9f9fa5 } +.terminal-2113526484-r13 { fill: #632e53 } +.terminal-2113526484-r14 { fill: #dfdfe1;font-weight: bold } +.terminal-2113526484-r15 { fill: #6a6a74 } +.terminal-2113526484-r16 { fill: #252532 } +.terminal-2113526484-r17 { fill: #ff69b4 } +.terminal-2113526484-r18 { fill: #252441 } +.terminal-2113526484-r19 { fill: #737387 } +.terminal-2113526484-r20 { fill: #e1e1e6 } +.terminal-2113526484-r21 { fill: #918d9d } +.terminal-2113526484-r22 { fill: #2e2e3c;font-weight: bold } +.terminal-2113526484-r23 { fill: #2e2e3c } +.terminal-2113526484-r24 { fill: #a0a0a6 } +.terminal-2113526484-r25 { fill: #191928 } +.terminal-2113526484-r26 { fill: #b74e87 } +.terminal-2113526484-r27 { fill: #87878f } +.terminal-2113526484-r28 { fill: #a3a3a9 } +.terminal-2113526484-r29 { fill: #777780 } +.terminal-2113526484-r30 { fill: #1f1f2d } +.terminal-2113526484-r31 { fill: #04b375;font-weight: bold } +.terminal-2113526484-r32 { fill: #ff7ec8;font-weight: bold } +.terminal-2113526484-r33 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  - -╭──────────────────────────────────────────────────────────────── Request ─╮ -HeadersBodyQueryAuthInfoScriptsOptions -━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -NameValue Add header  -╰──────────────────────────────────────────────────────────────────────────╯ -╭─────────────────────────────────────────────────────────────── Response ─╮ -BodyHeadersCookiesScriptsTrace -━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - - - -1:1read-onlyJSONWrap X -╰──────────────────────────────────────────────────────────────────────────╯ - ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  + +╭──────────────────────────────────────────────────────────────── Request ─╮ +HeadersBodyQueryAuthInfoScriptsOptions +━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +NameValue Add header  +╰──────────────────────────────────────────────────────────────────────────╯ +╭─────────────────────────────────────────────────────────────── Response ─╮ +BodyHeadersCookiesScriptsTrace +━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + + + +1:1read-onlyJSONWrap X +╰──────────────────────────────────────────────────────────────────────────╯ + ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help diff --git a/tests/__snapshots__/test_snapshots/TestCommandPalette.test_loads_and_shows_discovery_options.svg b/tests/__snapshots__/test_snapshots/TestCommandPalette.test_loads_and_shows_discovery_options.svg index a461773e..60948f50 100644 --- a/tests/__snapshots__/test_snapshots/TestCommandPalette.test_loads_and_shows_discovery_options.svg +++ b/tests/__snapshots__/test_snapshots/TestCommandPalette.test_loads_and_shows_discovery_options.svg @@ -19,214 +19,214 @@ font-weight: 700; } - .terminal-3512500749-matrix { + .terminal-3870703821-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3512500749-title { + .terminal-3870703821-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3512500749-r1 { fill: #b2b2b4 } -.terminal-3512500749-r2 { fill: #c5c8c6 } -.terminal-3512500749-r3 { fill: #dfdfe0 } -.terminal-3512500749-r4 { fill: #cc75b0 } -.terminal-3512500749-r5 { fill: #100d18;text-decoration: underline; } -.terminal-3512500749-r6 { fill: #100d18 } -.terminal-3512500749-r7 { fill: #352b49 } -.terminal-3512500749-r8 { fill: #33314e } -.terminal-3512500749-r9 { fill: #1a0a12 } -.terminal-3512500749-r10 { fill: #646374 } -.terminal-3512500749-r11 { fill: #b5b5b9 } -.terminal-3512500749-r12 { fill: #ff69b4 } -.terminal-3512500749-r13 { fill: #bfb5c8 } -.terminal-3512500749-r14 { fill: #7f7f84 } -.terminal-3512500749-r15 { fill: #210d17 } -.terminal-3512500749-r16 { fill: #68686f } -.terminal-3512500749-r17 { fill: #4f2442 } -.terminal-3512500749-r18 { fill: #b5b5b9;font-weight: bold } -.terminal-3512500749-r19 { fill: #dfdfe0;font-weight: bold } -.terminal-3512500749-r20 { fill: #54545c } -.terminal-3512500749-r21 { fill: #0b84ba } -.terminal-3512500749-r22 { fill: #1d1d28 } -.terminal-3512500749-r23 { fill: #1b9d4b } -.terminal-3512500749-r24 { fill: #1d1c34 } -.terminal-3512500749-r25 { fill: #6f6f75 } -.terminal-3512500749-r26 { fill: #6f6f75;font-weight: bold } -.terminal-3512500749-r27 { fill: #00934c } -.terminal-3512500749-r28 { fill: #bf3636 } -.terminal-3512500749-r29 { fill: #b4b4b8 } -.terminal-3512500749-r30 { fill: #74707d } -.terminal-3512500749-r31 { fill: #0c0c18 } -.terminal-3512500749-r32 { fill: #c47e08 } -.terminal-3512500749-r33 { fill: #242430;font-weight: bold } -.terminal-3512500749-r34 { fill: #242430 } -.terminal-3512500749-r35 { fill: #808084 } -.terminal-3512500749-r36 { fill: #141420 } -.terminal-3512500749-r37 { fill: #923e6c } -.terminal-3512500749-r38 { fill: #0a0b24 } -.terminal-3512500749-r39 { fill: #6c6c72 } -.terminal-3512500749-r40 { fill: #828287 } -.terminal-3512500749-r41 { fill: #5f5f66 } -.terminal-3512500749-r42 { fill: #181824 } -.terminal-3512500749-r43 { fill: #038f5d;font-weight: bold } -.terminal-3512500749-r44 { fill: #cc64a0;font-weight: bold } -.terminal-3512500749-r45 { fill: #afafb0 } + .terminal-3870703821-r1 { fill: #b2b2b4 } +.terminal-3870703821-r2 { fill: #c5c8c6 } +.terminal-3870703821-r3 { fill: #dfdfe0 } +.terminal-3870703821-r4 { fill: #cc75b0 } +.terminal-3870703821-r5 { fill: #100d18;text-decoration: underline; } +.terminal-3870703821-r6 { fill: #100d18 } +.terminal-3870703821-r7 { fill: #352b49 } +.terminal-3870703821-r8 { fill: #33314e } +.terminal-3870703821-r9 { fill: #1a0a12 } +.terminal-3870703821-r10 { fill: #646374 } +.terminal-3870703821-r11 { fill: #ff69b4 } +.terminal-3870703821-r12 { fill: #b5b5b9 } +.terminal-3870703821-r13 { fill: #bfb5c8 } +.terminal-3870703821-r14 { fill: #7f7f84 } +.terminal-3870703821-r15 { fill: #210d17 } +.terminal-3870703821-r16 { fill: #68686f } +.terminal-3870703821-r17 { fill: #4f2442 } +.terminal-3870703821-r18 { fill: #b5b5b9;font-weight: bold } +.terminal-3870703821-r19 { fill: #dfdfe0;font-weight: bold } +.terminal-3870703821-r20 { fill: #54545c } +.terminal-3870703821-r21 { fill: #0b84ba } +.terminal-3870703821-r22 { fill: #1d1d28 } +.terminal-3870703821-r23 { fill: #1b9d4b } +.terminal-3870703821-r24 { fill: #1d1c34 } +.terminal-3870703821-r25 { fill: #6f6f75 } +.terminal-3870703821-r26 { fill: #6f6f75;font-weight: bold } +.terminal-3870703821-r27 { fill: #00934c } +.terminal-3870703821-r28 { fill: #bf3636 } +.terminal-3870703821-r29 { fill: #b4b4b8 } +.terminal-3870703821-r30 { fill: #74707d } +.terminal-3870703821-r31 { fill: #0c0c18 } +.terminal-3870703821-r32 { fill: #c47e08 } +.terminal-3870703821-r33 { fill: #242430;font-weight: bold } +.terminal-3870703821-r34 { fill: #242430 } +.terminal-3870703821-r35 { fill: #808084 } +.terminal-3870703821-r36 { fill: #141420 } +.terminal-3870703821-r37 { fill: #923e6c } +.terminal-3870703821-r38 { fill: #0a0b24 } +.terminal-3870703821-r39 { fill: #6c6c72 } +.terminal-3870703821-r40 { fill: #828287 } +.terminal-3870703821-r41 { fill: #5f5f66 } +.terminal-3870703821-r42 { fill: #181824 } +.terminal-3870703821-r43 { fill: #038f5d;font-weight: bold } +.terminal-3870703821-r44 { fill: #cc64a0;font-weight: bold } +.terminal-3870703821-r45 { fill: #afafb0 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                                                            - -GETEnter a URL... Send  -Search for commands… -╭─ Collection ───────────────────────────────────────── Request ─╮ - GET echo  app: quit                                      Options -GET get random user            Quit Posting━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -POS echo post                    layout: horizontal                             ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplaceholder/Change layout to horizontal╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ posts/  view: expand request                           ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get all                Expand the request sectioners.╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get one                  view: expand response                          ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -POS create                 Expand the response section╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -DEL delete a post            view: toggle collection browser                ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ comments/Toggle the collection browser╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get comments          Add header  -GET get comments (via param)│╰────────────────────────────────────────────────────────────────────────────╯ -PUT edit a comment          │╭───────────────────────────────────────────────────────────────── Response ─╮ -▼ todos/││BodyHeadersCookiesScriptsTrace -GET get all                   ││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -GET get one                   ││ -▼ users/││ -GET get a user                ││ -GET get all users             ││ -POS create a user             ││ -PUT update a user             ││ -│────────────────────────────────────││ -This is an echo server we can use ││ -to see exactly what request is ││ -being sent.││1:1read-onlyJSONWrap X -╰─────────────── sample-collections ─╯╰────────────────────────────────────────────────────────────────────────────╯ - ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help  + + + + +Posting                                                                                                            + +GETEnter a URL or paste Send  +Search for commands… +╭─ Collection ───────────────────────────────────────── Request ─╮ + GET echo  app: quit                                      Options +GET get random user            Quit Posting━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +POS echo post                    layout: horizontal                             ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplaceholder/Change layout to horizontal╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ posts/  view: expand request                           ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get all                Expand the request sectioners.╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get one                  view: expand response                          ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +POS create                 Expand the response section╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +DEL delete a post            view: toggle collection browser                ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ comments/Toggle the collection browser╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get comments          Add header  +GET get comments (via param)│╰────────────────────────────────────────────────────────────────────────────╯ +PUT edit a comment          │╭───────────────────────────────────────────────────────────────── Response ─╮ +▼ todos/││BodyHeadersCookiesScriptsTrace +GET get all                   ││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +GET get one                   ││ +▼ users/││ +GET get a user                ││ +GET get all users             ││ +POS create a user             ││ +PUT update a user             ││ +│────────────────────────────────────││ +This is an echo server we can use ││ +to see exactly what request is ││ +being sent.││1:1read-onlyJSONWrap X +╰─────────────── sample-collections ─╯╰────────────────────────────────────────────────────────────────────────────╯ + ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help  diff --git a/tests/__snapshots__/test_snapshots/TestHelpScreen.test_help_screen_appears.svg b/tests/__snapshots__/test_snapshots/TestHelpScreen.test_help_screen_appears.svg index aafeb68b..7f9170e4 100644 --- a/tests/__snapshots__/test_snapshots/TestHelpScreen.test_help_screen_appears.svg +++ b/tests/__snapshots__/test_snapshots/TestHelpScreen.test_help_screen_appears.svg @@ -19,251 +19,251 @@ font-weight: 700; } - .terminal-2342588274-matrix { + .terminal-172954886-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2342588274-title { + .terminal-172954886-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2342588274-r1 { fill: #9c9c9d } -.terminal-2342588274-r2 { fill: #c5c8c6 } -.terminal-2342588274-r3 { fill: #dfdfe0 } -.terminal-2342588274-r4 { fill: #b2669a } -.terminal-2342588274-r5 { fill: #0e0b15;text-decoration: underline; } -.terminal-2342588274-r6 { fill: #0e0b15 } -.terminal-2342588274-r7 { fill: #2e2540 } -.terminal-2342588274-r8 { fill: #50505e } -.terminal-2342588274-r9 { fill: #9d9da1 } -.terminal-2342588274-r10 { fill: #a79eaf } -.terminal-2342588274-r11 { fill: #6f6f73 } -.terminal-2342588274-r12 { fill: #2e2e3f } -.terminal-2342588274-r13 { fill: #dfdfe1;font-weight: bold } -.terminal-2342588274-r14 { fill: #dfdfe1 } -.terminal-2342588274-r15 { fill: #45203a } -.terminal-2342588274-r16 { fill: #0f0f1f } -.terminal-2342588274-r17 { fill: #9e9ea2;font-weight: bold } -.terminal-2342588274-r18 { fill: #a5a5ab;font-weight: bold } -.terminal-2342588274-r19 { fill: #4a4a51 } -.terminal-2342588274-r20 { fill: #0973a3 } -.terminal-2342588274-r21 { fill: #191923 } -.terminal-2342588274-r22 { fill: #178941 } -.terminal-2342588274-r23 { fill: #19192d } -.terminal-2342588274-r24 { fill: #616166 } -.terminal-2342588274-r25 { fill: #616166;font-weight: bold } -.terminal-2342588274-r26 { fill: #8b8b93;font-weight: bold } -.terminal-2342588274-r27 { fill: #008042 } -.terminal-2342588274-r28 { fill: #a72f2f } -.terminal-2342588274-r29 { fill: #a5a5ab } -.terminal-2342588274-r30 { fill: #ab6e07 } -.terminal-2342588274-r31 { fill: #e0e0e2;font-weight: bold } -.terminal-2342588274-r32 { fill: #e0e0e2 } -.terminal-2342588274-r33 { fill: #e1e0e4 } -.terminal-2342588274-r34 { fill: #e1e0e4;font-weight: bold } -.terminal-2342588274-r35 { fill: #e2e0e5 } -.terminal-2342588274-r36 { fill: #65626d } -.terminal-2342588274-r37 { fill: #e2e0e5;font-weight: bold } -.terminal-2342588274-r38 { fill: #20202a } -.terminal-2342588274-r39 { fill: #707074 } -.terminal-2342588274-r40 { fill: #11111c } -.terminal-2342588274-r41 { fill: #0d0e2e } -.terminal-2342588274-r42 { fill: #6f6f78;font-weight: bold } -.terminal-2342588274-r43 { fill: #6f6f78 } -.terminal-2342588274-r44 { fill: #5e5e64 } -.terminal-2342588274-r45 { fill: #727276 } -.terminal-2342588274-r46 { fill: #535359 } -.terminal-2342588274-r47 { fill: #15151f } -.terminal-2342588274-r48 { fill: #027d51;font-weight: bold } -.terminal-2342588274-r49 { fill: #b2588c;font-weight: bold } -.terminal-2342588274-r50 { fill: #99999a } + .terminal-172954886-r1 { fill: #9c9c9d } +.terminal-172954886-r2 { fill: #c5c8c6 } +.terminal-172954886-r3 { fill: #dfdfe0 } +.terminal-172954886-r4 { fill: #b2669a } +.terminal-172954886-r5 { fill: #0e0b15;text-decoration: underline; } +.terminal-172954886-r6 { fill: #0e0b15 } +.terminal-172954886-r7 { fill: #2e2540 } +.terminal-172954886-r8 { fill: #50505e } +.terminal-172954886-r9 { fill: #9d9da1 } +.terminal-172954886-r10 { fill: #a79eaf } +.terminal-172954886-r11 { fill: #6f6f73 } +.terminal-172954886-r12 { fill: #2e2e3f } +.terminal-172954886-r13 { fill: #dfdfe1;font-weight: bold } +.terminal-172954886-r14 { fill: #dfdfe1 } +.terminal-172954886-r15 { fill: #45203a } +.terminal-172954886-r16 { fill: #0f0f1f } +.terminal-172954886-r17 { fill: #9e9ea2;font-weight: bold } +.terminal-172954886-r18 { fill: #a5a5ab;font-weight: bold } +.terminal-172954886-r19 { fill: #4a4a51 } +.terminal-172954886-r20 { fill: #0973a3 } +.terminal-172954886-r21 { fill: #191923 } +.terminal-172954886-r22 { fill: #178941 } +.terminal-172954886-r23 { fill: #19192d } +.terminal-172954886-r24 { fill: #616166 } +.terminal-172954886-r25 { fill: #616166;font-weight: bold } +.terminal-172954886-r26 { fill: #8b8b93;font-weight: bold } +.terminal-172954886-r27 { fill: #008042 } +.terminal-172954886-r28 { fill: #a72f2f } +.terminal-172954886-r29 { fill: #a5a5ab } +.terminal-172954886-r30 { fill: #ab6e07 } +.terminal-172954886-r31 { fill: #e0e0e2;font-weight: bold } +.terminal-172954886-r32 { fill: #e0e0e2 } +.terminal-172954886-r33 { fill: #e1e0e4 } +.terminal-172954886-r34 { fill: #e1e0e4;font-weight: bold } +.terminal-172954886-r35 { fill: #e2e0e5 } +.terminal-172954886-r36 { fill: #65626d } +.terminal-172954886-r37 { fill: #e2e0e5;font-weight: bold } +.terminal-172954886-r38 { fill: #20202a } +.terminal-172954886-r39 { fill: #707074 } +.terminal-172954886-r40 { fill: #11111c } +.terminal-172954886-r41 { fill: #0d0e2e } +.terminal-172954886-r42 { fill: #6f6f78;font-weight: bold } +.terminal-172954886-r43 { fill: #6f6f78 } +.terminal-172954886-r44 { fill: #5e5e64 } +.terminal-172954886-r45 { fill: #727276 } +.terminal-172954886-r46 { fill: #535359 } +.terminal-172954886-r47 { fill: #15151f } +.terminal-172954886-r48 { fill: #027d51;font-weight: bold } +.terminal-172954886-r49 { fill: #b2588c;font-weight: bold } +.terminal-172954886-r50 { fill: #99999a } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  -▁▁Focused Widget Help (Address Bar)▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -╭─ Collectio Request ─╮ - GET echoAddress BariptsOptio -GET get raEnter the URL to send a request to. Refer to ━━━━━━━━━━━ -POS echo pvariables from the environment (loaded via ╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplace--env) using $variable or ${variable} syntax. ╱╱╱╱╱╱╱╱╱╱╱ -▼ posts/Resolved variables will be highlighted green. ╱╱╱╱╱╱╱╱╱╱╱ -GET geMove the cursor over a variable to preview the╱╱╱╱╱╱╱╱╱╱╱ -GET gevalue. Base URL suggestions are loaded based ╱╱╱╱╱╱╱╱╱╱╱ -POS cron the URLs found in the currently open ╱╱╱╱╱╱╱╱╱╱╱ -DEL decollection. Press ctrl+l to quickly focus this╱╱╱╱╱╱╱╱╱╱╱ -▼ commebar from elsewhere.╱╱╱╱╱╱╱╱╱╱╱ -GET╱╱╱╱╱╱╱╱╱╱╱ -GETAll Keybindings╱╱╱╱╱╱╱╱╱╱╱ -PUT Key   Description                   ╱╱╱╱╱╱╱╱╱╱╱ -▼ todos/ move cursor left              ╱╱╱╱╱╱╱╱╱╱╱ -GET ge^← move cursor left a word        header  -GET ge move cursor right             ───────────╯ -▼ users/^→ move cursor right a word       Response ─╮ -GET ge delete character left         e -GET gehome go to start                   ━━━━━━━━━━━ -POS cr^a go to start                    -PUT upend go to end                      -DEL de^e go to end                      -del delete character right         -^d delete character right         - submit                         - -Press ESC to dismiss. -│───────────Note: This page relates to the widget that is  -This is ancurrently focused. -server we  -see exactl▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -request is being ││ -sent.││1:1read-onlyJSONWrap X -╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ - ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  +▁▁Focused Widget Help (Address Bar)▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +╭─ Collectio Request ─╮ + GET echoAddress BariptsOptio +GET get raEnter the URL to send a request to. Refer to ━━━━━━━━━━━ +POS echo pvariables from the environment (loaded via ╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplace--env) using $variable or ${variable} syntax. ╱╱╱╱╱╱╱╱╱╱╱ +▼ posts/Resolved variables will be highlighted green. ╱╱╱╱╱╱╱╱╱╱╱ +GET geMove the cursor over a variable to preview the╱╱╱╱╱╱╱╱╱╱╱ +GET gevalue. Base URL suggestions are loaded based ╱╱╱╱╱╱╱╱╱╱╱ +POS cron the URLs found in the currently open ╱╱╱╱╱╱╱╱╱╱╱ +DEL decollection. Press ctrl+l to quickly focus this╱╱╱╱╱╱╱╱╱╱╱ +▼ commebar from elsewhere.╱╱╱╱╱╱╱╱╱╱╱ +GET╱╱╱╱╱╱╱╱╱╱╱ +GETAll Keybindings╱╱╱╱╱╱╱╱╱╱╱ +PUT Key   Description                   ╱╱╱╱╱╱╱╱╱╱╱ +▼ todos/ move cursor left              ╱╱╱╱╱╱╱╱╱╱╱ +GET ge^← move cursor left a word        header  +GET ge move cursor right             ───────────╯ +▼ users/^→ move cursor right a word       Response ─╮ +GET ge delete character left         e +GET gehome go to start                   ━━━━━━━━━━━ +POS cr^a go to start                    +PUT upend go to end                      +DEL de^e go to end                      +del delete character right         +^d delete character right         + submit                         + +Press ESC to dismiss. +│───────────Note: This page relates to the widget that is  +This is ancurrently focused. +server we  +see exactl▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +request is being ││ +sent.││1:1read-onlyJSONWrap X +╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ + ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help diff --git a/tests/__snapshots__/test_snapshots/TestJumpMode.test_click_switch.svg b/tests/__snapshots__/test_snapshots/TestJumpMode.test_click_switch.svg index b805c28a..516a68f2 100644 --- a/tests/__snapshots__/test_snapshots/TestJumpMode.test_click_switch.svg +++ b/tests/__snapshots__/test_snapshots/TestJumpMode.test_click_switch.svg @@ -19,167 +19,167 @@ font-weight: 700; } - .terminal-54336171-matrix { + .terminal-1133912127-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-54336171-title { + .terminal-1133912127-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-54336171-r1 { fill: #dfdfe1 } -.terminal-54336171-r2 { fill: #c5c8c6 } -.terminal-54336171-r3 { fill: #ff93dd } -.terminal-54336171-r4 { fill: #15111e;text-decoration: underline; } -.terminal-54336171-r5 { fill: #15111e } -.terminal-54336171-r6 { fill: #43365c } -.terminal-54336171-r7 { fill: #737387 } -.terminal-54336171-r8 { fill: #e1e1e6 } -.terminal-54336171-r9 { fill: #efe3fb } -.terminal-54336171-r10 { fill: #9f9fa5 } -.terminal-54336171-r11 { fill: #632e53 } -.terminal-54336171-r12 { fill: #ff69b4 } -.terminal-54336171-r13 { fill: #dfdfe1;font-weight: bold } -.terminal-54336171-r14 { fill: #e3e3e8;font-weight: bold } -.terminal-54336171-r15 { fill: #0f0f1f } -.terminal-54336171-r16 { fill: #6a6a74 } -.terminal-54336171-r17 { fill: #0ea5e9 } -.terminal-54336171-r18 { fill: #873c69 } -.terminal-54336171-r19 { fill: #22c55e } -.terminal-54336171-r20 { fill: #30303b } -.terminal-54336171-r21 { fill: #00fa9a;font-weight: bold } -.terminal-54336171-r22 { fill: #8b8b93 } -.terminal-54336171-r23 { fill: #8b8b93;font-weight: bold } -.terminal-54336171-r24 { fill: #0d0e2e } -.terminal-54336171-r25 { fill: #00b85f } -.terminal-54336171-r26 { fill: #ef4444 } -.terminal-54336171-r27 { fill: #2e2e3c;font-weight: bold } -.terminal-54336171-r28 { fill: #2e2e3c } -.terminal-54336171-r29 { fill: #a0a0a6 } -.terminal-54336171-r30 { fill: #191928 } -.terminal-54336171-r31 { fill: #b74e87 } -.terminal-54336171-r32 { fill: #87878f } -.terminal-54336171-r33 { fill: #a3a3a9 } -.terminal-54336171-r34 { fill: #777780 } -.terminal-54336171-r35 { fill: #1f1f2d } -.terminal-54336171-r36 { fill: #04b375;font-weight: bold } -.terminal-54336171-r37 { fill: #ff7ec8;font-weight: bold } -.terminal-54336171-r38 { fill: #dbdbdd } + .terminal-1133912127-r1 { fill: #dfdfe1 } +.terminal-1133912127-r2 { fill: #c5c8c6 } +.terminal-1133912127-r3 { fill: #ff93dd } +.terminal-1133912127-r4 { fill: #15111e;text-decoration: underline; } +.terminal-1133912127-r5 { fill: #15111e } +.terminal-1133912127-r6 { fill: #43365c } +.terminal-1133912127-r7 { fill: #737387 } +.terminal-1133912127-r8 { fill: #e1e1e6 } +.terminal-1133912127-r9 { fill: #efe3fb } +.terminal-1133912127-r10 { fill: #9f9fa5 } +.terminal-1133912127-r11 { fill: #632e53 } +.terminal-1133912127-r12 { fill: #ff69b4 } +.terminal-1133912127-r13 { fill: #dfdfe1;font-weight: bold } +.terminal-1133912127-r14 { fill: #e3e3e8;font-weight: bold } +.terminal-1133912127-r15 { fill: #0f0f1f } +.terminal-1133912127-r16 { fill: #6a6a74 } +.terminal-1133912127-r17 { fill: #0ea5e9 } +.terminal-1133912127-r18 { fill: #873c69 } +.terminal-1133912127-r19 { fill: #22c55e } +.terminal-1133912127-r20 { fill: #30303b } +.terminal-1133912127-r21 { fill: #00fa9a;font-weight: bold } +.terminal-1133912127-r22 { fill: #8b8b93 } +.terminal-1133912127-r23 { fill: #8b8b93;font-weight: bold } +.terminal-1133912127-r24 { fill: #0d0e2e } +.terminal-1133912127-r25 { fill: #00b85f } +.terminal-1133912127-r26 { fill: #ef4444 } +.terminal-1133912127-r27 { fill: #2e2e3c;font-weight: bold } +.terminal-1133912127-r28 { fill: #2e2e3c } +.terminal-1133912127-r29 { fill: #a0a0a6 } +.terminal-1133912127-r30 { fill: #191928 } +.terminal-1133912127-r31 { fill: #b74e87 } +.terminal-1133912127-r32 { fill: #87878f } +.terminal-1133912127-r33 { fill: #a3a3a9 } +.terminal-1133912127-r34 { fill: #777780 } +.terminal-1133912127-r35 { fill: #1f1f2d } +.terminal-1133912127-r36 { fill: #04b375;font-weight: bold } +.terminal-1133912127-r37 { fill: #ff7ec8;font-weight: bold } +.terminal-1133912127-r38 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  - -╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ - GET echoadersBodyQueryAuthInfoScriptsOptions -GET get random user━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━ -POS echo postX Follow redirects -▼ jsonplaceholder/X Verify SSL certificates -▼ posts/X Attach cookies -GET get allProxy URL:                                    -GET get one╰─────────────────────────────────────────────────╯ -POS create│╭────────────────────────────────────── Response ─╮ -DEL delete a post││BodyHeadersCookiesScriptsTrace -│───────────────────────││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -This is an echo ││ -server we can use to ││ -see exactly what ││ -request is being ││ -sent.││1:1read-onlyJSONWrap X -╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ - ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  + +╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ + GET echoadersBodyQueryAuthInfoScriptsOptions +GET get random user━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━ +POS echo postX Follow redirects +▼ jsonplaceholder/X Verify SSL certificates +▼ posts/X Attach cookies +GET get allProxy URL:                                    +GET get one╰─────────────────────────────────────────────────╯ +POS create│╭────────────────────────────────────── Response ─╮ +DEL delete a post││BodyHeadersCookiesScriptsTrace +│───────────────────────││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +This is an echo ││ +server we can use to ││ +see exactly what ││ +request is being ││ +sent.││1:1read-onlyJSONWrap X +╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ + ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help diff --git a/tests/__snapshots__/test_snapshots/TestJumpMode.test_focus_switch.svg b/tests/__snapshots__/test_snapshots/TestJumpMode.test_focus_switch.svg index d50a0146..00f56d46 100644 --- a/tests/__snapshots__/test_snapshots/TestJumpMode.test_focus_switch.svg +++ b/tests/__snapshots__/test_snapshots/TestJumpMode.test_focus_switch.svg @@ -19,167 +19,167 @@ font-weight: 700; } - .terminal-2748765789-matrix { + .terminal-3672890353-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2748765789-title { + .terminal-3672890353-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2748765789-r1 { fill: #dfdfe1 } -.terminal-2748765789-r2 { fill: #c5c8c6 } -.terminal-2748765789-r3 { fill: #ff93dd } -.terminal-2748765789-r4 { fill: #15111e;text-decoration: underline; } -.terminal-2748765789-r5 { fill: #15111e } -.terminal-2748765789-r6 { fill: #43365c } -.terminal-2748765789-r7 { fill: #737387 } -.terminal-2748765789-r8 { fill: #e1e1e6 } -.terminal-2748765789-r9 { fill: #efe3fb } -.terminal-2748765789-r10 { fill: #9f9fa5 } -.terminal-2748765789-r11 { fill: #ff69b4 } -.terminal-2748765789-r12 { fill: #dfdfe1;font-weight: bold } -.terminal-2748765789-r13 { fill: #632e53 } -.terminal-2748765789-r14 { fill: #210d17;font-weight: bold } -.terminal-2748765789-r15 { fill: #0f0f1f } -.terminal-2748765789-r16 { fill: #6a6a74 } -.terminal-2748765789-r17 { fill: #0ea5e9 } -.terminal-2748765789-r18 { fill: #252532 } -.terminal-2748765789-r19 { fill: #22c55e } -.terminal-2748765789-r20 { fill: #252441 } -.terminal-2748765789-r21 { fill: #8b8b93 } -.terminal-2748765789-r22 { fill: #8b8b93;font-weight: bold } -.terminal-2748765789-r23 { fill: #0d0e2e } -.terminal-2748765789-r24 { fill: #00b85f } -.terminal-2748765789-r25 { fill: #918d9d } -.terminal-2748765789-r26 { fill: #ef4444 } -.terminal-2748765789-r27 { fill: #2e2e3c;font-weight: bold } -.terminal-2748765789-r28 { fill: #2e2e3c } -.terminal-2748765789-r29 { fill: #a0a0a6 } -.terminal-2748765789-r30 { fill: #191928 } -.terminal-2748765789-r31 { fill: #b74e87 } -.terminal-2748765789-r32 { fill: #87878f } -.terminal-2748765789-r33 { fill: #a3a3a9 } -.terminal-2748765789-r34 { fill: #777780 } -.terminal-2748765789-r35 { fill: #1f1f2d } -.terminal-2748765789-r36 { fill: #04b375;font-weight: bold } -.terminal-2748765789-r37 { fill: #ff7ec8;font-weight: bold } -.terminal-2748765789-r38 { fill: #dbdbdd } + .terminal-3672890353-r1 { fill: #dfdfe1 } +.terminal-3672890353-r2 { fill: #c5c8c6 } +.terminal-3672890353-r3 { fill: #ff93dd } +.terminal-3672890353-r4 { fill: #15111e;text-decoration: underline; } +.terminal-3672890353-r5 { fill: #15111e } +.terminal-3672890353-r6 { fill: #43365c } +.terminal-3672890353-r7 { fill: #737387 } +.terminal-3672890353-r8 { fill: #e1e1e6 } +.terminal-3672890353-r9 { fill: #efe3fb } +.terminal-3672890353-r10 { fill: #9f9fa5 } +.terminal-3672890353-r11 { fill: #ff69b4 } +.terminal-3672890353-r12 { fill: #dfdfe1;font-weight: bold } +.terminal-3672890353-r13 { fill: #632e53 } +.terminal-3672890353-r14 { fill: #210d17;font-weight: bold } +.terminal-3672890353-r15 { fill: #0f0f1f } +.terminal-3672890353-r16 { fill: #6a6a74 } +.terminal-3672890353-r17 { fill: #0ea5e9 } +.terminal-3672890353-r18 { fill: #252532 } +.terminal-3672890353-r19 { fill: #22c55e } +.terminal-3672890353-r20 { fill: #252441 } +.terminal-3672890353-r21 { fill: #8b8b93 } +.terminal-3672890353-r22 { fill: #8b8b93;font-weight: bold } +.terminal-3672890353-r23 { fill: #0d0e2e } +.terminal-3672890353-r24 { fill: #00b85f } +.terminal-3672890353-r25 { fill: #918d9d } +.terminal-3672890353-r26 { fill: #ef4444 } +.terminal-3672890353-r27 { fill: #2e2e3c;font-weight: bold } +.terminal-3672890353-r28 { fill: #2e2e3c } +.terminal-3672890353-r29 { fill: #a0a0a6 } +.terminal-3672890353-r30 { fill: #191928 } +.terminal-3672890353-r31 { fill: #b74e87 } +.terminal-3672890353-r32 { fill: #87878f } +.terminal-3672890353-r33 { fill: #a3a3a9 } +.terminal-3672890353-r34 { fill: #777780 } +.terminal-3672890353-r35 { fill: #1f1f2d } +.terminal-3672890353-r36 { fill: #04b375;font-weight: bold } +.terminal-3672890353-r37 { fill: #ff7ec8;font-weight: bold } +.terminal-3672890353-r38 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  - -╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ - GET echoHeadersBodyQueryAuthInfoScriptsOptio -GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get allNameValue Add header  -GET get one╰─────────────────────────────────────────────────╯ -POS create╭────────────────────────────────────── Response ─╮ -DEL delete a postBodyHeadersCookiesScriptsTrace -───────────────────────━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -This is an echo  -server we can use to  -see exactly what  -request is being  -sent.1:1read-onlyJSONWrap X -╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ - d Dupe  ⌫ Delete  ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  + +╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ + GET echoHeadersBodyQueryAuthInfoScriptsOptio +GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get allNameValue Add header  +GET get one╰─────────────────────────────────────────────────╯ +POS create╭────────────────────────────────────── Response ─╮ +DEL delete a postBodyHeadersCookiesScriptsTrace +───────────────────────━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +This is an echo  +server we can use to  +see exactly what  +request is being  +sent.1:1read-onlyJSONWrap X +╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ + d Dupe  ⌫ Delete  ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump diff --git a/tests/__snapshots__/test_snapshots/TestJumpMode.test_loads.svg b/tests/__snapshots__/test_snapshots/TestJumpMode.test_loads.svg index 54bb5db3..31b3a97b 100644 --- a/tests/__snapshots__/test_snapshots/TestJumpMode.test_loads.svg +++ b/tests/__snapshots__/test_snapshots/TestJumpMode.test_loads.svg @@ -19,172 +19,172 @@ font-weight: 700; } - .terminal-3231724221-matrix { + .terminal-193017937-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3231724221-title { + .terminal-193017937-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3231724221-r1 { fill: #9c9c9d } -.terminal-3231724221-r2 { fill: #c5c8c6 } -.terminal-3231724221-r3 { fill: #dfdfe0 } -.terminal-3231724221-r4 { fill: #b2669a } -.terminal-3231724221-r5 { fill: #21131c;font-weight: bold } -.terminal-3231724221-r6 { fill: #0e0b15;text-decoration: underline; } -.terminal-3231724221-r7 { fill: #0e0b15 } -.terminal-3231724221-r8 { fill: #2e2540 } -.terminal-3231724221-r9 { fill: #50505e } -.terminal-3231724221-r10 { fill: #9d9da1 } -.terminal-3231724221-r11 { fill: #a79eaf } -.terminal-3231724221-r12 { fill: #6f6f73 } -.terminal-3231724221-r13 { fill: #45203a } -.terminal-3231724221-r14 { fill: #9e9ea2;font-weight: bold } -.terminal-3231724221-r15 { fill: #0a0a15 } -.terminal-3231724221-r16 { fill: #9c9c9d;font-weight: bold } -.terminal-3231724221-r17 { fill: #4a4a51 } -.terminal-3231724221-r18 { fill: #0973a3 } -.terminal-3231724221-r19 { fill: #191923 } -.terminal-3231724221-r20 { fill: #b2497e } -.terminal-3231724221-r21 { fill: #178941 } -.terminal-3231724221-r22 { fill: #19192d } -.terminal-3231724221-r23 { fill: #616166 } -.terminal-3231724221-r24 { fill: #616166;font-weight: bold } -.terminal-3231724221-r25 { fill: #090920 } -.terminal-3231724221-r26 { fill: #008042 } -.terminal-3231724221-r27 { fill: #65626d } -.terminal-3231724221-r28 { fill: #a72f2f } -.terminal-3231724221-r29 { fill: #20202a;font-weight: bold } -.terminal-3231724221-r30 { fill: #20202a } -.terminal-3231724221-r31 { fill: #707074 } -.terminal-3231724221-r32 { fill: #11111c } -.terminal-3231724221-r33 { fill: #80365e } -.terminal-3231724221-r34 { fill: #5e5e64 } -.terminal-3231724221-r35 { fill: #727276 } -.terminal-3231724221-r36 { fill: #535359 } -.terminal-3231724221-r37 { fill: #15151f } -.terminal-3231724221-r38 { fill: #027d51;font-weight: bold } -.terminal-3231724221-r39 { fill: #d13c8c } -.terminal-3231724221-r40 { fill: #210d17 } -.terminal-3231724221-r41 { fill: #707077 } -.terminal-3231724221-r42 { fill: #707077;font-weight: bold } + .terminal-193017937-r1 { fill: #9c9c9d } +.terminal-193017937-r2 { fill: #c5c8c6 } +.terminal-193017937-r3 { fill: #dfdfe0 } +.terminal-193017937-r4 { fill: #b2669a } +.terminal-193017937-r5 { fill: #21131c;font-weight: bold } +.terminal-193017937-r6 { fill: #0e0b15;text-decoration: underline; } +.terminal-193017937-r7 { fill: #0e0b15 } +.terminal-193017937-r8 { fill: #2e2540 } +.terminal-193017937-r9 { fill: #50505e } +.terminal-193017937-r10 { fill: #9d9da1 } +.terminal-193017937-r11 { fill: #a79eaf } +.terminal-193017937-r12 { fill: #6f6f73 } +.terminal-193017937-r13 { fill: #45203a } +.terminal-193017937-r14 { fill: #9e9ea2;font-weight: bold } +.terminal-193017937-r15 { fill: #0a0a15 } +.terminal-193017937-r16 { fill: #9c9c9d;font-weight: bold } +.terminal-193017937-r17 { fill: #4a4a51 } +.terminal-193017937-r18 { fill: #0973a3 } +.terminal-193017937-r19 { fill: #191923 } +.terminal-193017937-r20 { fill: #b2497e } +.terminal-193017937-r21 { fill: #178941 } +.terminal-193017937-r22 { fill: #19192d } +.terminal-193017937-r23 { fill: #616166 } +.terminal-193017937-r24 { fill: #616166;font-weight: bold } +.terminal-193017937-r25 { fill: #090920 } +.terminal-193017937-r26 { fill: #008042 } +.terminal-193017937-r27 { fill: #65626d } +.terminal-193017937-r28 { fill: #a72f2f } +.terminal-193017937-r29 { fill: #20202a;font-weight: bold } +.terminal-193017937-r30 { fill: #20202a } +.terminal-193017937-r31 { fill: #707074 } +.terminal-193017937-r32 { fill: #11111c } +.terminal-193017937-r33 { fill: #80365e } +.terminal-193017937-r34 { fill: #5e5e64 } +.terminal-193017937-r35 { fill: #727276 } +.terminal-193017937-r36 { fill: #535359 } +.terminal-193017937-r37 { fill: #15151f } +.terminal-193017937-r38 { fill: #027d51;font-weight: bold } +.terminal-193017937-r39 { fill: #d13c8c } +.terminal-193017937-r40 { fill: #210d17 } +.terminal-193017937-r41 { fill: #707077 } +.terminal-193017937-r42 { fill: #707077;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -1GET2Enter a URL... Send  - -╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ -tabT echo││qHeaderswBodyeQueryrAuthtInfoyScriptsuOptio -GET get random user  ││━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -POS echo post        ││╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplaceholder/││╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ posts/││╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get all      ││NameValue Add header  -GET get one      │╰─────────────────────────────────────────────────╯ -POS create       │╭────────────────────────────────────── Response ─╮ -DEL delete a post││aBodysHeadersdCookiesfScriptsgTrace -│───────────────────────││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -This is an echo ││ -server we can use to ││ -see exactly what ││ -request is being ││ -sent.││1:1read-onlyJSONWrap X -╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ -╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱Press a key to jump╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -ESC to dismiss                                  + + + + +Posting                                                                    + +1GET2Enter a URL or paste a curl command... Send  + +╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ +tabT echo││qHeaderswBodyeQueryrAuthtInfoyScriptsuOptio +GET get random user  ││━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +POS echo post        ││╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplaceholder/││╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ posts/││╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get all      ││NameValue Add header  +GET get one      │╰─────────────────────────────────────────────────╯ +POS create       │╭────────────────────────────────────── Response ─╮ +DEL delete a post││aBodysHeadersdCookiesfScriptsgTrace +│───────────────────────││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +This is an echo ││ +server we can use to ││ +see exactly what ││ +request is being ││ +sent.││1:1read-onlyJSONWrap X +╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ +╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱Press a key to jump╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +ESC to dismiss                                  diff --git a/tests/__snapshots__/test_snapshots/TestLoadingRequest.test_request_loaded_into_view__headers.svg b/tests/__snapshots__/test_snapshots/TestLoadingRequest.test_request_loaded_into_view__headers.svg index 154b4b74..c8b2f118 100644 --- a/tests/__snapshots__/test_snapshots/TestLoadingRequest.test_request_loaded_into_view__headers.svg +++ b/tests/__snapshots__/test_snapshots/TestLoadingRequest.test_request_loaded_into_view__headers.svg @@ -19,206 +19,206 @@ font-weight: 700; } - .terminal-4062463837-matrix { + .terminal-2852277489-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4062463837-title { + .terminal-2852277489-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4062463837-r1 { fill: #dfdfe1 } -.terminal-4062463837-r2 { fill: #c5c8c6 } -.terminal-4062463837-r3 { fill: #ff93dd } -.terminal-4062463837-r4 { fill: #15111e;text-decoration: underline; } -.terminal-4062463837-r5 { fill: #15111e } -.terminal-4062463837-r6 { fill: #43365c } -.terminal-4062463837-r7 { fill: #737387 } -.terminal-4062463837-r8 { fill: #e1e1e6 } -.terminal-4062463837-r9 { fill: #efe3fb } -.terminal-4062463837-r10 { fill: #9f9fa5 } -.terminal-4062463837-r11 { fill: #ff69b4 } -.terminal-4062463837-r12 { fill: #dfdfe1;font-weight: bold } -.terminal-4062463837-r13 { fill: #632e53 } -.terminal-4062463837-r14 { fill: #0ea5e9 } -.terminal-4062463837-r15 { fill: #6a6a74 } -.terminal-4062463837-r16 { fill: #252532 } -.terminal-4062463837-r17 { fill: #22c55e } -.terminal-4062463837-r18 { fill: #252441 } -.terminal-4062463837-r19 { fill: #8b8b93 } -.terminal-4062463837-r20 { fill: #8b8b93;font-weight: bold } -.terminal-4062463837-r21 { fill: #00b85f } -.terminal-4062463837-r22 { fill: #210d17;font-weight: bold } -.terminal-4062463837-r23 { fill: #918d9d } -.terminal-4062463837-r24 { fill: #f59e0b } -.terminal-4062463837-r25 { fill: #ef4444 } -.terminal-4062463837-r26 { fill: #2e2e3c;font-weight: bold } -.terminal-4062463837-r27 { fill: #2e2e3c } -.terminal-4062463837-r28 { fill: #a0a0a6 } -.terminal-4062463837-r29 { fill: #191928 } -.terminal-4062463837-r30 { fill: #b74e87 } -.terminal-4062463837-r31 { fill: #87878f } -.terminal-4062463837-r32 { fill: #a3a3a9 } -.terminal-4062463837-r33 { fill: #777780 } -.terminal-4062463837-r34 { fill: #1f1f2d } -.terminal-4062463837-r35 { fill: #04b375;font-weight: bold } -.terminal-4062463837-r36 { fill: #ff7ec8;font-weight: bold } -.terminal-4062463837-r37 { fill: #dbdbdd } + .terminal-2852277489-r1 { fill: #dfdfe1 } +.terminal-2852277489-r2 { fill: #c5c8c6 } +.terminal-2852277489-r3 { fill: #ff93dd } +.terminal-2852277489-r4 { fill: #15111e;text-decoration: underline; } +.terminal-2852277489-r5 { fill: #15111e } +.terminal-2852277489-r6 { fill: #43365c } +.terminal-2852277489-r7 { fill: #737387 } +.terminal-2852277489-r8 { fill: #e1e1e6 } +.terminal-2852277489-r9 { fill: #efe3fb } +.terminal-2852277489-r10 { fill: #9f9fa5 } +.terminal-2852277489-r11 { fill: #ff69b4 } +.terminal-2852277489-r12 { fill: #dfdfe1;font-weight: bold } +.terminal-2852277489-r13 { fill: #632e53 } +.terminal-2852277489-r14 { fill: #0ea5e9 } +.terminal-2852277489-r15 { fill: #6a6a74 } +.terminal-2852277489-r16 { fill: #252532 } +.terminal-2852277489-r17 { fill: #22c55e } +.terminal-2852277489-r18 { fill: #252441 } +.terminal-2852277489-r19 { fill: #8b8b93 } +.terminal-2852277489-r20 { fill: #8b8b93;font-weight: bold } +.terminal-2852277489-r21 { fill: #00b85f } +.terminal-2852277489-r22 { fill: #210d17;font-weight: bold } +.terminal-2852277489-r23 { fill: #918d9d } +.terminal-2852277489-r24 { fill: #f59e0b } +.terminal-2852277489-r25 { fill: #ef4444 } +.terminal-2852277489-r26 { fill: #2e2e3c;font-weight: bold } +.terminal-2852277489-r27 { fill: #2e2e3c } +.terminal-2852277489-r28 { fill: #a0a0a6 } +.terminal-2852277489-r29 { fill: #191928 } +.terminal-2852277489-r30 { fill: #b74e87 } +.terminal-2852277489-r31 { fill: #87878f } +.terminal-2852277489-r32 { fill: #a3a3a9 } +.terminal-2852277489-r33 { fill: #777780 } +.terminal-2852277489-r34 { fill: #1f1f2d } +.terminal-2852277489-r35 { fill: #04b375;font-weight: bold } +.terminal-2852277489-r36 { fill: #ff7ec8;font-weight: bold } +.terminal-2852277489-r37 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  - -╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ -GET echoHeadersBodyQueryAuthInfoScriptsOptio -GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▶ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ todos/╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get all╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get one╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ users/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get a user╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get all usersNameValue Add header  -POS create a user╰─────────────────────────────────────────────────╯ -PUT update a user╭────────────────────────────────────── Response ─╮ -DEL delete a userBodyHeadersCookiesScriptsTrace -━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - - - - - - - - -1:1read-onlyJSONWrap X -╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ - d Dupe  ⌫ Delete  ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  + +╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ +GET echoHeadersBodyQueryAuthInfoScriptsOptio +GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▶ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ todos/╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get all╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get one╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ users/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get a user╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get all usersNameValue Add header  +POS create a user╰─────────────────────────────────────────────────╯ +PUT update a user╭────────────────────────────────────── Response ─╮ +DEL delete a userBodyHeadersCookiesScriptsTrace +━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + + + + + + + + +1:1read-onlyJSONWrap X +╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ + d Dupe  ⌫ Delete  ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump diff --git a/tests/__snapshots__/test_snapshots/TestMethodSelection.test_select_post_method.svg b/tests/__snapshots__/test_snapshots/TestMethodSelection.test_select_post_method.svg index f07dfbbb..213292a8 100644 --- a/tests/__snapshots__/test_snapshots/TestMethodSelection.test_select_post_method.svg +++ b/tests/__snapshots__/test_snapshots/TestMethodSelection.test_select_post_method.svg @@ -19,167 +19,167 @@ font-weight: 700; } - .terminal-1642642836-matrix { + .terminal-3651584808-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1642642836-title { + .terminal-3651584808-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1642642836-r1 { fill: #dfdfe1 } -.terminal-1642642836-r2 { fill: #c5c8c6 } -.terminal-1642642836-r3 { fill: #ff93dd } -.terminal-1642642836-r4 { fill: #21101a;text-decoration: underline; } -.terminal-1642642836-r5 { fill: #21101a } -.terminal-1642642836-r6 { fill: #663250 } -.terminal-1642642836-r7 { fill: #737387 } -.terminal-1642642836-r8 { fill: #e1e1e6 } -.terminal-1642642836-r9 { fill: #efe3fb } -.terminal-1642642836-r10 { fill: #9f9fa5 } -.terminal-1642642836-r11 { fill: #632e53 } -.terminal-1642642836-r12 { fill: #e3e3e8;font-weight: bold } -.terminal-1642642836-r13 { fill: #0f0f1f } -.terminal-1642642836-r14 { fill: #dfdfe1;font-weight: bold } -.terminal-1642642836-r15 { fill: #6a6a74 } -.terminal-1642642836-r16 { fill: #0ea5e9 } -.terminal-1642642836-r17 { fill: #252532 } -.terminal-1642642836-r18 { fill: #ff69b4 } -.terminal-1642642836-r19 { fill: #22c55e } -.terminal-1642642836-r20 { fill: #252441 } -.terminal-1642642836-r21 { fill: #8b8b93 } -.terminal-1642642836-r22 { fill: #8b8b93;font-weight: bold } -.terminal-1642642836-r23 { fill: #0d0e2e } -.terminal-1642642836-r24 { fill: #00b85f } -.terminal-1642642836-r25 { fill: #918d9d } -.terminal-1642642836-r26 { fill: #ef4444 } -.terminal-1642642836-r27 { fill: #2e2e3c;font-weight: bold } -.terminal-1642642836-r28 { fill: #2e2e3c } -.terminal-1642642836-r29 { fill: #a0a0a6 } -.terminal-1642642836-r30 { fill: #191928 } -.terminal-1642642836-r31 { fill: #b74e87 } -.terminal-1642642836-r32 { fill: #87878f } -.terminal-1642642836-r33 { fill: #a3a3a9 } -.terminal-1642642836-r34 { fill: #777780 } -.terminal-1642642836-r35 { fill: #1f1f2d } -.terminal-1642642836-r36 { fill: #04b375;font-weight: bold } -.terminal-1642642836-r37 { fill: #ff7ec8;font-weight: bold } -.terminal-1642642836-r38 { fill: #dbdbdd } + .terminal-3651584808-r1 { fill: #dfdfe1 } +.terminal-3651584808-r2 { fill: #c5c8c6 } +.terminal-3651584808-r3 { fill: #ff93dd } +.terminal-3651584808-r4 { fill: #21101a;text-decoration: underline; } +.terminal-3651584808-r5 { fill: #21101a } +.terminal-3651584808-r6 { fill: #663250 } +.terminal-3651584808-r7 { fill: #737387 } +.terminal-3651584808-r8 { fill: #e1e1e6 } +.terminal-3651584808-r9 { fill: #efe3fb } +.terminal-3651584808-r10 { fill: #9f9fa5 } +.terminal-3651584808-r11 { fill: #632e53 } +.terminal-3651584808-r12 { fill: #e3e3e8;font-weight: bold } +.terminal-3651584808-r13 { fill: #0f0f1f } +.terminal-3651584808-r14 { fill: #dfdfe1;font-weight: bold } +.terminal-3651584808-r15 { fill: #6a6a74 } +.terminal-3651584808-r16 { fill: #0ea5e9 } +.terminal-3651584808-r17 { fill: #252532 } +.terminal-3651584808-r18 { fill: #ff69b4 } +.terminal-3651584808-r19 { fill: #22c55e } +.terminal-3651584808-r20 { fill: #252441 } +.terminal-3651584808-r21 { fill: #8b8b93 } +.terminal-3651584808-r22 { fill: #8b8b93;font-weight: bold } +.terminal-3651584808-r23 { fill: #0d0e2e } +.terminal-3651584808-r24 { fill: #00b85f } +.terminal-3651584808-r25 { fill: #918d9d } +.terminal-3651584808-r26 { fill: #ef4444 } +.terminal-3651584808-r27 { fill: #2e2e3c;font-weight: bold } +.terminal-3651584808-r28 { fill: #2e2e3c } +.terminal-3651584808-r29 { fill: #a0a0a6 } +.terminal-3651584808-r30 { fill: #191928 } +.terminal-3651584808-r31 { fill: #b74e87 } +.terminal-3651584808-r32 { fill: #87878f } +.terminal-3651584808-r33 { fill: #a3a3a9 } +.terminal-3651584808-r34 { fill: #777780 } +.terminal-3651584808-r35 { fill: #1f1f2d } +.terminal-3651584808-r36 { fill: #04b375;font-weight: bold } +.terminal-3651584808-r37 { fill: #ff7ec8;font-weight: bold } +.terminal-3651584808-r38 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -POSTEnter a URL... Send  - -╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ - GET echo││HeadersBodyQueryAuthInfoScriptsOptio -GET get random user││━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -POS echo post││╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplaceholder/││╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ posts/││╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get all││NameValue Add header  -GET get one│╰─────────────────────────────────────────────────╯ -POS create│╭────────────────────────────────────── Response ─╮ -DEL delete a post││BodyHeadersCookiesScriptsTrace -│───────────────────────││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -This is an echo ││ -server we can use to ││ -see exactly what ││ -request is being ││ -sent.││1:1read-onlyJSONWrap X -╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ - ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help + + + + +Posting                                                                    + +POSTEnter a URL or paste a curl command... Send  + +╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ + GET echo││HeadersBodyQueryAuthInfoScriptsOptio +GET get random user││━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +POS echo post││╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplaceholder/││╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ posts/││╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get all││NameValue Add header  +GET get one│╰─────────────────────────────────────────────────╯ +POS create│╭────────────────────────────────────── Response ─╮ +DEL delete a post││BodyHeadersCookiesScriptsTrace +│───────────────────────││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +This is an echo ││ +server we can use to ││ +see exactly what ││ +request is being ││ +sent.││1:1read-onlyJSONWrap X +╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ + ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help diff --git a/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_expand_request_section.svg b/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_expand_request_section.svg index 234b85a7..643831ac 100644 --- a/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_expand_request_section.svg +++ b/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_expand_request_section.svg @@ -19,157 +19,157 @@ font-weight: 700; } - .terminal-366583094-matrix { + .terminal-1016636106-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-366583094-title { + .terminal-1016636106-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-366583094-r1 { fill: #dfdfe1 } -.terminal-366583094-r2 { fill: #c5c8c6 } -.terminal-366583094-r3 { fill: #ff93dd } -.terminal-366583094-r4 { fill: #15111e;text-decoration: underline; } -.terminal-366583094-r5 { fill: #15111e } -.terminal-366583094-r6 { fill: #43365c } -.terminal-366583094-r7 { fill: #737387 } -.terminal-366583094-r8 { fill: #e1e1e6 } -.terminal-366583094-r9 { fill: #efe3fb } -.terminal-366583094-r10 { fill: #9f9fa5 } -.terminal-366583094-r11 { fill: #632e53 } -.terminal-366583094-r12 { fill: #ff69b4 } -.terminal-366583094-r13 { fill: #dfdfe1;font-weight: bold } -.terminal-366583094-r14 { fill: #e3e3e8;font-weight: bold } -.terminal-366583094-r15 { fill: #0f0f1f } -.terminal-366583094-r16 { fill: #6a6a74 } -.terminal-366583094-r17 { fill: #0ea5e9 } -.terminal-366583094-r18 { fill: #873c69 } -.terminal-366583094-r19 { fill: #22c55e } -.terminal-366583094-r20 { fill: #252441 } -.terminal-366583094-r21 { fill: #8b8b93 } -.terminal-366583094-r22 { fill: #8b8b93;font-weight: bold } -.terminal-366583094-r23 { fill: #0d0e2e } -.terminal-366583094-r24 { fill: #00b85f } -.terminal-366583094-r25 { fill: #ef4444 } -.terminal-366583094-r26 { fill: #918d9d } -.terminal-366583094-r27 { fill: #ff7ec8;font-weight: bold } -.terminal-366583094-r28 { fill: #dbdbdd } + .terminal-1016636106-r1 { fill: #dfdfe1 } +.terminal-1016636106-r2 { fill: #c5c8c6 } +.terminal-1016636106-r3 { fill: #ff93dd } +.terminal-1016636106-r4 { fill: #15111e;text-decoration: underline; } +.terminal-1016636106-r5 { fill: #15111e } +.terminal-1016636106-r6 { fill: #43365c } +.terminal-1016636106-r7 { fill: #737387 } +.terminal-1016636106-r8 { fill: #e1e1e6 } +.terminal-1016636106-r9 { fill: #efe3fb } +.terminal-1016636106-r10 { fill: #9f9fa5 } +.terminal-1016636106-r11 { fill: #632e53 } +.terminal-1016636106-r12 { fill: #ff69b4 } +.terminal-1016636106-r13 { fill: #dfdfe1;font-weight: bold } +.terminal-1016636106-r14 { fill: #e3e3e8;font-weight: bold } +.terminal-1016636106-r15 { fill: #0f0f1f } +.terminal-1016636106-r16 { fill: #6a6a74 } +.terminal-1016636106-r17 { fill: #0ea5e9 } +.terminal-1016636106-r18 { fill: #873c69 } +.terminal-1016636106-r19 { fill: #22c55e } +.terminal-1016636106-r20 { fill: #252441 } +.terminal-1016636106-r21 { fill: #8b8b93 } +.terminal-1016636106-r22 { fill: #8b8b93;font-weight: bold } +.terminal-1016636106-r23 { fill: #0d0e2e } +.terminal-1016636106-r24 { fill: #00b85f } +.terminal-1016636106-r25 { fill: #ef4444 } +.terminal-1016636106-r26 { fill: #918d9d } +.terminal-1016636106-r27 { fill: #ff7ec8;font-weight: bold } +.terminal-1016636106-r28 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  - -╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ - GET echoHeadersBodyQueryAuthInfoScriptsOptio -GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get all╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get one╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -POS create╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -DEL delete a post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -│───────────────────────│╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -This is an echo ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -server we can use to ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -see exactly what ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -request is being ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -sent.NameValue Add header  -╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ - ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  + +╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ + GET echoHeadersBodyQueryAuthInfoScriptsOptio +GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get all╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get one╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +POS create╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +DEL delete a post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +│───────────────────────│╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +This is an echo ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +server we can use to ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +see exactly what ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +request is being ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +sent.NameValue Add header  +╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ + ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help diff --git a/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_expand_then_reset.svg b/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_expand_then_reset.svg index 75228411..f6e6656e 100644 --- a/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_expand_then_reset.svg +++ b/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_expand_then_reset.svg @@ -19,167 +19,167 @@ font-weight: 700; } - .terminal-58320100-matrix { + .terminal-237103736-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-58320100-title { + .terminal-237103736-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-58320100-r1 { fill: #dfdfe1 } -.terminal-58320100-r2 { fill: #c5c8c6 } -.terminal-58320100-r3 { fill: #ff93dd } -.terminal-58320100-r4 { fill: #15111e;text-decoration: underline; } -.terminal-58320100-r5 { fill: #15111e } -.terminal-58320100-r6 { fill: #43365c } -.terminal-58320100-r7 { fill: #737387 } -.terminal-58320100-r8 { fill: #e1e1e6 } -.terminal-58320100-r9 { fill: #efe3fb } -.terminal-58320100-r10 { fill: #9f9fa5 } -.terminal-58320100-r11 { fill: #632e53 } -.terminal-58320100-r12 { fill: #ff69b4 } -.terminal-58320100-r13 { fill: #dfdfe1;font-weight: bold } -.terminal-58320100-r14 { fill: #e3e3e8;font-weight: bold } -.terminal-58320100-r15 { fill: #0f0f1f } -.terminal-58320100-r16 { fill: #6a6a74 } -.terminal-58320100-r17 { fill: #0ea5e9 } -.terminal-58320100-r18 { fill: #873c69 } -.terminal-58320100-r19 { fill: #22c55e } -.terminal-58320100-r20 { fill: #252441 } -.terminal-58320100-r21 { fill: #8b8b93 } -.terminal-58320100-r22 { fill: #8b8b93;font-weight: bold } -.terminal-58320100-r23 { fill: #0d0e2e } -.terminal-58320100-r24 { fill: #00b85f } -.terminal-58320100-r25 { fill: #918d9d } -.terminal-58320100-r26 { fill: #ef4444 } -.terminal-58320100-r27 { fill: #2e2e3c;font-weight: bold } -.terminal-58320100-r28 { fill: #2e2e3c } -.terminal-58320100-r29 { fill: #a0a0a6 } -.terminal-58320100-r30 { fill: #191928 } -.terminal-58320100-r31 { fill: #b74e87 } -.terminal-58320100-r32 { fill: #87878f } -.terminal-58320100-r33 { fill: #a3a3a9 } -.terminal-58320100-r34 { fill: #777780 } -.terminal-58320100-r35 { fill: #1f1f2d } -.terminal-58320100-r36 { fill: #04b375;font-weight: bold } -.terminal-58320100-r37 { fill: #ff7ec8;font-weight: bold } -.terminal-58320100-r38 { fill: #dbdbdd } + .terminal-237103736-r1 { fill: #dfdfe1 } +.terminal-237103736-r2 { fill: #c5c8c6 } +.terminal-237103736-r3 { fill: #ff93dd } +.terminal-237103736-r4 { fill: #15111e;text-decoration: underline; } +.terminal-237103736-r5 { fill: #15111e } +.terminal-237103736-r6 { fill: #43365c } +.terminal-237103736-r7 { fill: #737387 } +.terminal-237103736-r8 { fill: #e1e1e6 } +.terminal-237103736-r9 { fill: #efe3fb } +.terminal-237103736-r10 { fill: #9f9fa5 } +.terminal-237103736-r11 { fill: #632e53 } +.terminal-237103736-r12 { fill: #ff69b4 } +.terminal-237103736-r13 { fill: #dfdfe1;font-weight: bold } +.terminal-237103736-r14 { fill: #e3e3e8;font-weight: bold } +.terminal-237103736-r15 { fill: #0f0f1f } +.terminal-237103736-r16 { fill: #6a6a74 } +.terminal-237103736-r17 { fill: #0ea5e9 } +.terminal-237103736-r18 { fill: #873c69 } +.terminal-237103736-r19 { fill: #22c55e } +.terminal-237103736-r20 { fill: #252441 } +.terminal-237103736-r21 { fill: #8b8b93 } +.terminal-237103736-r22 { fill: #8b8b93;font-weight: bold } +.terminal-237103736-r23 { fill: #0d0e2e } +.terminal-237103736-r24 { fill: #00b85f } +.terminal-237103736-r25 { fill: #918d9d } +.terminal-237103736-r26 { fill: #ef4444 } +.terminal-237103736-r27 { fill: #2e2e3c;font-weight: bold } +.terminal-237103736-r28 { fill: #2e2e3c } +.terminal-237103736-r29 { fill: #a0a0a6 } +.terminal-237103736-r30 { fill: #191928 } +.terminal-237103736-r31 { fill: #b74e87 } +.terminal-237103736-r32 { fill: #87878f } +.terminal-237103736-r33 { fill: #a3a3a9 } +.terminal-237103736-r34 { fill: #777780 } +.terminal-237103736-r35 { fill: #1f1f2d } +.terminal-237103736-r36 { fill: #04b375;font-weight: bold } +.terminal-237103736-r37 { fill: #ff7ec8;font-weight: bold } +.terminal-237103736-r38 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  - -╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ - GET echoHeadersBodyQueryAuthInfoScriptsOptio -GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -GET get allNameValue Add header  -GET get one╰─────────────────────────────────────────────────╯ -POS create│╭────────────────────────────────────── Response ─╮ -DEL delete a post││BodyHeadersCookiesScriptsTrace -│───────────────────────││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -This is an echo ││ -server we can use to ││ -see exactly what ││ -request is being ││ -sent.││1:1read-onlyJSONWrap X -╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ - ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  + +╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ + GET echoHeadersBodyQueryAuthInfoScriptsOptio +GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +GET get allNameValue Add header  +GET get one╰─────────────────────────────────────────────────╯ +POS create│╭────────────────────────────────────── Response ─╮ +DEL delete a post││BodyHeadersCookiesScriptsTrace +│───────────────────────││━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +This is an echo ││ +server we can use to ││ +see exactly what ││ +request is being ││ +sent.││1:1read-onlyJSONWrap X +╰── sample-collections ─╯╰─────────────────────────────────────────────────╯ + ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help diff --git a/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_hide_collection_browser.svg b/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_hide_collection_browser.svg index 101c7dfa..bac29bc5 100644 --- a/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_hide_collection_browser.svg +++ b/tests/__snapshots__/test_snapshots/TestUserInterfaceShortcuts.test_hide_collection_browser.svg @@ -19,162 +19,162 @@ font-weight: 700; } - .terminal-139384128-matrix { + .terminal-2113526484-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-139384128-title { + .terminal-2113526484-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-139384128-r1 { fill: #dfdfe1 } -.terminal-139384128-r2 { fill: #c5c8c6 } -.terminal-139384128-r3 { fill: #ff93dd } -.terminal-139384128-r4 { fill: #15111e;text-decoration: underline; } -.terminal-139384128-r5 { fill: #15111e } -.terminal-139384128-r6 { fill: #43365c } -.terminal-139384128-r7 { fill: #403e62 } -.terminal-139384128-r8 { fill: #210d17 } -.terminal-139384128-r9 { fill: #7e7c92 } -.terminal-139384128-r10 { fill: #e3e3e8 } -.terminal-139384128-r11 { fill: #efe3fb } -.terminal-139384128-r12 { fill: #9f9fa5 } -.terminal-139384128-r13 { fill: #632e53 } -.terminal-139384128-r14 { fill: #dfdfe1;font-weight: bold } -.terminal-139384128-r15 { fill: #6a6a74 } -.terminal-139384128-r16 { fill: #252532 } -.terminal-139384128-r17 { fill: #ff69b4 } -.terminal-139384128-r18 { fill: #252441 } -.terminal-139384128-r19 { fill: #737387 } -.terminal-139384128-r20 { fill: #e1e1e6 } -.terminal-139384128-r21 { fill: #918d9d } -.terminal-139384128-r22 { fill: #2e2e3c;font-weight: bold } -.terminal-139384128-r23 { fill: #2e2e3c } -.terminal-139384128-r24 { fill: #a0a0a6 } -.terminal-139384128-r25 { fill: #191928 } -.terminal-139384128-r26 { fill: #b74e87 } -.terminal-139384128-r27 { fill: #87878f } -.terminal-139384128-r28 { fill: #a3a3a9 } -.terminal-139384128-r29 { fill: #777780 } -.terminal-139384128-r30 { fill: #1f1f2d } -.terminal-139384128-r31 { fill: #04b375;font-weight: bold } -.terminal-139384128-r32 { fill: #ff7ec8;font-weight: bold } -.terminal-139384128-r33 { fill: #dbdbdd } + .terminal-2113526484-r1 { fill: #dfdfe1 } +.terminal-2113526484-r2 { fill: #c5c8c6 } +.terminal-2113526484-r3 { fill: #ff93dd } +.terminal-2113526484-r4 { fill: #15111e;text-decoration: underline; } +.terminal-2113526484-r5 { fill: #15111e } +.terminal-2113526484-r6 { fill: #43365c } +.terminal-2113526484-r7 { fill: #403e62 } +.terminal-2113526484-r8 { fill: #210d17 } +.terminal-2113526484-r9 { fill: #7e7c92 } +.terminal-2113526484-r10 { fill: #e3e3e8 } +.terminal-2113526484-r11 { fill: #efe3fb } +.terminal-2113526484-r12 { fill: #9f9fa5 } +.terminal-2113526484-r13 { fill: #632e53 } +.terminal-2113526484-r14 { fill: #dfdfe1;font-weight: bold } +.terminal-2113526484-r15 { fill: #6a6a74 } +.terminal-2113526484-r16 { fill: #252532 } +.terminal-2113526484-r17 { fill: #ff69b4 } +.terminal-2113526484-r18 { fill: #252441 } +.terminal-2113526484-r19 { fill: #737387 } +.terminal-2113526484-r20 { fill: #e1e1e6 } +.terminal-2113526484-r21 { fill: #918d9d } +.terminal-2113526484-r22 { fill: #2e2e3c;font-weight: bold } +.terminal-2113526484-r23 { fill: #2e2e3c } +.terminal-2113526484-r24 { fill: #a0a0a6 } +.terminal-2113526484-r25 { fill: #191928 } +.terminal-2113526484-r26 { fill: #b74e87 } +.terminal-2113526484-r27 { fill: #87878f } +.terminal-2113526484-r28 { fill: #a3a3a9 } +.terminal-2113526484-r29 { fill: #777780 } +.terminal-2113526484-r30 { fill: #1f1f2d } +.terminal-2113526484-r31 { fill: #04b375;font-weight: bold } +.terminal-2113526484-r32 { fill: #ff7ec8;font-weight: bold } +.terminal-2113526484-r33 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  - -╭──────────────────────────────────────────────────────────────── Request ─╮ -HeadersBodyQueryAuthInfoScriptsOptions -━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -NameValue Add header  -╰──────────────────────────────────────────────────────────────────────────╯ -╭─────────────────────────────────────────────────────────────── Response ─╮ -BodyHeadersCookiesScriptsTrace -━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - - - -1:1read-onlyJSONWrap X -╰──────────────────────────────────────────────────────────────────────────╯ - ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  + +╭──────────────────────────────────────────────────────────────── Request ─╮ +HeadersBodyQueryAuthInfoScriptsOptions +━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +NameValue Add header  +╰──────────────────────────────────────────────────────────────────────────╯ +╭─────────────────────────────────────────────────────────────── Response ─╮ +BodyHeadersCookiesScriptsTrace +━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + + + +1:1read-onlyJSONWrap X +╰──────────────────────────────────────────────────────────────────────────╯ + ^j Send  ^t Method  ^s Save  ^n New  ^p Commands  ^o Jump  ^c Quit  f1 Help diff --git a/tests/test_curl_import.py b/tests/test_curl_import.py index d9bdd402..c318a540 100644 --- a/tests/test_curl_import.py +++ b/tests/test_curl_import.py @@ -18,8 +18,8 @@ def test_get_with_headers(): assert curl_import.method == "GET" assert curl_import.url == "http://example.com" assert curl_import.headers == [ - ["Accept", "application/json"], - ["User-Agent", "TestAgent"], + ("Accept", "application/json"), + ("User-Agent", "TestAgent"), ] assert curl_import.data is None @@ -145,14 +145,14 @@ def test_curl_with_escaped_newlines(): assert curl_import.method == "POST" assert curl_import.url == "http://example.com" assert curl_import.data == '{"key": "value"}' - assert curl_import.headers == [["Content-Type", "application/json"]] + assert curl_import.headers == [("Content-Type", "application/json")] def test_curl_with_no_space_in_header(): """Test headers without space after colon.""" curl_command = "curl -H 'Authorization:Bearer token' http://example.com" curl_import = CurlImport(curl_command) - assert curl_import.headers == [["Authorization", "Bearer token"]] + assert curl_import.headers == [("Authorization", "Bearer token")] def test_curl_with_complex_command(): @@ -166,8 +166,8 @@ def test_curl_with_complex_command(): assert curl_import.method == "POST" assert curl_import.url == "http://example.com/api/test" assert curl_import.headers == [ - ["Accept", "application/json"], - ["Content-Type", "application/json"], + ("Accept", "application/json"), + ("Content-Type", "application/json"), ] assert curl_import.data == '{"name":"test","value":123}' assert curl_import.compressed is True From 9c7daac22ae96d50b5b87021005dc248ab2c4353 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Sun, 10 Nov 2024 18:02:02 +0000 Subject: [PATCH 20/20] Update snapshot --- .coverage | Bin 53248 -> 53248 bytes ..._tree_correctly_and_notification_shown.svg | 178 +++++++++--------- 2 files changed, 89 insertions(+), 89 deletions(-) diff --git a/.coverage b/.coverage index bcdd4f6620b5053c6bc96fc1fac1749a3593235e..22cf0106bbc1806af57ae1c5bf00c5b9e62219f2 100644 GIT binary patch delta 1561 zcmXw%du&rx9LLY?@Ah$TZyzh&*220+x3!~tb?X>g-CA^rI)N!n6ygRxh9(lCiE-hN ztwjPSu*wEE(L@CYh%b=IcuX04pz<0MhJYY$YXduvMSPKVA@9%@@Fs1XW?B=} z3~0JFyEXNib((UGL&FQ>!aZR~xFVbpI)$BxypF`{ud2Ya(J9^zcq}!WHz7#)6^gw(8V zm&`wPdgtFCff6qwMsK@Fb_=7sj7DZ`Xlm@k;7GC>R}f=Lm+ml)@?iyjf=pU#yAgXy zaHL2L$)VMa-T;uZYS!o!*c06+GXgFrVYVd?LSAMX^!U{>GFy|TU8uKNQmWW~mcx$` zWt>y%IaOr9r6k+TQvWgU(4`CEyPJX&awRS%QlGHGqrpWaB^lq#`(xyvs(h6myU1*v zC1r0}GoAl(?e2$O6D|~YG?^e7JH=y7DQ27>{j9Dsp2vA4C20GWyVKZooGU(P%1FXF z#5sl9!Cibr8Jx%+-xsp?dWXEqMC=fA112k;O9}?gwo7KfStQz2eMK$?p@}{_GpOUz zuw8s3V3lE;*c2dllu0UDId8=o;?Y2QJWeOG9@cw2*h*5POj^D6oH!D&6#vz6WBk+c zyY(f}=PEb{M|~-k$C2u71x{l*PA_XA+Q4v2-NUS(MKY9%kPWXA4}6g2TS-nblpdN< z@%SYY6G|?QcHAe=?#1YL%^%Zocm+wu;=J2vQi)%P+IeG2Bd#XNQS^RWnGA)b;HtN} z>hE8ZS@3eA%Ut16*K0C_1|}x*Ys-D-ZkN6p4zGP3v3k6W?5%|!KuGbZYxT5})#Tvk z#TDE0gy+b{;QZ6hX5cEZWxI`8Dt2tQcy)LQS)}F;n-Ovhwsm%bfEN=pJ4Y(*DSuc8 zCj2ZJ3$vw1RsAY7nes|~P^updhi@q-jkr=|niH63L{qb6nI1nyidOr-7eG26L^CI+ z%m(} z)Uk1~x7jRqHOI5wYU~!vwpC|m;u5l3Y?4NANmCKGKrW%|(aiAOvki@oO+81t7lf9) z1Kx1B0M8TMO$F@6M4T;pwk~Hn#hqI#+FKH}zAu&J1epx>QkKH+ltplrG9NBcI-rj- z6HZg6LNDbU=%h@5aXws+(kCm1->8@e*C<_Z zCDti~U#Tj9%al$Spv;4du}UudLRAj*Q)a^j%DHepR>^{MRN3Jyr47zdX28z~`TqYk z>F^VER``)J4Ng&}Ku_$LWay^K0$r3zaFTL1oQPG-@B>vQ_?|KmIw<4eSgc}%qg2g; zBb4h5&`yIMzKeBq&_iaV$%GiW_W zWYtr#n-<$Nu`eakHl|gSKKM`W z%!GR&+yhc8rz^=8Q-PU~Cr72>%5qCQto(jwX& z?MHD~`$B8i4roiYg_>Uz)u{SNy{q0*Z>VPwTc0Nxy$-!O<&eleH3MZ?milNnY)^cN1NB9wot_xyRV6NNcOa8Qtm$do%P@`uorFl-|ZR%wAg z8?l<;TSt4IW9xzblveN*-dLFVARw2RR}!@QKa1}-#CK917s z9hGh;4zX-7HFE9C>Y?whj{S9TWHKQKH&LZCU8R;-zV6Le@qXIZl4}&ijQDea-fao0 zcD#?BVI(iBD#4Aktg|Gj;=RntaMc(6cK`8`*$xBmVRc|eWENgCJ$vPcHLcmp@OI`EE30mul*a8N zlZB5y9?c!79;&vd;H_pys`EL+sQBV)v=R+mLMYt(k^^sH9j6#PX>sB@CWDSEWu*c_ zlZz31Ix_KQ+TR+m;7#;)t5?RgETSby0lbk)ZCMK5z-j~Ps;cmMy1b>z%Dz0I-EBE* zO~DQ>|19c=N!Nlwf7s9TVYXxbgdS6_c|~{7)PL^W342WCmmTP>w4l+*$cozj<@YX| zubOSEEFF7L`Wh>~4-!8;-j?^W&%C@jLn2-#lNSs=ICqczKs@HP*btFqFclkOC+Vik zhPX%?Q~w*%aPOwYLsF^Q?sK_WGcczL5VAe%Up;MC3rGrG*j}V0vxc+y&s=LZNuqn( zgMy2mZuf)~;$)4qf=KzL=byd-Zj#8#IkO_qmRxh7Dc{53i2WpxsAe4b)vDpKks6xCH&;_v48yd45*K1blAl$4R&&>u!B>EZSjZ%Te&5|7ETA$aoS*0Jdyyl+_J((PJj&` H^%VaLY{hK= diff --git a/tests/__snapshots__/test_snapshots/TestNewRequest.test_new_request_added_to_tree_correctly_and_notification_shown.svg b/tests/__snapshots__/test_snapshots/TestNewRequest.test_new_request_added_to_tree_correctly_and_notification_shown.svg index 8ef6854a..c488b9dc 100644 --- a/tests/__snapshots__/test_snapshots/TestNewRequest.test_new_request_added_to_tree_correctly_and_notification_shown.svg +++ b/tests/__snapshots__/test_snapshots/TestNewRequest.test_new_request_added_to_tree_correctly_and_notification_shown.svg @@ -19,165 +19,165 @@ font-weight: 700; } - .terminal-2975144355-matrix { + .terminal-2219646775-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2975144355-title { + .terminal-2219646775-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2975144355-r1 { fill: #dfdfe1 } -.terminal-2975144355-r2 { fill: #c5c8c6 } -.terminal-2975144355-r3 { fill: #ff93dd } -.terminal-2975144355-r4 { fill: #15111e;text-decoration: underline; } -.terminal-2975144355-r5 { fill: #15111e } -.terminal-2975144355-r6 { fill: #43365c } -.terminal-2975144355-r7 { fill: #737387 } -.terminal-2975144355-r8 { fill: #e1e1e6 } -.terminal-2975144355-r9 { fill: #efe3fb } -.terminal-2975144355-r10 { fill: #9f9fa5 } -.terminal-2975144355-r11 { fill: #ff69b4 } -.terminal-2975144355-r12 { fill: #dfdfe1;font-weight: bold } -.terminal-2975144355-r13 { fill: #632e53 } -.terminal-2975144355-r14 { fill: #0ea5e9 } -.terminal-2975144355-r15 { fill: #0f0f1f } -.terminal-2975144355-r16 { fill: #6a6a74 } -.terminal-2975144355-r17 { fill: #252532 } -.terminal-2975144355-r18 { fill: #22c55e } -.terminal-2975144355-r19 { fill: #252441 } -.terminal-2975144355-r20 { fill: #8b8b93 } -.terminal-2975144355-r21 { fill: #8b8b93;font-weight: bold } -.terminal-2975144355-r22 { fill: #00b85f } -.terminal-2975144355-r23 { fill: #210d17;font-weight: bold } -.terminal-2975144355-r24 { fill: #918d9d } -.terminal-2975144355-r25 { fill: #0d0e2e } -.terminal-2975144355-r26 { fill: #2e2e3c;font-weight: bold } -.terminal-2975144355-r27 { fill: #2e2e3c } -.terminal-2975144355-r28 { fill: #a0a0a6 } -.terminal-2975144355-r29 { fill: #ef4444 } -.terminal-2975144355-r30 { fill: #191928 } -.terminal-2975144355-r31 { fill: #b74e87 } -.terminal-2975144355-r32 { fill: #0cfa9f } -.terminal-2975144355-r33 { fill: #0ce48c;font-weight: bold } -.terminal-2975144355-r34 { fill: #e3e3e6 } -.terminal-2975144355-r35 { fill: #ff7ec8;font-weight: bold } -.terminal-2975144355-r36 { fill: #dbdbdd } + .terminal-2219646775-r1 { fill: #dfdfe1 } +.terminal-2219646775-r2 { fill: #c5c8c6 } +.terminal-2219646775-r3 { fill: #ff93dd } +.terminal-2219646775-r4 { fill: #15111e;text-decoration: underline; } +.terminal-2219646775-r5 { fill: #15111e } +.terminal-2219646775-r6 { fill: #43365c } +.terminal-2219646775-r7 { fill: #737387 } +.terminal-2219646775-r8 { fill: #e1e1e6 } +.terminal-2219646775-r9 { fill: #efe3fb } +.terminal-2219646775-r10 { fill: #9f9fa5 } +.terminal-2219646775-r11 { fill: #ff69b4 } +.terminal-2219646775-r12 { fill: #dfdfe1;font-weight: bold } +.terminal-2219646775-r13 { fill: #632e53 } +.terminal-2219646775-r14 { fill: #0ea5e9 } +.terminal-2219646775-r15 { fill: #0f0f1f } +.terminal-2219646775-r16 { fill: #6a6a74 } +.terminal-2219646775-r17 { fill: #252532 } +.terminal-2219646775-r18 { fill: #22c55e } +.terminal-2219646775-r19 { fill: #252441 } +.terminal-2219646775-r20 { fill: #8b8b93 } +.terminal-2219646775-r21 { fill: #8b8b93;font-weight: bold } +.terminal-2219646775-r22 { fill: #00b85f } +.terminal-2219646775-r23 { fill: #210d17;font-weight: bold } +.terminal-2219646775-r24 { fill: #918d9d } +.terminal-2219646775-r25 { fill: #0d0e2e } +.terminal-2219646775-r26 { fill: #2e2e3c;font-weight: bold } +.terminal-2219646775-r27 { fill: #2e2e3c } +.terminal-2219646775-r28 { fill: #a0a0a6 } +.terminal-2219646775-r29 { fill: #ef4444 } +.terminal-2219646775-r30 { fill: #191928 } +.terminal-2219646775-r31 { fill: #b74e87 } +.terminal-2219646775-r32 { fill: #0cfa9f } +.terminal-2219646775-r33 { fill: #0ce48c;font-weight: bold } +.terminal-2219646775-r34 { fill: #e3e3e6 } +.terminal-2219646775-r35 { fill: #ff7ec8;font-weight: bold } +.terminal-2219646775-r36 { fill: #dbdbdd } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Posting + Posting - - - - -Posting                                                                    - -GETEnter a URL... Send  - -╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ -GET echoHeadersBodyQueryAuthInfoScriptsOptio -GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -▼ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ -█ GET fooNameValue Add header  -GET get all╰─────────────────────────────────────────────────╯ -GET get one╭────────────────────────────────────── Response ─╮ -POS createBodyHeadersCookiesScriptsTrace -DEL delete a post━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -▼ comments/ -GET get comment -GET get comment -───────────────────────Request saved -barjsonplaceholder/posts/foo.posting.ya -╰── sample-collections ─╯╰───────────ml - d Dupe  ⌫ Delete  ^j Send  ^t Method + + + + +Posting                                                                    + +GETEnter a URL or paste a curl command... Send  + +╭─ Collection ──────────╮╭─────────────────────────────────────── Request ─╮ +GET echoHeadersBodyQueryAuthInfoScriptsOptio +GET get random user━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +POS echo post╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ jsonplaceholder/╱╱╱╱╱╱╱╱╱╱╱╱╱╱There are no headers.╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +▼ posts/╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ +█ GET fooNameValue Add header  +GET get all╰─────────────────────────────────────────────────╯ +GET get one╭────────────────────────────────────── Response ─╮ +POS createBodyHeadersCookiesScriptsTrace +DEL delete a post━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +▼ comments/ +GET get comment +GET get comment +───────────────────────Request saved +barjsonplaceholder/posts/foo.posting.ya +╰── sample-collections ─╯╰───────────ml + d Dupe  ⌫ Delete  ^j Send  ^t Method