mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +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'); | ||||
| }); | ||||
| 
 | ||||
| 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 { | ||||
|     from: string; | ||||
|     to: string; | ||||
|     bcc?: string; | ||||
|     subject: string; | ||||
|     html: string; | ||||
|     text: string; | ||||
| @ -31,6 +32,8 @@ export interface IEmailEnvelope { | ||||
| 
 | ||||
| const RESET_MAIL_SUBJECT = 'Unleash - Reset your password'; | ||||
| const GETTING_STARTED_SUBJECT = 'Welcome to Unleash'; | ||||
| const ORDER_ENVIRONMENTS_SUBJECT = | ||||
|     'Unleash - ordered environments successfully'; | ||||
| const SCHEDULED_CHANGE_CONFLICT_SUBJECT = | ||||
|     'Unleash - Scheduled changes can no longer be applied'; | ||||
| 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 { | ||||
|         return this.mailer !== undefined; | ||||
|     } | ||||
|  | ||||
| @ -338,10 +338,10 @@ | ||||
|                         <td valign="top" class="bodyContent" mc:edit="body_content"> | ||||
|                             <h1>Order for additional environments submitted</h1> | ||||
|                             <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> | ||||
|                                 {{#environments}} | ||||
|                                     <li>{{{ name }}}</li> | ||||
|                                     <li>{{.}}</li> | ||||
|                                 {{/environments}} | ||||
|                             </ul> | ||||
|                             <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, | ||||
| 
 | ||||
| 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}} | ||||
|     - {{ name }} | ||||
|     - {{.}} | ||||
| {{/environments}} | ||||
| 
 | ||||
| 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