Skip to content

Conversation

@ramkumar-kr
Copy link
Contributor

No description provided.

@grape-bot
Copy link

1 Warning
⚠️ Unless you’re refactoring existing code, please update CHANGELOG.md.
1 Message
📖 We really appreciate pull requests that demonstrate issues, even without a fix. That said, the next step is to try and fix the failing tests!

Here's an example of a CHANGELOG.md entry:

* [#1675](https://github.com/ruby-grape/grape/pull/1675): #1662 - add a spec for sending single element to an array - [@ramkumar-kr](https://github.com/ramkumar-kr).

Generated by 🚫 danger

@dblock
Copy link
Member

dblock commented Aug 10, 2017

I tried to fix this at no avail. Also tried requires :products, type: Array, coerce_with: ->(val) { Array(val) } but it gets overwritten somehow. I would focus on that one first, because it sounds that it could be an acceptable work-around.

@dblock
Copy link
Member

dblock commented Aug 10, 2017

You can work-around/hack it with a before block. This passes:

 context 'array params with XML content type' do let(:single_element_request) do '<?xml version="1.0" encoding="UTF-8" ?>  <admin>  <products>  <price>100</price>  </products>  </admin>' end let(:multiple_element_request) do '<?xml version="1.0" encoding="UTF-8" ?>  <admin>  <products>  <price>100</price>  </products>  <products>  <price>200</price>  </products>  </admin>' end before do subject.format :xml subject.content_type :xml, 'application/xml; charset=utf-8' subject.before do params[:admin][:products] = [params[:admin][:products]] unless params[:admin][:products].is_a?(Array) end subject.params do requires :admin, type: Hash do requires :products, type: Array do requires :price, type: Integer end end end subject.post do params[:admin][:products].map do |product| { price: product[:price] } end end end context 'with one element' do it 'returns a successful response' do post '/', single_element_request, 'CONTENT_TYPE' => 'application/xml' expect(last_response.status).to eq(201) expect(MultiXml.parse(last_response.body)).to eq('objects' => [{ 'price' => 100 }]) end end context 'with multiple elements' do it 'returns a successful response' do post '/', multiple_element_request, 'CONTENT_TYPE' => 'application/xml' expect(last_response.status).to eq(201) expect(MultiXml.parse(last_response.body)).to eq('objects' => [{ 'price' => 100 }, { 'price' => 200 }]) end end end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants