diff --git a/spec/grape/api/patch_method_helpers_spec.rb b/spec/grape/api/patch_method_helpers_spec.rb new file mode 100644 index 0000000000..5f882d63ed --- /dev/null +++ b/spec/grape/api/patch_method_helpers_spec.rb @@ -0,0 +1,80 @@ +require 'spec_helper' + +describe Grape::API::Helpers do + module PatchHelpersSpec + class PatchPublic < Grape::API + format :json + version 'public-v1', using: :header, vendor: 'grape' + + get do + { ok: 'public' } + end + end + + module AuthMethods + def authenticate! + end + end + + class PatchPrivate < Grape::API + format :json + version 'private-v1', using: :header, vendor: 'grape' + + helpers AuthMethods + + before do + authenticate! + end + + get do + { ok: 'private' } + end + end + + class Main < Grape::API + mount PatchPublic + mount PatchPrivate + end + end + + def app + PatchHelpersSpec::Main + end + + context 'default' do + it 'public' do + get '/', {}, 'HTTP_ACCEPT' => 'application/vnd.grape-public-v1+json' + expect(last_response.status).to eq 200 + expect(last_response.body).to eq({ ok: 'public' }.to_json) + end + + it 'private' do + get '/', {}, 'HTTP_ACCEPT' => 'application/vnd.grape-private-v1+json' + expect(last_response.status).to eq 200 + expect(last_response.body).to eq({ ok: 'private' }.to_json) + end + + it 'default' do + get '/' + expect(last_response.status).to eq 200 + expect(last_response.body).to eq({ ok: 'public' }.to_json) + end + end + + context 'patch' do + it 'public' do + patch '/', {}, 'HTTP_ACCEPT' => 'application/vnd.grape-public-v1+json' + expect(last_response.status).to eq 405 + end + + it 'private' do + patch '/', {}, 'HTTP_ACCEPT' => 'application/vnd.grape-private-v1+json' + expect(last_response.status).to eq 405 + end + + it 'default' do + patch '/' + expect(last_response.status).to eq 405 + end + end +end