Skip to content

Commit 9a5c2b6

Browse files
Merge pull request #108 from mailtrap/fix-106
Fix 106
2 parents 5f13abe + bf7ff14 commit 9a5c2b6

File tree

3 files changed

+85
-2
lines changed

3 files changed

+85
-2
lines changed

src/__tests__/lib/api/resources/Messages.test.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,70 @@ describe("lib/api/resources/Messages: ", () => {
185185
expect(result).toEqual(expectedResponseData);
186186
});
187187

188+
it("successfully gets messages with last_id parameter.", async () => {
189+
const endpoint = `${GENERAL_ENDPOINT}/api/accounts/${accountId}/inboxes/${inboxId}/messages`;
190+
const lastId = 100;
191+
const expectedResponseData = [responseData];
192+
193+
mock
194+
.onGet(endpoint, { params: { last_id: lastId } })
195+
.reply(200, expectedResponseData);
196+
197+
const result = await messagesAPI.get(inboxId, { last_id: lastId });
198+
199+
expect(mock.history.get[0].url).toEqual(endpoint);
200+
expect(mock.history.get[0].params).toEqual({ last_id: lastId });
201+
expect(result).toEqual(expectedResponseData);
202+
});
203+
204+
it("successfully gets messages with page parameter.", async () => {
205+
const endpoint = `${GENERAL_ENDPOINT}/api/accounts/${accountId}/inboxes/${inboxId}/messages`;
206+
const page = 2;
207+
const expectedResponseData = [responseData];
208+
209+
mock
210+
.onGet(endpoint, { params: { page } })
211+
.reply(200, expectedResponseData);
212+
213+
const result = await messagesAPI.get(inboxId, { page });
214+
215+
expect(mock.history.get[0].url).toEqual(endpoint);
216+
expect(mock.history.get[0].params).toEqual({ page });
217+
expect(result).toEqual(expectedResponseData);
218+
});
219+
220+
it("successfully gets messages with search parameter.", async () => {
221+
const endpoint = `${GENERAL_ENDPOINT}/api/accounts/${accountId}/inboxes/${inboxId}/messages`;
222+
const search = "test query";
223+
const expectedResponseData = [responseData];
224+
225+
mock
226+
.onGet(endpoint, { params: { search } })
227+
.reply(200, expectedResponseData);
228+
229+
const result = await messagesAPI.get(inboxId, { search });
230+
231+
expect(mock.history.get[0].url).toEqual(endpoint);
232+
expect(mock.history.get[0].params).toEqual({ search });
233+
expect(result).toEqual(expectedResponseData);
234+
});
235+
236+
it("successfully gets messages with all query parameters.", async () => {
237+
const endpoint = `${GENERAL_ENDPOINT}/api/accounts/${accountId}/inboxes/${inboxId}/messages`;
238+
const options = { last_id: 100, page: 2, search: "test query" };
239+
const expectedResponseData = [responseData];
240+
241+
mock
242+
.onGet(endpoint, { params: options })
243+
.reply(200, expectedResponseData);
244+
245+
const result = await messagesAPI.get(inboxId, options);
246+
247+
expect(mock.history.get[0].url).toEqual(endpoint);
248+
expect(mock.history.get[0].params).toEqual(options);
249+
expect(result).toEqual(expectedResponseData);
250+
});
251+
188252
it("fails with error.", async () => {
189253
const expectedErrorMessage = "Request failed with status code 404";
190254

src/lib/api/resources/Messages.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import CONFIG from "../../../config";
55
import {
66
EmailHeaders,
77
Message,
8+
MessageListOptions,
89
MessageUpdateParams,
910
Report,
1011
SpamReport,
@@ -58,10 +59,16 @@ export default class MessagesApi {
5859
/**
5960
* Gets all messages in inboxes.
6061
*/
61-
public async get(inboxId: number) {
62+
public async get(inboxId: number, options?: MessageListOptions) {
6263
const url = `${this.messagesURL}/${inboxId}/messages`;
6364

64-
return this.client.get<Message[], Message[]>(url);
65+
const params = {
66+
...(options?.last_id !== undefined && { last_id: options.last_id }),
67+
...(options?.page !== undefined && { page: options.page }),
68+
...(options?.search && { search: options.search }),
69+
};
70+
71+
return this.client.get<Message[], Message[]>(url, { params });
6572
}
6673

6774
/**

src/types/api/messages.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
export type SmtpInformationData = {
2+
mail_from_addr: string;
3+
client_ip: string;
4+
};
5+
16
export type Message = {
27
id: number;
38
inbox_id: number;
@@ -22,6 +27,7 @@ export type Message = {
2227
blacklists_report_info: boolean;
2328
smtp_information: {
2429
ok: boolean;
30+
data?: SmtpInformationData;
2531
};
2632
};
2733

@@ -69,3 +75,9 @@ export type SpamReport = {
6975
export type MessageUpdateParams = {
7076
isRead: boolean;
7177
};
78+
79+
export type MessageListOptions = {
80+
last_id?: number;
81+
page?: number;
82+
search?: string;
83+
};

0 commit comments

Comments
 (0)