Changeset 235

Show
Ignore:
Timestamp:
05/10/07 21:28:29 (1 year ago)
Author:
e.@brainspl.at
Message:

fixed up controller specs to have get and post methods. post takes a hash of form values and even traqnslates files into multipart posts for delivery thru the entrie mime parser

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mrblog/trunk/dist/app/controllers/blog.rb

    r229 r235  
    88 
    99  def index 
    10     @pager = Merb::Paginator.new(Post.count, MrBlog::PER_PAGE) do |offset, per_page| 
     10    @pager = Merb::Paginator.new(Post.count, ::MrBlog::PER_PAGE) do |offset, per_page| 
    1111            Post.find(:all, :limit => per_page, :offset => offset) 
    1212          end 
  • mrblog/trunk/dist/app/controllers/files.rb

    r133 r235  
    1111   
    1212  def upload 
    13     puts params.inspect 
    14      
    1513    FileUtils.mv params[:data][:tempfile].path,  
    1614                 Merb::Server.config[:dist_root]+"/public/files/#{params[:data][:filename]}" 
  • mrblog/trunk/plugins/rspec_on_merb/lib/spec/dsl/behaviour_factory.rb

    r230 r235  
    11#Spec::DSL::BehaviourFactory.add_behaviour_class(:view, Spec::Merb::DSL::ViewBehaviour) 
    22#Spec::DSL::BehaviourFactory.add_behaviour_class(:helper, Spec::Merb::DSL::HelperBehaviour) 
    3 #Spec::DSL::BehaviourFactory.add_behaviour_class(:controller, Spec::Merb::DSL::ControllerBehaviour) 
     3Spec::DSL::BehaviourFactory.add_behaviour_class(:controller, Spec::Merb::DSL::ControllerBehaviour) 
    44Spec::DSL::BehaviourFactory.add_behaviour_class(:model, Spec::Merb::DSL::ModelBehaviour) 
    55 
  • mrblog/trunk/plugins/rspec_on_merb/lib/spec/merb.rb

    r230 r235  
    99 
    1010require File.expand_path("#{dir}/merb/matchers") 
     11require File.expand_path("#{dir}/merb/fakes") 
    1112require File.expand_path("#{dir}/merb/dsl") 
    1213 
  • mrblog/trunk/plugins/rspec_on_merb/lib/spec/merb/dsl/behaviour.rb

    r230 r235  
    33require File.expand_path("#{dir}/behaviour/base") 
    44require File.expand_path("#{dir}/behaviour/model") 
    5 #require File.expand_path("#{dir}/behaviour/controller") 
     5require File.expand_path("#{dir}/behaviour/controller") 
    66#require File.expand_path("#{dir}/behaviour/helper") 
    77#require File.expand_path("#{dir}/behaviour/view") 
  • mrblog/trunk/plugins/rspec_on_merb/lib/spec/merb/dsl/behaviour/base.rb

    r230 r235  
    7272      end 
    7373 
    74       class EvalContext < Spec::Merb::TestCase 
     74      class EvalModule < Spec::Merb::TestCase 
    7575        include Spec::Merb::Matchers 
    7676        include Spec::Merb::DSL::AllBehaviourHelpers 
  • mrblog/trunk/plugins/rspec_on_merb/lib/spec/merb/dsl/behaviour/model.rb

    r230 r235  
    99      class ModelBehaviour < Spec::DSL::Behaviour 
    1010        def before_eval # :nodoc: 
    11           inherit Spec::Merb::DSL::EvalContext 
     11          inherit Spec::Merb::DSL::EvalModule 
    1212          configure 
    1313        end 
  • mrblog/trunk/plugins/rspec_on_merb/spec/spec_helper.rb

    r230 r235  
    44require 'active_record' 
    55 
    6 dir = File.dirname(__FILE__) 
    7 $LOAD_PATH << "#{dir}/dist/app/controllers" 
    8 $LOAD_PATH << "#{dir}/dist/app/helpers" 
    9 $LOAD_PATH << "#{dir}/dist/app/models" 
    10 $LOAD_PATH << "#{dir}/dist/app/views" 
     6class SpecInitializer 
     7  module ClassMethods 
     8    def recreate_database_called? 
     9      @recreate_database_called 
     10    end 
    1111 
    12 require "#{dir}/../lib/spec/merb" 
     12    def recreate_database_called! 
     13      @recreate_database_called = true 
     14    end 
     15  end 
     16  extend ClassMethods 
    1317 
    14 database = 'rspec_on_merb_test' 
    15 username = 'root' 
    16 password = 'password' 
    17 sql = "drop database if exists #{database}; create database #{database};
    18 cmd = %Q|mysql -u#{username} -p#{password} -e "#{sql};"| 
    19 raise "Failed to recreate test database" unless system(cmd) 
     18  def add_load_paths 
     19    $LOAD_PATH << "#{dir}/dist/app/controllers" 
     20    $LOAD_PATH << "#{dir}/dist/app/helpers" 
     21    $LOAD_PATH << "#{dir}/dist/app/models
     22    $LOAD_PATH << "#{dir}/dist/app/views" 
     23  end 
    2024 
    21 ActiveRecord::Base.configurations['test'] = { 
    22   :adapter => 'mysql', 
    23   :username => username, 
    24   :password => password, 
    25   :database => database, 
    26   :host => 'localhost' 
    27 
    28 ActiveRecord::Base.establish_connection('test') 
     25  def load_merb 
     26    require "#{dir}/../lib/spec/merb" 
     27  end 
    2928 
    30 require "#{dir}/dist/schema/migrations/001_add_things_table" 
    31 AddThingsTable.up 
     29  def initialize_database 
     30    database = 'rspec_on_merb_test' 
     31    username = 'root' 
     32    password = 'password' 
     33 
     34    unless recreate_database_called? 
     35      sql = "drop database if exists #{database}; create database #{database};" 
     36      cmd = %Q|mysql -u#{username} -p#{password} -e "#{sql};"| 
     37      raise "Failed to recreate test database" unless system(cmd) 
     38    end 
     39 
     40    ActiveRecord::Base.configurations['test'] = { 
     41      :adapter => 'mysql', 
     42      :username => username, 
     43      :password => password, 
     44      :database => database, 
     45      :host => 'localhost' 
     46    } 
     47    ActiveRecord::Base.establish_connection('test') 
     48 
     49    unless recreate_database_called? 
     50      require "#{dir}/dist/schema/migrations/001_add_things_table" 
     51      AddThingsTable.up 
     52    end 
     53 
     54    recreate_database_called! unless recreate_database_called? 
     55  end 
     56 
     57  def require_project_files 
     58    require_files_from_directory "controllers" 
     59    require_files_from_directory "helpers" 
     60    require_files_from_directory "models" 
     61    require_files_from_directory "views" 
     62  end 
     63 
     64  protected 
     65  def require_files_from_directory(app_dir) 
     66    Dir["#{dir}/dist/app/#{app_dir}/*"].each do |file| 
     67      require file 
     68    end 
     69  end 
     70 
     71  def recreate_database_called? 
     72    self.class.recreate_database_called? 
     73  end 
     74 
     75  def recreate_database_called! 
     76    self.class.recreate_database_called! 
     77  end 
     78 
     79  def dir 
     80    File.dirname(__FILE__) 
     81  end 
     82end 
     83 
     84initializer = SpecInitializer.new 
     85 
     86initializer.add_load_paths 
     87initializer.load_merb 
     88initializer.initialize_database 
     89initializer.require_project_files 
  • mrblog/trunk/test/spec/spec_helper.rb

    r233 r235  
    2727Dir[DIST_ROOT+"/plugins/*/init.rb"].each { |m| require m } 
    2828Dir[MERB_ROOT+"/plugins/*/init.rb"].each { |m| require m } 
    29  
     29require DIST_ROOT+"/conf/router.rb" 
    3030$LOAD_PATH << DIST_ROOT+"/app/models/"  
    3131$LOAD_PATH << DIST_ROOT+"/app/controllers/" 
     
    3333Dir[DIST_ROOT+"/plugins/*/lib"].each { |m| $LOAD_PATH <<  m } 
    3434Dir[MERB_ROOT+"/plugins/*/lib"].each { |m| $LOAD_PATH << m } 
     35 
     36module MrBlog 
     37  PER_PAGE = 10 
     38end 
    3539 
    3640require "spec/merb" 
     
    4044  :adapter => 'mysql', 
    4145  :username => 'root', 
    42   :password => 'xxxxxx', 
     46  :password => 'xxxxx', 
    4347  :database => 'mrblog_test', 
    4448  :host => 'localhost' 
     
    5054 
    5155require "#{dir}/fake_request" 
     56 
     57module Multipart 
     58  require 'rubygems' 
     59  require 'mime/types' 
     60 
     61  class Param 
     62    attr_accessor :k, :v 
     63    def initialize( k, v ) 
     64      @k = k 
     65      @v = v 
     66    end 
     67 
     68    def to_multipart 
     69      return "Content-Disposition: form-data; name=\"#{k}\"\r\n\r\n#{v}\r\n" 
     70    end 
     71  end 
     72 
     73  class FileParam 
     74    attr_accessor :k, :filename, :content 
     75    def initialize( k, filename, content ) 
     76      @k = k 
     77      @filename = filename 
     78      @content = content 
     79    end 
     80 
     81    def to_multipart 
     82      return "Content-Disposition: form-data; name=\"#{k}\"; filename=\"#{filename}\"\r\n" + "Content-Type: #{MIME::Types.type_for(@filename)}\r\n\r\n" + content + "\r\n" 
     83    end 
     84  end 
     85  class Post 
     86    BOUNDARY = '----------0xKhTmLbOuNdArY' 
     87    CONTENT_TYPE = "multipart/form-data, boundary=" + BOUNDARY 
     88 
     89    def prepare_query (params) 
     90      fp = [] 
     91      params.each {|k,v| 
     92        if v.respond_to?(:read) 
     93          fp.push(FileParam.new(k, v.path, c=v.read)) 
     94        else 
     95          fp.push(Param.new(k,v)) 
     96        end 
     97      } 
     98      query = fp.collect {|p| "--" + BOUNDARY + "\r\n" + p.to_multipart }.join("") + "--" + BOUNDARY + "--" 
     99      return query, CONTENT_TYPE 
     100    end 
     101  end   
     102end