diff --git a/rswag-specs/lib/rswag/route_parser.rb b/rswag-specs/lib/rswag/route_parser.rb index 03470ee..4689203 100644 --- a/rswag-specs/lib/rswag/route_parser.rb +++ b/rswag-specs/lib/rswag/route_parser.rb @@ -11,7 +11,7 @@ module Rswag def routes ::Rails.application.routes.routes.select do |route| route.defaults[:controller] == controller - end.each_with_object({}) do |tree, route| + end.each_with_object({}) do |route, tree| path = path_from(route) verb = verb_from(route) tree[path] ||= { params: params_from(route), actions: {} } diff --git a/rswag-specs/spec/rswag/route_parser_spec.rb b/rswag-specs/spec/rswag/route_parser_spec.rb new file mode 100644 index 0000000..38628a5 --- /dev/null +++ b/rswag-specs/spec/rswag/route_parser_spec.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +RSpec.describe Rswag::RouteParser do + describe "#routes" do + let(:controller) { "api/v1/posts" } + subject { described_class.new(controller) } + + let(:routes) do + [ + double( + defaults: { + controller: controller + }, + path: double( + spec: double( + to_s: "/api/v1/posts/:id(.:format)" + ) + ), + verb: "GET", + requirements: { + action: "show", + controller: "api/v1/posts" + }, + segments: ["id", "format"] + ) + ] + end + + let(:expectation) do + { + "/api/v1/posts/{id}" => { + params: ["id"], + actions: { + "get" => { + summary: "show post" + } + } + } + } + end + + before do + allow(::Rails).to receive_message_chain("application.routes.routes") { routes } + end + + it "returns correct routes" do + expect(subject.routes).to eq(expectation) + end + end +end