Skip to content

Commit

Permalink
Refactor getStoredEmail related models
Browse files Browse the repository at this point in the history
  • Loading branch information
asein-sinch committed Nov 14, 2024
1 parent fa3c9b9 commit 415148c
Show file tree
Hide file tree
Showing 11 changed files with 53 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
const mailgunService = initMailgunService();
let response;
try {
response = await mailgunService.emails.getEmail(domainName, storageKey);
response = await mailgunService.emails.getStoredEmail(domainName, storageKey);
} catch (error) {
console.error('Error when retrieving a message');
throw error;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const transformGetEmailResponseIntoClientResponse = (apiResponse: GetEmailResponseFromApi): GetEmailResponse => {
export const transformGetEmailResponseIntoClientResponse = (
apiResponse: GetStoredEmailResponseFromApi,
): GetStoredEmailResponse => {
return {
sender: apiResponse['sender'],
recipients: apiResponse['recipients'],
Expand All @@ -20,7 +22,7 @@ function convertHeaders(headers: MessageHeadersFromApi): MessageHeaders {
}, {} as MessageHeaders);
}

export interface GetEmailResponse {
export interface GetStoredEmailResponse {
sender: string,
recipients: string,
from: string,
Expand All @@ -33,7 +35,7 @@ export interface GetEmailResponse {
strippedSignature: string,
}

export interface GetEmailResponseFromApi {
export interface GetStoredEmailResponseFromApi {
sender: string;
recipients: string;
from: string;
Expand All @@ -44,10 +46,11 @@ export interface GetEmailResponseFromApi {
'stripped-html': string;
'stripped-text': string;
'stripped-signature': string;
[key: string]: any;
}

export type MessageHeadersFromApi = [string, string][];
export type MessageHeadersFromApi = [string, string | Date][];

export type MessageHeaders= {
[key: string]: string;
[key: string]: string | Date;
};
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export type { GetEmailResponse, MessageHeaders } from './get-email-response';
export type { GetStoredEmailResponse, MessageHeaders } from './get-stored-email-response';
2 changes: 1 addition & 1 deletion packages/mailgun/src/models/v1/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export * from './emails/response/bad-request/bad-request';
export * from './emails/response/email-not-found/email-not-found';
export * from './emails/response/exceeded-queue-quota/exceeded-queue-quota';
export * from './emails/response/generic-response/generic-response';
export * from './emails/response/get-email-response/get-email-response';
export * from './emails/response/get-email-response/get-stored-email-response';
export * from './emails/response/queue-status-disabled-details/queue-status-disabled-details';
export * from './emails/response/send-email-response/send-email-response';
export * from './emails/response/sending-queues-status-response/sending-queues-status-response';
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { EmailsApi } from './emails-api';
import {
GenericResponse,
GetEmailResponse,
GetStoredEmailResponse,
SendEmailResponse,
SendingQueuesStatusResponse,
SendEmailRequest,
Expand All @@ -18,9 +18,9 @@ export class EmailsApiFixture implements Partial<Readonly<EmailsApi>> {
*/
public sendMimeEmail: jest.Mock<Promise<SendEmailResponse>, [string, SendMimeEmailRequest]> = jest.fn();
/**
* Fixture associated to function getEmail
* Fixture associated to function getStoredEmail
*/
public getEmail: jest.Mock<Promise<GetEmailResponse>, [string, string]> = jest.fn();
public getStoredEmail: jest.Mock<Promise<GetStoredEmailResponse>, [string, string]> = jest.fn();
/**
* Fixture associated to function purgeDomainQueues
*/
Expand Down
8 changes: 4 additions & 4 deletions packages/mailgun/src/rest/v1/emails/emails-api.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {
GenericResponse,
GenericResponseFromApi,
GetEmailResponse,
GetEmailResponseFromApi,
GetStoredEmailResponse,
GetStoredEmailResponseFromApi,
SendEmailRequest,
SendEmailResponse,
SendEmailResponseFromApi,
Expand Down Expand Up @@ -94,7 +94,7 @@ export class EmailsApi extends MailgunDomainApi {
* @param { string } domainName - Domain name that was used to send the email
* @param { string } storageKey - Storage key from the emails associated events
*/
public async getEmail(domainName: string, storageKey: string): Promise<GetEmailResponse> {
public async getStoredEmail(domainName: string, storageKey: string): Promise<GetStoredEmailResponse> {
this.client = this.getSinchClient();
const getParams = {};
const headers: { [key: string]: string | undefined } = {
Expand All @@ -107,7 +107,7 @@ export class EmailsApi extends MailgunDomainApi {
const requestOptions = await this.client.prepareOptions(basePathUrl, 'GET', getParams, headers, body || undefined);
const url = this.client.prepareUrl(requestOptions.hostname, requestOptions.queryParams);

const apiResponse = await this.client.processCall<GetEmailResponseFromApi>({
const apiResponse = await this.client.processCall<GetStoredEmailResponseFromApi>({
url,
requestOptions,
apiName: this.apiName,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Mailgun } from '../../../../../src';

export const getEmailResponseFromApi: Mailgun.GetEmailResponseFromApi = {
export const getStoredEmailResponseFromApi: Mailgun.GetStoredEmailResponseFromApi = {
'X-Mailgun-Deliver-By': new Date('Wed, 06 Jun 2024 07:40:00 +0000'),
subject: '"Mailgun is awesome"',
Subject: '"Mailgun is awesome"',
Expand All @@ -17,7 +17,7 @@ export const getEmailResponseFromApi: Mailgun.GetEmailResponseFromApi = {
['Subject', '"Mailgun is awesome"'],
['From', '[email protected]'],
['To', '[email protected], [email protected]'],
['X-Mailgun-Deliver-By', 'Wed, 06 Jun 2024 07:40:00 +0000'],
['X-Mailgun-Deliver-By', new Date('Wed, 06 Jun 2024 07:40:00 +0000')],
['Message-Id', '<[email protected]>'],
['Content-Transfer-Encoding', '7bit'],
['Content-Type', 'text/html; charset=ascii'],
Expand All @@ -30,19 +30,23 @@ export const getEmailResponseFromApi: Mailgun.GetEmailResponseFromApi = {
'Mime-Version': '1.0',
};

export const getEmailResponse: Mailgun.GetEmailResponse = {
contentTransferEncoding: '7bit',
contentType: 'text/html; charset=ascii',
messageId: '<[email protected]>',
mimeVersion: '1.0',
to: '[email protected], [email protected]',
deliveryTime: new Date('Wed, 06 Jun 2024 07:40:00 +0000'),
export const getStoredEmailResponse: Mailgun.GetStoredEmailResponse = {
sender: '[email protected]',
recipients: '[email protected], [email protected]',
from: '[email protected]',
subject: '"Mailgun is awesome"',
bodyHtml: '<html>This is some html</html>',
bodyPlain: 'This is some html',
messageHeaders: {
'Content-Transfer-Encoding': '7bit',
'Content-Type': 'text/html; charset=ascii',
'From': '[email protected]',
'Message-Id': '<[email protected]>',
'Mime-Version': '1.0',
'Subject': '"Mailgun is awesome"',
'To': '[email protected], [email protected]',
'X-Mailgun-Deliver-By': new Date('Wed, 06 Jun 2024 07:40:00 +0000'),
},
strippedHtml: '<html>This is some html</html>',
strippedText: 'This is some html',
strippedSignature: 'This is a signature',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import {
transformGetEmailResponseIntoClientResponse,
} from '../../../../../src/models';
import { getEmailResponse, getEmailResponseFromApi } from './get-email-response.models';
import { getStoredEmailResponse, getStoredEmailResponseFromApi } from './get-stored-email-response.models';

describe('GetEmailResponse', () => {

it('should convert an API object into a client object', () => {
const transformedResponse = transformGetEmailResponseIntoClientResponse(getEmailResponseFromApi);
expect(transformedResponse).toEqual(getEmailResponse);
const transformedResponse = transformGetEmailResponseIntoClientResponse(getStoredEmailResponseFromApi);
expect(transformedResponse).toEqual(getStoredEmailResponse);
});

});
2 changes: 1 addition & 1 deletion packages/mailgun/tests/models/v1/emails/response/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export * from './bad-request.models';
export * from './email-not-found.models';
export * from './generic-response.models';
export * from './get-email-response.models';
export * from './get-stored-email-response.models';
export * from './send-email-response.models';
export * from './sending-queues-status-response.models';
12 changes: 6 additions & 6 deletions packages/mailgun/tests/rest/v1/emails/emails-api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
} from '../../../models/v1/emails/request';
import {
genericResponse,
getEmailResponse,
getStoredEmailResponse,
sendEmailResponse,
sendingQueuesStatusResponse,
} from '../../../models/v1/emails/response';
Expand Down Expand Up @@ -63,13 +63,13 @@ describe('EmailsApi', () => {
const storageKey: string = 'storageKey';

// When
fixture.getEmail.mockResolvedValue(getEmailResponse);
emailsApi.getEmail = fixture.getEmail;
const response = await emailsApi.getEmail(domainName, storageKey);
fixture.getStoredEmail.mockResolvedValue(getStoredEmailResponse);
emailsApi.getStoredEmail = fixture.getStoredEmail;
const response = await emailsApi.getStoredEmail(domainName, storageKey);

// Then
expect(response).toEqual(getEmailResponse);
expect(fixture.getEmail).toHaveBeenCalledWith(domainName, storageKey);
expect(response).toEqual(getStoredEmailResponse);
expect(fixture.getStoredEmail).toHaveBeenCalledWith(domainName, storageKey);
});
});

Expand Down
20 changes: 12 additions & 8 deletions packages/mailgun/tests/rest/v1/emails/emails.steps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import * as assert from 'assert';
let emailsApi: EmailsApi;
let sendEmailResponse: Mailgun.SendEmailResponse;
let sendMimeEmailResponse: Mailgun.SendEmailResponse;
let getEmailResponse: Mailgun.GetEmailResponse;
let getEmailResponse: Mailgun.GetStoredEmailResponse;
let sendingQueuesStatusResponse: Mailgun.SendingQueuesStatusResponse;
let purgeDomainQueuesResponse: Mailgun.GenericResponse;
const domainName = 'sandbox123.mailgun.org';
Expand Down Expand Up @@ -67,12 +67,11 @@ Then('the sendMimeEmail response contains information about the email', () => {
});

When('I send a request to retrieve a stored email', async () => {
getEmailResponse = await emailsApi.getEmail(domainName, 'storageKey');
getEmailResponse = await emailsApi.getStoredEmail(domainName, 'storageKey');
});

Then('the getEmail response contains the email details', () => {
assert.equal(getEmailResponse.from, '[email protected]');
assert.equal(getEmailResponse.to, '%recipient%');
assert.equal(getEmailResponse.subject, 'Hello from mailgun');
assert.equal(getEmailResponse.recipients, '[email protected]');
assert.equal(getEmailResponse.strippedHtml,
Expand All @@ -82,11 +81,16 @@ Then('the getEmail response contains the email details', () => {
assert.equal(getEmailResponse.bodyHtml,
'<h1>Hello %recipient.name%</h1><span style="color:blue">This is an HTML email</span>');
assert.equal(getEmailResponse.bodyPlain, 'Message text only');
assert.deepEqual(getEmailResponse.deliveryTime, new Date('Thu, 06 Jun 2024 07:40:00 +0000'));
assert.equal(getEmailResponse.contentType,
'multipart/alternative; boundary="44eea75a00c7df3bdd541c89727faec0ce8d5b09663245a35789d6b264c6"');
assert.equal(getEmailResponse.contentTransferEncoding, undefined);
assert.equal(getEmailResponse.mimeVersion, '1.0');
const expectedMessageHeaders: Mailgun.MessageHeaders = {
'Content-Type': 'multipart/alternative; boundary="44eea75a00c7df3bdd541c89727faec0ce8d5b09663245a35789d6b264c6"',
'Message-Id': '<[email protected]>',
'Mime-Version': '1.0',
'X-Mailgun-Deliver-By': new Date('Thu, 06 Jun 2024 07:40:00 +0000'),
From: '[email protected]',
Subject: 'Hello from mailgun',
To: '%recipient%',
};
assert.deepEqual(getEmailResponse.messageHeaders, expectedMessageHeaders);
});

When('I send a request to get the sending queue status', async () => {
Expand Down

0 comments on commit 415148c

Please sign in to comment.