Search code examples
ruby-on-railsrspecswaggerrspec-rails

Rswag does not work as I expect?


I am trying usage rswag for testing my users inviting system:

describe 'Invitation API' do
  path '/api/users/invitation' do
    put 'Accept a token' do
      tags 'Invitation'
      produces 'application/json'
      consumes 'application/json'

      parameter name: :invitation_token,
                in: :body,
                type: :string,
                description: 'invitation token',
                required: true

      parameter name: :password,
                in: :body,
                type: :string,
                description: 'user password',
                required: true

      response '201', 'valid invitation token' do
        let(:invited_user) { create :user }
        let(:password) { 'password' }

        run_test!
      end

      response '406', 'invalid invitation token' do
        let(:invited_user) { create :user }
        let(:invitation_token) { 'faketoken' }
        let(:password) { 'password' }

        run_test!
      end
    end
  end
end

and for testing my accept invite code i write helper:

  def invitation_token
    p 'invitation_token'
    raw, enc = Devise.token_generator.generate(invited_user.class, :invitation_token)
    invited_user.update(invitation_token: enc)
    raw
  end

I expect that the server will receive the following parameters:

<ActionController::Parameters {"password"=>"password", "invitation_token"=>"_48eEztTbeRzttErfuWh", "format"=>"json", "controller"=>"invitations", "action"=>"update"} permitted: false>

(this request is made using Postman)

but when i using rswag test i gets:

<ActionController::Parameters {"_json"=>"_48eEztTbeRzttErfuWh", "format"=>"json", "controller"=>"invitations", "action"=>"update", "invitation"=>{"_json"=>"_48eEztTbeRzttErfuWh"}} permitted: false>

but everything works fine when I similarly do GET request with parameters inside the query

how do i fix for PUT?


Solution

  • I have found answer in this issue issue