Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: use sender name with from email in ses provider #2226

Merged
merged 2 commits into from Dec 12, 2022

Conversation

ArturHamannRonconi
Copy link
Contributor

What change does this PR introduce?

Adds the sendername to the aws ses provider actually shown, which was previously ignored.

Why was this change needed?

Closes #2225

Copy link
Contributor

@p-fernandez p-fernandez left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Asking for an improvement in the test as the ice in the cake.

Comment on lines +14 to +17
region: 'test-1',
senderName: 'Test',
accessKeyId: 'TEST',
from: 'test@test.com',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the line 32 of this file when testing if the SES client has been called, could we also double check with what payload is being called? Right now we only check the spy is being called.
This would help to have more confidence that we are passing the sender name and the rest of values properly to the client. What do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @p-fernandez!!

Apparently who we called to actually send the message is a nodemailer transporter created on top of the SES client, I was in doubt about how this test could be done and I decided to add a false object as follows: expect(spySesSend).toHaveBeenCalledWith({});

for it to return what the nodemailer sends to the send method of the SES client, I was surprised and found it strange when I came across the following return

Captura de tela de 2022-12-08 18-51-46
Captura de tela de 2022-12-08 18-51-55
What is strange about this object is its Source property, this should contain the sender name like
Source: 'Sender Name', however, it is getting the data from from.

I thought it was a bit bad to create the test this way, a suggestion I can give is that inside the ses.provider.ts file the ses transporter becomes a property in the SESMailProvider class, after that we can check if its sendMail method is called with the correct parameters

Example:

constructor(private readonly config: SESConfig) {
    const ses = new SESClient({
      region: this.config.region,
      credentials: {
        accessKeyId: this.config.accessKeyId,
        secretAccessKey: this.config.secretAccessKey,
      },
    });
    
    this.transporter = nodemailer.createTransport({
      SES: { ses: this.ses, aws: { SendRawEmailCommand } },
    });
  }
const spySendMail = jest.spyOn(provider.transporter, 'sendMail');
expect(spySendMail).toHaveBeenCalledWith({
      to,
      html,
      text,
      subject,
      attachments,
      from: {
        address: from,
        name: this.config.senderName,
      },
    })

@scopsy
Copy link
Contributor

scopsy commented Dec 12, 2022

Thank you for your contribution @ArturHamannRonconi !

@scopsy scopsy merged commit 73d9612 into novuhq:next Dec 12, 2022
@ArturHamannRonconi ArturHamannRonconi deleted the fix/ses-provider-sender-name branch December 12, 2022 12:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

🐛 Bug Report: "credentials.senderName" is ignored in some providers
3 participants