Skip to content

Commit 890517d

Browse files
author
Emmanuel Delgado
committed
Adding simple STI support test
1 parent 7a88d3d commit 890517d

File tree

7 files changed

+80
-48
lines changed

7 files changed

+80
-48
lines changed

lib/rails3-jquery-autocomplete/helpers.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ def get_object(model_sym)
1919
# Returns a symbol representing what implementation should be used to query
2020
# the database and raises *NotImplementedError* if ORM implementor can not be found
2121
def get_implementation(object)
22-
if object.ancestors.collect(&:to_s).include?('ActiveRecord::Base')
22+
ancestors_ary = object.ancestors.collect(&:to_s)
23+
if ancestors_ary.include?('ActiveRecord::Base')
2324
:activerecord
24-
elsif object.ancestors.collect(&:to_s).include?('Mongoid::Document')
25+
elsif ancestors_ary.include?('Mongoid::Document')
2526
:mongoid
2627
else
2728
raise NotImplementedError

test/active_record_test.rb

Lines changed: 0 additions & 8 deletions
This file was deleted.

test/implementations_test.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
require "test_helper"
2+
require 'test_controller'
3+
require 'support/mongoid'
4+
require 'support/active_record'
5+
6+
class ActiveRecordControllerTest < ActionController::TestCase
7+
include Rails3JQueryAutocomplete::TestCase::ActiveRecord
8+
include Rails3JQueryAutocomplete::TestCase
9+
end
10+
11+
class ActiveRecordSTIControllerTest < ActionController::TestCase
12+
require 'support/active_record'
13+
include Rails3JQueryAutocomplete::TestCase::ActiveRecord
14+
include Rails3JQueryAutocomplete::TestCase
15+
16+
def create_models
17+
@parent_movie_class = Object.const_set(:Movie, Class.new(::ActiveRecord::Base))
18+
@parent_movie_class.class_eval do
19+
def display_name
20+
"Movie: #{name}"
21+
end
22+
end
23+
@movie_class = Object.const_set(:HorrorMovie, Class.new(@parent_movie_class))
24+
end
25+
26+
def destroy_models
27+
Object.send(:remove_const, :Movie)
28+
Object.send(:remove_const, :HorrorMovie)
29+
end
30+
31+
end
32+
33+
class MonogidControllerTest < ActionController::TestCase
34+
include Rails3JQueryAutocomplete::TestCase::Mongoid
35+
include Rails3JQueryAutocomplete::TestCase
36+
end

test/mongoid_test.rb

Lines changed: 0 additions & 8 deletions
This file was deleted.

test/support/active_record.rb

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,44 @@
11
module Rails3JQueryAutocomplete
2-
module Test
3-
module Setup
2+
module TestCase
3+
module ActiveRecord
44
def setup
55
::ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
66
::ActiveRecord::Schema.define(:version => 1) do
77
create_table :movies do |t|
88
t.column :name, :string
99
end
10-
11-
create_table :actors do |t|
12-
t.column :movie_id, :integer
13-
t.column :name, :string
14-
end
1510
end
1611

17-
@actor_class = Object.const_set(:Actor, Class.new(::ActiveRecord::Base))
18-
@actor_class.belongs_to(:movie)
19-
20-
@movie_class = Object.const_set(:Movie, Class.new(::ActiveRecord::Base))
21-
@movie_class.class_eval do
22-
def display_name
23-
"Movie: #{name}"
24-
end
25-
end
12+
create_models
2613

2714
@controller = ActorsController.new
2815

29-
@movie1 = @movie_class.create(:name => 'Alpha')
16+
@movie1 = @movie_class.create(:name => 'Alpha')
3017
@movie2 = @movie_class.create(:name => 'Alspha')
3118
@movie3 = @movie_class.create(:name => 'Alzpha')
3219
end
3320

3421
def teardown
35-
Object.send(:remove_const, :Actor)
36-
Object.send(:remove_const, :Movie)
22+
destroy_models
3723
::ActiveRecord::Base.connection.tables.each do |table|
3824
::ActiveRecord::Base.connection.drop_table(table)
3925
end
4026
end
27+
28+
private
29+
def create_models
30+
@movie_class = Object.const_set(:Movie, Class.new(::ActiveRecord::Base))
31+
@movie_class.class_eval do
32+
def display_name
33+
"Movie: #{name}"
34+
end
35+
end
36+
end
37+
38+
def destroy_models
39+
Object.send(:remove_const, :Movie)
40+
end
41+
4142
end
4243
end
4344
end

test/support/mongoid.rb

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Rails3JQueryAutocomplete
2-
module Test
3-
class ActorsControllerTest
2+
module TestCase
3+
module Mongoid
44
def setup
55
::Mongoid.configure do |config|
66
name = "rails3_jquery_autocomplete_test"
@@ -9,6 +9,22 @@ def setup
99
config.logger = nil
1010
end
1111

12+
create_models
13+
14+
@controller = ActorsController.new
15+
16+
@movie1 = @movie_class.create(:name => 'Alpha')
17+
@movie2 = @movie_class.create(:name => 'Alspha')
18+
@movie3 = @movie_class.create(:name => 'Alzpha')
19+
end
20+
21+
def teardown
22+
destroy_models
23+
::Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
24+
end
25+
26+
private
27+
def create_models
1228
@movie_class = Object.const_set(:Movie, Class.new)
1329
@movie_class.send(:include, ::Mongoid::Document)
1430
@movie_class.field(:name, :class => String)
@@ -17,18 +33,12 @@ def display_name
1733
"Movie: #{name}"
1834
end
1935
end
20-
21-
@controller = ActorsController.new
22-
23-
@movie1 = @movie_class.create(:name => 'Alpha')
24-
@movie2 = @movie_class.create(:name => 'Alspha')
25-
@movie3 = @movie_class.create(:name => 'Alzpha')
2636
end
2737

28-
def teardown
38+
def destroy_models
2939
Object.send(:remove_const, :Movie)
30-
::Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
3140
end
41+
3242
end
3343
end
3444
end

test/test_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module Rails3JQueryAutocomplete
2-
module Test
2+
module TestCase
33

44
include Shoulda::InstanceMethods
55
extend Shoulda::ClassMethods

0 commit comments

Comments
 (0)