Add a macro for complexes multiparts

This will allow to describe multipart in a short way, like JSON payload:

Before:

    put 'Creates a blog with thumbnail' do
      consumes 'multipart/form-data'
      parameter name: :title, in: :formData, type: :string, required: true
      parameter name: :content, in: :formData, type: :string, required: true
      parameter name: :file, in: :formData, type: :file, required: true

      let(:blog) { FactoryBot.build(:blog) }
      let(:title) { blog.title }
      let(:content) { blog.content }
      let(:file) { blog.file }

      ...
    end

After:

    put 'Creates a blog with thumbnail' do
      consumes 'multipart/form-data'
      parameter name: :blog, in: :formData, schema: { '$ref' => '#/definitions/blog' }

      let(:blog) { FactoryBot.attributes_for(:blog) }

      ...
    end

Your mileage may vary but you can always choose the best option.
This commit is contained in:
Gabriel Sobrinho
2020-04-16 22:00:55 -03:00
parent 7ceedab4cb
commit f8dbd98bbc
7 changed files with 110 additions and 1 deletions

View File

@@ -7,6 +7,7 @@ RSpec.feature 'swagger-ui', js: true do
expect(page).to have_content('GET /blogs Searches blogs', normalize_ws: true)
expect(page).to have_content('POST /blogs Creates a blog', normalize_ws: true)
expect(page).to have_content('POST /blogs/multipart Creates a blog using multipart', normalize_ws: true)
expect(page).to have_content('GET /blogs/{id} Retrieves a blog', normalize_ws: true)
end
end

View File

@@ -49,6 +49,33 @@ RSpec.describe 'Blogs API', type: :request, swagger_doc: 'v1/swagger.json' do
end
end
path '/blogs/multipart' do
post 'Creates a blog using multipart' do
tags 'Blogs'
description 'Creates a new blog from provided data'
operationId 'createBlogWithMultipart'
consumes 'multipart/form-data'
produces 'application/json'
parameter name: :blog, in: :formData, schema: { type: :object, properties: { name: :blog, type: :object, properties: { '$ref' => '#/definitions/blog' } } }
let(:blog) { { blog: { title: 'foo', content: 'bar' } } }
response '201', 'blog created' do
# schema '$ref' => '#/definitions/blog'
run_test!
end
response '422', 'invalid request' do
schema '$ref' => '#/definitions/errors_object'
let(:blog) { { blog: { title: 'foo' } } }
run_test! do |response|
expect(response.body).to include("can't be blank")
end
end
end
end
path '/blogs/flexible' do
post 'Creates a blog flexible body' do
tags 'Blogs'