From 00a4261485d30f74be530cdb9e05be4cb11273d0 Mon Sep 17 00:00:00 2001 From: Maciej Walusiak Date: Thu, 9 Jul 2026 12:19:06 +0200 Subject: [PATCH 1/2] MT-22678: Add --search flag to contact-lists list --- README.md | 3 +- .../contact_lists/contact_lists_test.go | 33 +++++++++++++++++++ internal/commands/contact_lists/list.go | 12 ++++++- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1bb51d4..ab91049 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ mailtrap webhooks delete --id 1 # Contacts mailtrap contacts create --email "user@example.com" --first-name "John" mailtrap contact-lists list +mailtrap contact-lists list --search news mailtrap contact-fields create --name "Company" --data-type text --merge-tag "{{company}}" # Sandboxes & projects @@ -152,7 +153,7 @@ mailtrap domains list --output text | **Stats** | `stats get`, `stats by-domain`, `stats by-category`, `stats by-esp`, `stats by-date` | | **Email Logs** | `email-logs list`, `email-logs get` | | **Contacts** | `contacts get`, `contacts create`, `contacts update`, `contacts delete`, `contacts import`, `contacts export`, `contacts import-status`, `contacts export-status`, `contacts create-event` | -| **Contact Lists** | `contact-lists list`, `contact-lists get`, `contact-lists create`, `contact-lists update`, `contact-lists delete` | +| **Contact Lists** | `contact-lists list` (`--search` filters by name), `contact-lists get`, `contact-lists create`, `contact-lists update`, `contact-lists delete` | | **Contact Fields** | `contact-fields list`, `contact-fields get`, `contact-fields create`, `contact-fields update`, `contact-fields delete` | | **Projects** | `projects list`, `projects get`, `projects create`, `projects update`, `projects delete` | | **Sandboxes** | `sandboxes list`, `sandboxes get`, `sandboxes create`, `sandboxes update`, `sandboxes delete`, `sandboxes clean`, `sandboxes mark-read`, `sandboxes reset-credentials`, `sandboxes toggle-email`, `sandboxes reset-email` | diff --git a/internal/commands/contact_lists/contact_lists_test.go b/internal/commands/contact_lists/contact_lists_test.go index 29a558d..5cb649b 100644 --- a/internal/commands/contact_lists/contact_lists_test.go +++ b/internal/commands/contact_lists/contact_lists_test.go @@ -116,6 +116,39 @@ func TestContactListsListJSON(t *testing.T) { } } +func TestContactListsListWithSearch(t *testing.T) { + f, buf, cleanup := setupTest(func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + t.Errorf("expected GET, got %s", r.Method) + } + + searchParam := r.URL.Query().Get("search") + if searchParam != "news" { + t.Errorf("expected search query param 'news', got %q", searchParam) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode([]map[string]interface{}{ + {"id": 1, "name": "Newsletter"}, + }) + }) + defer cleanup() + + cmd := contact_lists.NewCmdContactLists(f) + cmd.SetArgs([]string{"list", "--search", "news"}) + cmd.SetOut(buf) + + err := cmd.Execute() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + output := buf.String() + if !strings.Contains(output, "Newsletter") { + t.Errorf("expected output to contain 'Newsletter', got:\n%s", output) + } +} + func TestContactListsGet(t *testing.T) { f, buf, cleanup := setupTest(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { diff --git a/internal/commands/contact_lists/list.go b/internal/commands/contact_lists/list.go index c3b2d58..eef8208 100644 --- a/internal/commands/contact_lists/list.go +++ b/internal/commands/contact_lists/list.go @@ -2,6 +2,7 @@ package contact_lists import ( "context" + "net/url" "github.com/mailtrap/mailtrap-cli/internal/client" "github.com/mailtrap/mailtrap-cli/internal/cmdutil" @@ -21,6 +22,8 @@ var contactListColumns = []output.Column{ } func NewCmdList(f *cmdutil.Factory) *cobra.Command { + var search string + cmd := &cobra.Command{ Use: "list", Short: "List all contact lists", @@ -37,8 +40,13 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command { path := cmdutil.AccountPath("contacts", "lists") + query := url.Values{} + if search != "" { + query.Set("search", search) + } + var lists []ContactList - if err := c.Get(context.Background(), client.BaseGeneral, path, nil, &lists); err != nil { + if err := c.Get(context.Background(), client.BaseGeneral, path, query, &lists); err != nil { return err } @@ -47,5 +55,7 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command { }, } + cmd.Flags().StringVar(&search, "search", "", "Filter by name (case-insensitive prefix match)") + return cmd } From cd20c0a038648b7e7d4dcb0475f2fef805696c66 Mon Sep 17 00:00:00 2001 From: Maciej Walusiak Date: Fri, 10 Jul 2026 10:24:14 +0200 Subject: [PATCH 2/2] MT-22678: Drop search filter call-out from README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ab91049..ad7ebd6 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ mailtrap domains list --output text | **Stats** | `stats get`, `stats by-domain`, `stats by-category`, `stats by-esp`, `stats by-date` | | **Email Logs** | `email-logs list`, `email-logs get` | | **Contacts** | `contacts get`, `contacts create`, `contacts update`, `contacts delete`, `contacts import`, `contacts export`, `contacts import-status`, `contacts export-status`, `contacts create-event` | -| **Contact Lists** | `contact-lists list` (`--search` filters by name), `contact-lists get`, `contact-lists create`, `contact-lists update`, `contact-lists delete` | +| **Contact Lists** | `contact-lists list`, `contact-lists get`, `contact-lists create`, `contact-lists update`, `contact-lists delete` | | **Contact Fields** | `contact-fields list`, `contact-fields get`, `contact-fields create`, `contact-fields update`, `contact-fields delete` | | **Projects** | `projects list`, `projects get`, `projects create`, `projects update`, `projects delete` | | **Sandboxes** | `sandboxes list`, `sandboxes get`, `sandboxes create`, `sandboxes update`, `sandboxes delete`, `sandboxes clean`, `sandboxes mark-read`, `sandboxes reset-credentials`, `sandboxes toggle-email`, `sandboxes reset-email` |