/spec/rails_best_practices/core/checking_visitor_spec.rb

http://github.com/flyerhzm/rails_best_practices · Ruby · 78 lines · 67 code · 10 blank · 1 comment · 0 complexity · 8be9c5f09eef9c19009e8eaea71053e6 MD5 · raw file

  1. # encoding: utf-8
  2. require 'spec_helper'
  3. class TestLexical1
  4. end
  5. class TestLexical2
  6. end
  7. class TestPrepare1 < RailsBestPractices::Core::Check
  8. interesting_nodes :call
  9. interesting_files MODEL_FILES
  10. end
  11. class TestPrepare2 < RailsBestPractices::Core::Check
  12. interesting_nodes :class
  13. interesting_files MAILER_FILES
  14. end
  15. class TestReview1 < RailsBestPractices::Core::Check
  16. interesting_nodes :defn
  17. interesting_files CONTROLLER_FILES
  18. end
  19. class TestReview2 < RailsBestPractices::Core::Check
  20. interesting_nodes :call
  21. interesting_files VIEW_FILES
  22. end
  23. describe RailsBestPractices::Core::CheckingVisitor do
  24. let(:lexical1) { TestLexical1.new }
  25. let(:lexical2) { TestLexical2.new }
  26. let(:prepare1) { TestPrepare1.new }
  27. let(:prepare2) { TestPrepare2.new }
  28. let(:review1) { TestReview1.new }
  29. let(:review2) { TestReview2.new }
  30. let(:visitor) {
  31. RailsBestPractices::Core::CheckingVisitor.new(
  32. :lexicals => [lexical1, lexical2],
  33. :prepares => [prepare1, prepare2],
  34. :reviews => [review1, review2]
  35. )
  36. }
  37. it "should lexical check" do
  38. filename = "app/models/user.rb"
  39. content = "class User; end"
  40. lexical1.should_receive(:check).with(filename, content)
  41. lexical2.should_receive(:check).with(filename, content)
  42. visitor.lexical(filename, content)
  43. end
  44. it "should prepare model associations" do
  45. node = stub(:sexp_type => :call, :children => [], :file => "app/models/user.rb")
  46. prepare1.should_receive(:node_start).with(node)
  47. prepare1.should_receive(:node_end).with(node)
  48. visitor.prepare(node)
  49. end
  50. it "should prepare mailer names" do
  51. node = stub(:sexp_type => :class, :children => [], :file => "app/mailers/user_mailer.rb")
  52. prepare2.should_receive(:node_start).with(node)
  53. prepare2.should_receive(:node_end).with(node)
  54. visitor.prepare(node)
  55. end
  56. it "should review controller method definitions" do
  57. node = stub(:sexp_type => :defn, :children => [], :file => "app/controllers/users_controller.rb")
  58. review1.should_receive(:node_start).with(node)
  59. review1.should_receive(:node_end).with(node)
  60. visitor.review(node)
  61. end
  62. it "should review view calls" do
  63. node = stub(:sexp_type => :call, :children => [], :file => "app/views/users/new.html.erb")
  64. review2.should_receive(:node_start).with(node)
  65. review2.should_receive(:node_end).with(node)
  66. visitor.review(node)
  67. end
  68. end