require 'spec_helper' module RailsBestPractices module Prepares describe ControllerPrepare do let(:runner) { Core::Runner.new(prepares: [ControllerPrepare.new, HelperPrepare.new]) } context "methods" do it "should parse controller methods" do content =<<-EOF class PostsController < ApplicationController def index; end def show; end end EOF runner.prepare('app/controllers/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("PostsController").map(&:method_name)).to eq(["index", "show"]) end it "should parse model methods with access control" do content =<<-EOF class PostsController < ApplicationController def index; end def show; end protected def resources; end private def resource; end end EOF runner.prepare('app/controllers/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("PostsController").map(&:method_name)).to eq(["index", "show", "resources", "resource"]) expect(methods.get_methods("PostsController", "public").map(&:method_name)).to eq(["index", "show"]) expect(methods.get_methods("PostsController", "protected").map(&:method_name)).to eq(["resources"]) expect(methods.get_methods("PostsController", "private").map(&:method_name)).to eq(["resource"]) end it "should parse controller methods with module ::" do content =<<-EOF class Admin::Blog::PostsController < ApplicationController def index; end def show; end end EOF runner.prepare('app/controllers/admin/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("Admin::Blog::PostsController").map(&:method_name)).to eq(["index", "show"]) end it "should parse controller methods with module" do content =<<-EOF module Admin module Blog class PostsController < ApplicationController def index; end def show; end end end end EOF runner.prepare('app/controllers/admin/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("Admin::Blog::PostsController").map(&:method_name)).to eq(["index", "show"]) end context "inherited_resources" do it "extend inherited_resources" do content =<<-EOF class PostsController < InheritedResources::Base end EOF runner.prepare('app/controllers/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("PostsController").map(&:method_name)).to eq(["index", "show", "new", "create", "edit", "update", "destroy"]) end it "extend inherited_resources with actions" do content =<<-EOF class PostsController < InheritedResources::Base actions :index, :show end EOF runner.prepare('app/controllers/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("PostsController").map(&:method_name)).to eq(["index", "show"]) end it "extend inherited_resources with all actions" do content =<<-EOF class PostsController < InheritedResources::Base actions :all, except: [:show] end EOF runner.prepare('app/controllers/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("PostsController").map(&:method_name)).to eq(["index", "new", "create", "edit", "update", "destroy"]) end it "extend inherited_resources with all actions with no arguments" do content =<<-EOF class PostsController < InheritedResources::Base actions :all end EOF runner.prepare('app/controllers/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("PostsController").map(&:method_name)).to eq(["index", "show", "new", "create", "edit", "update", "destroy"]) end it "DSL inherit_resources" do content =<<-EOF class PostsController inherit_resources end EOF runner.prepare('app/controllers/posts_controller.rb', content) methods = Prepares.controller_methods expect(methods.get_methods("PostsController").map(&:method_name)).to eq(["index", "show", "new", "create", "edit", "update", "destroy"]) end end end context "helpers" do it "should add helper descendant" do content =<<-EOF module PostsHelper end EOF runner.prepare('app/helpers/posts_helper.rb', content) content =<<-EOF class PostsController include PostsHelper end EOF runner.prepare('app/controllers/posts_controller.rb', content) helpers = Prepares.helpers expect(helpers.first.descendants).to eq(["PostsController"]) end end end end end