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: mailjet source operating on array instead object #2999

Merged
merged 5 commits into from
Jan 19, 2024

Conversation

anantjain45823
Copy link
Contributor

@anantjain45823 anantjain45823 commented Jan 18, 2024

What are the changes introduced in this PR?

All events received by rudderstack are coming in form of array of objects where as we are considering it as object only due which we are just sending empty payloads .
Nothing specifically is mention in mailjet docs about payload type
Mailjet Docs: https://dev.mailjet.com/email/guides/webhooks/#overview

Write a brief explainer on your code changes.

What is the related Linear task?

Resolves INT-1384

Please explain the objectives of your changes below

To solve a basic type mismatch problem in mailjet source

Put down any required details on the broader aspect of your changes. If there are any dependent changes, mandatorily mention them here

Any changes to existing capabilities/behaviour, mention the reason & what are the changes ?

N/A

Any new dependencies introduced with this change?

N/A

Any new generic utility introduced or modified. Please explain the changes.

N/A

Any technical or performance related pointers to consider with the change?

N/A


Developer checklist

  • My code follows the style guidelines of this project

  • No breaking changes are being introduced.

  • All related docs linked with the PR?

  • All changes manually tested?

  • Any documentation changes needed with this change?

  • Is the PR limited to 10 file changes?

  • Is the PR limited to one linear task?

  • Are relevant unit and component test-cases added?

Reviewer checklist

  • Is the type of change in the PR title appropriate as per the changes?

  • Verified that there are no credentials or confidential data exposed with the changes.

Summary by CodeRabbit

  • Refactor

    • Enhanced event processing for improved data handling.
  • Tests

    • Updated a test case to align with the new event processing logic.

Copy link
Contributor

coderabbitai bot commented Jan 18, 2024

Important

Auto Review Skipped

Auto reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository.

To trigger a single review, invoke the @coderabbitai review command.

Walkthrough

The modifications involve a refactor in the Mailjet integration code. The transform.js file's main function was renamed and its logic updated, while a new function was introduced to handle arrays of incoming data. In the test suite, an assertion was altered to match the updated output structure, reflecting the changes in the transformation logic.

Changes

File Path Change Summary
.../mailjet/transform.js - Renamed process to processEvent
- Added new process function for handling arrays
.../mailjet_source.test.js - Modified an assertion to check data.output instead of data.output.Message

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share

Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit-tests for this file.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit tests for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository from git and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit tests.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • The JSON schema for the configuration file is available here.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json

CodeRabbit Discord Community

Join our Discord Community to get help, request features, and share feedback.

Copy link

codecov bot commented Jan 18, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Comparison is base (595f819) 87.24% compared to head (1b44312) 87.24%.

Additional details and impacted files
@@           Coverage Diff            @@
##           develop    #2999   +/-   ##
========================================
  Coverage    87.24%   87.24%           
========================================
  Files          530      530           
  Lines        28808    28812    +4     
  Branches      6860     6860           
========================================
+ Hits         25133    25137    +4     
  Misses        3341     3341           
  Partials       334      334           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@yashasvibajpai
Copy link
Contributor

This seems like a breaking change, and mailjet source looks to be broken since start then right @anantjain45823 ?

@anantjain45823
Copy link
Contributor Author

Yes correct @yashasvibajpai you can refer to linear card for details

@sanpj2292
Copy link
Contributor

@coderabbitai review

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 7aa6687 and f8ed44a.
Files ignored due to path filters (1)
  • test/__tests__/data/mailjet_source.json is excluded by: !**/*.json
Files selected for processing (2)
  • src/v0/sources/mailjet/transform.js (2 hunks)
  • test/tests/mailjet_source.test.js (1 hunks)
Additional comments: 3
test/__tests__/mailjet_source.test.js (1)
  • 21-21: The test assertion has been updated to check output against data.output directly. Ensure that the data.output in the test data files reflects the new expected structure after the changes in the transform.js.
Verification successful

The output from the shell script shows that the data.output in the test data files contains an array of objects, each representing an event with a structure that includes context, integrations, type, event, properties, and other relevant fields. This aligns with the PR's objective to handle events as an array of objects instead of a single object.

Based on this information, it can be concluded that the test data files have been updated to reflect the new expected structure after the changes in the transform.js file. The test assertion change to check output against data.output directly is consistent with the updated test data.

Scripts Executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Verify that the test data files have been updated to reflect the new structure.
rg --type json --files-with-matches '"output":' test/__tests__/data/mailjet_source.json | xargs jq '.[].output'

Length of output: 5106

src/v0/sources/mailjet/transform.js (2)
  • 2-19: > Note: This review was outside the patches, so it was mapped to the patch with the greatest overlap. Original lines [11-46]

The processEvent function has been introduced to handle individual events. Ensure that the logic within this function correctly processes the events according to the Mailjet webhook documentation and that the mapping file is correctly applied.

  • 48-52: A new process function has been added to handle an array of events. It uses CommonUtils.toArray to ensure the input is treated as an array, which is a good practice to handle single objects and arrays uniformly. Verify that the CommonUtils.toArray function is robust and handles all edge cases.
Verification successful

---


The search results have provided the implementation of the toArray function within src/util/common.js. Here is the relevant code snippet:

toArray(obj) {
  if (Array.isArray(obj)) {
    return obj;
  }
  return [obj];
},

This implementation checks if the input obj is already an array using Array.isArray(obj). If it is, it returns the object as is. If not, it wraps the object in an array. This is a simple and effective way to ensure that the input is treated as an array, which aligns with the review comment's suggestion to verify that the CommonUtils.toArray function is robust and handles all edge cases.

Based on this implementation, the CommonUtils.toArray function will handle cases where the input is either an array or a single object, but it does not include any additional checks or handling for other potential edge cases, such as null, undefined, or non-object primitives.

Given this information, the review comment is verified to be accurate in its suggestion to ensure that the CommonUtils.toArray function is robust. However, it should be noted that the function may not handle every possible edge case, such as null or undefined inputs.

Scripts Executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Verify the implementation of CommonUtils.toArray to ensure it handles various edge cases.
rg --type js 'CommonUtils.toArray' src/util/common.js

Length of output: 53



Script:

#!/bin/bash
# Since the previous command did not yield any results, let's try a broader search for CommonUtils.toArray
# across all JavaScript files to find its implementation.
rg --type js 'CommonUtils.toArray'

Length of output: 413



Script:

#!/bin/bash
# The implementation of CommonUtils.toArray was not found in the expected file.
# Let's search for the definition of this function in the entire codebase.
rg --type js -A 10 'toArray\('

Length of output: 4103

@devops-github-rudderstack
Copy link
Contributor

@devops-github-rudderstack
Copy link
Contributor

Copy link

@anantjain45823 anantjain45823 merged commit 0dbb307 into develop Jan 19, 2024
14 checks passed
@anantjain45823 anantjain45823 deleted the fix.mailJetSource branch January 19, 2024 10:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants