Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;
import io.mailtrap.model.request.contactlists.ContactListRequest;
import io.mailtrap.model.request.contactlists.ListContactListsQueryParams;

public class ContactListsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
private static final String NAME_FOR_CREATE = "Clients";
private static final String NAME_FOR_UPDATE = "Customers";
private static final String SEARCH_QUERY = "Cust";

public static void main(String[] args) {
final var config = new MailtrapConfig.Builder()
Expand All @@ -30,6 +32,11 @@ public static void main(String[] args) {
final var contactLists = client.contactsApi().contactLists().findAll(ACCOUNT_ID);
System.out.println(contactLists);

// Filter contact lists by name (case-insensitive prefix match)
final var searchParams = new ListContactListsQueryParams(SEARCH_QUERY);
final var matchingContactLists = client.contactsApi().contactLists().findAll(ACCOUNT_ID, searchParams);
System.out.println(matchingContactLists);

client.contactsApi().contactLists().deleteContactList(ACCOUNT_ID, byId.getId());
}
}
11 changes: 11 additions & 0 deletions src/main/java/io/mailtrap/api/contactlists/ContactLists.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.mailtrap.api.contactlists;

import io.mailtrap.model.request.contactlists.ContactListRequest;
import io.mailtrap.model.request.contactlists.ListContactListsQueryParams;
import io.mailtrap.model.response.contactlists.ContactListResponse;

import java.util.List;
Expand All @@ -15,6 +16,16 @@ public interface ContactLists {
*/
List<ContactListResponse> findAll(long accountId);

/**
* Get all contact lists existing in account, optionally filtered by name.
*
* @param accountId unique account ID
* @param queryParams additional query parameters. The {@code search} value filters
* contact lists by name using a case-insensitive prefix match
* @return contacts list
*/
List<ContactListResponse> findAll(long accountId, ListContactListsQueryParams queryParams);

/**
* Create new Contact List
*
Expand Down
15 changes: 14 additions & 1 deletion src/main/java/io/mailtrap/api/contactlists/ContactListsImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,14 @@
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.http.RequestData;
import io.mailtrap.model.request.contactlists.ContactListRequest;
import io.mailtrap.model.request.contactlists.ListContactListsQueryParams;
import io.mailtrap.model.response.contactlists.ContactListResponse;
import lombok.NonNull;

import java.util.List;
import java.util.Optional;

import static io.mailtrap.http.RequestData.entry;

public class ContactListsImpl extends ApiResource implements ContactLists {

Expand All @@ -18,9 +23,17 @@ public ContactListsImpl(final MailtrapConfig config) {

@Override
public List<ContactListResponse> findAll(final long accountId) {
return findAll(accountId, ListContactListsQueryParams.empty());
}

@Override
public List<ContactListResponse> findAll(final long accountId, @NonNull final ListContactListsQueryParams queryParams) {
final var params = RequestData.buildQueryParams(
entry("search", Optional.ofNullable(queryParams.getSearch())));

return httpClient.getList(
String.format(apiHost + "/api/accounts/%d/contacts/lists", accountId),
new RequestData(),
new RequestData(params),
ContactListResponse.class
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.mailtrap.model.request.contactlists;

import io.mailtrap.api.contactlists.ContactLists;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ListContactListsQueryParams {

/**
* Filter contact lists by name (case-insensitive prefix match)
*/
private String search;

/**
* Creates an instance of {@link ListContactListsQueryParams} with no query parameters set.
* This is useful when you want to call the {@link ContactLists#findAll} method without any optional parameters.
*
* @return A new instance with no parameters set
*/
public static ListContactListsQueryParams empty() {
return new ListContactListsQueryParams();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;
import io.mailtrap.model.request.contactlists.ContactListRequest;
import io.mailtrap.model.request.contactlists.ListContactListsQueryParams;
import io.mailtrap.model.response.contactlists.ContactListResponse;
import io.mailtrap.testutils.BaseTest;
import io.mailtrap.testutils.DataMock;
Expand All @@ -12,6 +13,7 @@
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.*;

Expand All @@ -23,6 +25,10 @@ public void init() {
final TestHttpClient httpClient = new TestHttpClient(List.of(
DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/contacts/lists",
"GET", null, "api/contact_lists/contactLists.json"),
DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/contacts/lists",
"GET", null, "api/contact_lists/contactListsWithSearchEmptyResponse.json", Map.of("search", "qqqqqqqq")),
DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/contacts/lists",
"GET", null, "api/contact_lists/contactListsWithSearchSingleResponse.json", Map.of("search", "Cust")),
DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/contacts/lists",
"POST", "api/contact_lists/createRequest.json", "api/contact_lists/contactList.json"),
DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/contacts/lists/" + contactListId,
Expand All @@ -49,6 +55,29 @@ void test_findAll() {
assertEquals(2, contacts.size());
}

@Test
void test_findAllWithSearchQueryParam_emptyResponse() {
final ListContactListsQueryParams queryParams = new ListContactListsQueryParams();
queryParams.setSearch("qqqqqqqq");

final List<ContactListResponse> contacts = api.findAll(accountId, queryParams);

assertNotNull(contacts);
assertTrue(contacts.isEmpty());
}

@Test
void test_findAllWithSearchQueryParam_notEmptyResponse() {
final ListContactListsQueryParams queryParams = new ListContactListsQueryParams();
queryParams.setSearch("Cust");

final List<ContactListResponse> contacts = api.findAll(accountId, queryParams);

assertNotNull(contacts);
assertEquals(1, contacts.size());
assertEquals(contactListId, contacts.get(0).getId());
}

@Test
void test_create() {
final ContactListResponse contactList = api.createContactList(accountId, new ContactListRequest("Customers"));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"id": 1337,
"name": "Customers"
}
]
Loading