mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-25 00:07:47 +01:00
feat: order environments service implementation (#8415)
This can be consumed in enterprise repo.
This commit is contained in:
parent
534dd093d2
commit
3a2206d228
@ -102,3 +102,32 @@ test('should strip special characters from email subject', async () => {
|
|||||||
);
|
);
|
||||||
expect(emailService.stripSpecialCharacters('tom-jones')).toBe('tom-jones');
|
expect(emailService.stripSpecialCharacters('tom-jones')).toBe('tom-jones');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Can send order environments email', async () => {
|
||||||
|
process.env.ORDER_ENVIRONMENTS_BCC = 'bcc@bcc.com';
|
||||||
|
const emailService = new EmailService({
|
||||||
|
email: {
|
||||||
|
host: 'test',
|
||||||
|
port: 587,
|
||||||
|
secure: false,
|
||||||
|
smtpuser: '',
|
||||||
|
smtppass: '',
|
||||||
|
sender: 'noreply@getunleash.ai',
|
||||||
|
},
|
||||||
|
getLogger: noLoggerProvider,
|
||||||
|
} as unknown as IUnleashConfig);
|
||||||
|
|
||||||
|
const customerId = 'customer133';
|
||||||
|
const environments = ['development', 'production'];
|
||||||
|
const content = await emailService.sendOrderEnvironmentEmail(
|
||||||
|
'user@user.com',
|
||||||
|
customerId,
|
||||||
|
environments,
|
||||||
|
);
|
||||||
|
expect(content.from).toBe('noreply@getunleash.ai');
|
||||||
|
expect(content.subject).toBe('Unleash - ordered environments successfully');
|
||||||
|
expect(content.html.includes(`<li>${environments[0]}</li>`)).toBe(true);
|
||||||
|
expect(content.html.includes(`<li>${environments[1]}</li>`)).toBe(true);
|
||||||
|
expect(content.html.includes(customerId)).toBe(true);
|
||||||
|
expect(content.bcc).toBe('bcc@bcc.com');
|
||||||
|
});
|
||||||
|
@ -24,6 +24,7 @@ export enum TransporterType {
|
|||||||
export interface IEmailEnvelope {
|
export interface IEmailEnvelope {
|
||||||
from: string;
|
from: string;
|
||||||
to: string;
|
to: string;
|
||||||
|
bcc?: string;
|
||||||
subject: string;
|
subject: string;
|
||||||
html: string;
|
html: string;
|
||||||
text: string;
|
text: string;
|
||||||
@ -31,6 +32,8 @@ export interface IEmailEnvelope {
|
|||||||
|
|
||||||
const RESET_MAIL_SUBJECT = 'Unleash - Reset your password';
|
const RESET_MAIL_SUBJECT = 'Unleash - Reset your password';
|
||||||
const GETTING_STARTED_SUBJECT = 'Welcome to Unleash';
|
const GETTING_STARTED_SUBJECT = 'Welcome to Unleash';
|
||||||
|
const ORDER_ENVIRONMENTS_SUBJECT =
|
||||||
|
'Unleash - ordered environments successfully';
|
||||||
const SCHEDULED_CHANGE_CONFLICT_SUBJECT =
|
const SCHEDULED_CHANGE_CONFLICT_SUBJECT =
|
||||||
'Unleash - Scheduled changes can no longer be applied';
|
'Unleash - Scheduled changes can no longer be applied';
|
||||||
const SCHEDULED_EXECUTION_FAILED_SUBJECT =
|
const SCHEDULED_EXECUTION_FAILED_SUBJECT =
|
||||||
@ -447,6 +450,67 @@ export class EmailService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async sendOrderEnvironmentEmail(
|
||||||
|
userEmail: string,
|
||||||
|
customerId: string,
|
||||||
|
environmentNames: string[],
|
||||||
|
): Promise<IEmailEnvelope> {
|
||||||
|
if (this.configured()) {
|
||||||
|
const context = {
|
||||||
|
userEmail,
|
||||||
|
customerId,
|
||||||
|
environments: environmentNames.map((name) =>
|
||||||
|
this.stripSpecialCharacters(name),
|
||||||
|
),
|
||||||
|
};
|
||||||
|
const bodyHtml = await this.compileTemplate(
|
||||||
|
'order-environments',
|
||||||
|
TemplateFormat.HTML,
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
const bodyText = await this.compileTemplate(
|
||||||
|
'order-environments',
|
||||||
|
TemplateFormat.PLAIN,
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
const email = {
|
||||||
|
from: this.sender,
|
||||||
|
to: userEmail,
|
||||||
|
bcc: process.env.ORDER_ENVIRONMENTS_BCC || 'ivar@getunleash.io',
|
||||||
|
subject: ORDER_ENVIRONMENTS_SUBJECT,
|
||||||
|
html: bodyHtml,
|
||||||
|
text: bodyText,
|
||||||
|
};
|
||||||
|
process.nextTick(() => {
|
||||||
|
this.mailer!.sendMail(email).then(
|
||||||
|
() =>
|
||||||
|
this.logger.info(
|
||||||
|
'Successfully sent order environments email',
|
||||||
|
),
|
||||||
|
(e) =>
|
||||||
|
this.logger.warn(
|
||||||
|
'Failed to send order environments email',
|
||||||
|
e,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
return Promise.resolve(email);
|
||||||
|
}
|
||||||
|
return new Promise((res) => {
|
||||||
|
this.logger.warn(
|
||||||
|
'No mailer is configured. Please read the docs on how to configure an email service',
|
||||||
|
);
|
||||||
|
res({
|
||||||
|
from: this.sender,
|
||||||
|
to: userEmail,
|
||||||
|
bcc: '',
|
||||||
|
subject: ORDER_ENVIRONMENTS_SUBJECT,
|
||||||
|
html: '',
|
||||||
|
text: '',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
isEnabled(): boolean {
|
isEnabled(): boolean {
|
||||||
return this.mailer !== undefined;
|
return this.mailer !== undefined;
|
||||||
}
|
}
|
||||||
|
@ -338,10 +338,10 @@
|
|||||||
<td valign="top" class="bodyContent" mc:edit="body_content">
|
<td valign="top" class="bodyContent" mc:edit="body_content">
|
||||||
<h1>Order for additional environments submitted</h1>
|
<h1>Order for additional environments submitted</h1>
|
||||||
<p>Hello,</p>
|
<p>Hello,</p>
|
||||||
<p>An order for additional environments has been successfully submitted by <strong>{{{ userEmail }}}</strong> for customer ID <strong>{{{ instanceId }}}</strong>. Below are the details of the environments requested:</p>
|
<p>An order for additional environments has been successfully submitted by <strong>{{{ userEmail }}}</strong> for customer ID <strong>{{{ customerId }}}</strong>. Below are the details of the environments requested:</p>
|
||||||
<ul>
|
<ul>
|
||||||
{{#environments}}
|
{{#environments}}
|
||||||
<li>{{{ name }}}</li>
|
<li>{{.}}</li>
|
||||||
{{/environments}}
|
{{/environments}}
|
||||||
</ul>
|
</ul>
|
||||||
<p>Please note that it may take up to 24 hours for these changes to come into effect.</p>
|
<p>Please note that it may take up to 24 hours for these changes to come into effect.</p>
|
||||||
|
@ -2,10 +2,10 @@ Subject: Order for additional environments submitted
|
|||||||
|
|
||||||
Hello,
|
Hello,
|
||||||
|
|
||||||
An order for additional environments has been successfully submitted by {{ userEmail }} for customer ID {{ instanceId }}. Below are the details of the environments requested:
|
An order for additional environments has been successfully submitted by {{ userEmail }} for customer ID {{ customerId }}. Below are the details of the environments requested:
|
||||||
|
|
||||||
{{#environments}}
|
{{#environments}}
|
||||||
- {{ name }}
|
- {{.}}
|
||||||
{{/environments}}
|
{{/environments}}
|
||||||
|
|
||||||
Please note that it may take up to 24 hours for these changes to come into effect.
|
Please note that it may take up to 24 hours for these changes to come into effect.
|
||||||
|
Loading…
Reference in New Issue
Block a user