diff --git a/.gitignore b/.gitignore index b31d8c3..2ec5de6 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ pkg gd_bundle-g2.crt Gemfile.lock + +.idea diff --git a/lib/mailjet/resource.rb b/lib/mailjet/resource.rb index d4b2f79..c99b44e 100644 --- a/lib/mailjet/resource.rb +++ b/lib/mailjet/resource.rb @@ -284,7 +284,7 @@ def save(options = {}) if opts[:perform_api_call] && !persisted? # get attributes only for entity creation self.attributes = if self.resource_path == 'send' - Yajl::Parser.parse(response.body) + response.respond_to?(:body) ? Yajl::Parser.parse(response.body) : Yajl::Parser.parse(response) else parse_api_json(response.body).first end diff --git a/spec/cassettes/resource/send_v31_incorrect_email.yml b/spec/cassettes/resource/send_v31_incorrect_email.yml new file mode 100644 index 0000000..0658657 --- /dev/null +++ b/spec/cassettes/resource/send_v31_incorrect_email.yml @@ -0,0 +1,41 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.mailjet.com/v3.1/send + body: + encoding: UTF-8 + string: '{"Messages":[{"From":{"Email":"pilot@example.com","Name":"Mailjet Ruby + Wrapper CI"},"To":[{"Email":"passenger@example..com","Name":"test"}],"Subject":"Mailjet + Ruby Wrapper CI Send API v3.1 spec","TextPart":"Mailjet Ruby Wrapper CI content","HTMLPart":"HTML + Mailjet Ruby Wrapper CI content"}]}' + headers: + Content-Type: + - application/json + User-Agent: + - mailjet-api-v3-ruby/1.8.2 + Accept: + - application/json + Accept-Encoding: + - deflate + Authorization: + - "" + response: + status: + code: 400 + message: Bad Request + headers: + Content-Length: + - '248' + Content-Type: + - application/json; charset=UTF-8 + X-Mj-Request-Guid: + - a9c2a2bc-53ab-4b0b-be22-164c8c3cdf3e + Date: + - Tue, 26 Aug 2025 14:48:22 GMT + body: + encoding: UTF-8 + string: '{"Messages":[{"Status":"error","Errors":[{"ErrorIdentifier":"154364af-36e6-4177-a771-82ac1dc32d54","ErrorCode":"mj-0013","StatusCode":400,"ErrorMessage":"\"passenger@example..com\" + is an invalid email address.","ErrorRelatedTo":["To[0].Email"]}]}]}' + recorded_at: Tue, 26 Aug 2025 14:48:22 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/resources/send_spec.rb b/spec/resources/send_spec.rb index 53a2926..5ddc8db 100644 --- a/spec/resources/send_spec.rb +++ b/spec/resources/send_spec.rb @@ -71,4 +71,32 @@ expect{ described_class.create(message, version: 'v3.1') }.to raise_error(Mailjet::Unauthorized, /Visit API keys management section to check your keys/) end end + + it 'returns error if email is incorrect for API v3.1' do + VCR.use_cassette("resource/send_v31_incorrect_email") do + recipient = { + 'Email' => "passenger@example..com", + 'Name' => 'test' + } + + message = described_class.create({ + messages: [{ + 'From' => { + 'Email' => "pilot@example.com", + 'Name' => 'Mailjet Ruby Wrapper CI' + }, + 'To' => [ + recipient + ], + 'Subject' => 'Mailjet Ruby Wrapper CI Send API v3.1 spec', + 'TextPart' => 'Mailjet Ruby Wrapper CI content', + 'HTMLPart' => 'HTML Mailjet Ruby Wrapper CI content' + }] + }, + version: 'v3.1' + ) + + expect(message.attributes['Messages'].first['Errors'].first['ErrorMessage']).to eq "\"passenger@example..com\" is an invalid email address." + end + end end