aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/test
diff options
context:
space:
mode:
Diffstat (limited to 'activemodel/test')
-rw-r--r--activemodel/test/cases/attributes_test.rb30
-rw-r--r--activemodel/test/cases/helper.rb2
-rw-r--r--activemodel/test/cases/json_serialization_test.rb64
-rw-r--r--activemodel/test/cases/naming_test.rb27
-rw-r--r--activemodel/test/cases/observing_test.rb32
-rw-r--r--activemodel/test/cases/validations/presence_validation_test.rb18
6 files changed, 150 insertions, 23 deletions
diff --git a/activemodel/test/cases/attributes_test.rb b/activemodel/test/cases/attributes_test.rb
new file mode 100644
index 0000000000..5f3ea839a4
--- /dev/null
+++ b/activemodel/test/cases/attributes_test.rb
@@ -0,0 +1,30 @@
+require 'cases/helper'
+
+class AttributesTest < ActiveModel::TestCase
+ class Person
+ include ActiveModel::Attributes
+ attr_accessor :name
+ end
+
+ test "reads attribute" do
+ p = Person.new
+ assert_equal nil, p.read_attribute(:name)
+
+ p.name = "Josh"
+ assert_equal "Josh", p.read_attribute(:name)
+ end
+
+ test "writes attribute" do
+ p = Person.new
+ assert_equal nil, p.name
+
+ p.write_attribute(:name, "Josh")
+ assert_equal "Josh", p.name
+ end
+
+ test "returns all attributes" do
+ p = Person.new
+ p.name = "Josh"
+ assert_equal({"name" => "Josh"}, p.attributes)
+ end
+end
diff --git a/activemodel/test/cases/helper.rb b/activemodel/test/cases/helper.rb
index f023109a60..3c0bd15236 100644
--- a/activemodel/test/cases/helper.rb
+++ b/activemodel/test/cases/helper.rb
@@ -10,8 +10,6 @@ ActiveSupport::Deprecation.debug = true
require 'rubygems'
require 'test/unit'
-gem 'mocha', '>= 0.9.5'
-require 'mocha'
begin
require 'ruby-debug'
diff --git a/activemodel/test/cases/json_serialization_test.rb b/activemodel/test/cases/json_serialization_test.rb
new file mode 100644
index 0000000000..abcec67a85
--- /dev/null
+++ b/activemodel/test/cases/json_serialization_test.rb
@@ -0,0 +1,64 @@
+require 'cases/helper'
+
+class JsonSerializationTest < ActiveModel::TestCase
+ class Contact
+ extend ActiveModel::Naming
+ include ActiveModel::Serializers::JSON
+ attr_accessor :name, :age, :created_at, :awesome, :preferences
+ end
+
+ def setup
+ @contact = Contact.new
+ @contact.name = 'Konata Izumi'
+ @contact.age = 16
+ @contact.created_at = Time.utc(2006, 8, 1)
+ @contact.awesome = true
+ @contact.preferences = { 'shows' => 'anime' }
+ end
+
+ test "should include root in json" do
+ begin
+ Contact.include_root_in_json = true
+ json = @contact.to_json
+
+ assert_match %r{^\{"contact":\{}, json
+ assert_match %r{"name":"Konata Izumi"}, json
+ assert_match %r{"age":16}, json
+ assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))}))
+ assert_match %r{"awesome":true}, json
+ assert_match %r{"preferences":\{"shows":"anime"\}}, json
+ ensure
+ Contact.include_root_in_json = false
+ end
+ end
+
+ test "should encode all encodable attributes" do
+ json = @contact.to_json
+
+ assert_match %r{"name":"Konata Izumi"}, json
+ assert_match %r{"age":16}, json
+ assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))}))
+ assert_match %r{"awesome":true}, json
+ assert_match %r{"preferences":\{"shows":"anime"\}}, json
+ end
+
+ test "should allow attribute filtering with only" do
+ json = @contact.to_json(:only => [:name, :age])
+
+ assert_match %r{"name":"Konata Izumi"}, json
+ assert_match %r{"age":16}, json
+ assert_no_match %r{"awesome":true}, json
+ assert !json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))}))
+ assert_no_match %r{"preferences":\{"shows":"anime"\}}, json
+ end
+
+ test "should allow attribute filtering with except" do
+ json = @contact.to_json(:except => [:name, :age])
+
+ assert_no_match %r{"name":"Konata Izumi"}, json
+ assert_no_match %r{"age":16}, json
+ assert_match %r{"awesome":true}, json
+ assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))}))
+ assert_match %r{"preferences":\{"shows":"anime"\}}, json
+ end
+end
diff --git a/activemodel/test/cases/naming_test.rb b/activemodel/test/cases/naming_test.rb
new file mode 100644
index 0000000000..e75d4541a3
--- /dev/null
+++ b/activemodel/test/cases/naming_test.rb
@@ -0,0 +1,27 @@
+require 'cases/helper'
+
+class NamingTest < Test::Unit::TestCase
+ def setup
+ @model_name = ActiveModel::Name.new('Post::TrackBack')
+ end
+
+ def test_singular
+ assert_equal 'post_track_back', @model_name.singular
+ end
+
+ def test_plural
+ assert_equal 'post_track_backs', @model_name.plural
+ end
+
+ def test_element
+ assert_equal 'track_back', @model_name.element
+ end
+
+ def test_collection
+ assert_equal 'post/track_backs', @model_name.collection
+ end
+
+ def test_partial_path
+ assert_equal 'post/track_backs/track_back', @model_name.partial_path
+ end
+end
diff --git a/activemodel/test/cases/observing_test.rb b/activemodel/test/cases/observing_test.rb
index 421ac4b4f8..564451fa2f 100644
--- a/activemodel/test/cases/observing_test.rb
+++ b/activemodel/test/cases/observing_test.rb
@@ -9,7 +9,7 @@ class FooObserver < ActiveModel::Observer
class << self
public :new
end
-
+
attr_accessor :stub
def on_spec(record)
@@ -28,12 +28,12 @@ class ObservingTest < ActiveModel::TestCase
test "initializes model with no cached observers" do
assert ObservedModel.observers.empty?, "Not empty: #{ObservedModel.observers.inspect}"
end
-
+
test "stores cached observers in an array" do
ObservedModel.observers << :foo
assert ObservedModel.observers.include?(:foo), ":foo not in #{ObservedModel.observers.inspect}"
end
-
+
test "flattens array of assigned cached observers" do
ObservedModel.observers = [[:foo], :bar]
assert ObservedModel.observers.include?(:foo), ":foo not in #{ObservedModel.observers.inspect}"
@@ -57,22 +57,30 @@ class ObservingTest < ActiveModel::TestCase
ObservedModel::Observer.expects(:instance)
ObservedModel.instantiate_observers
end
-
+
test "passes observers to subclasses" do
FooObserver.instance
bar = Class.new(Foo)
assert_equal Foo.count_observers, bar.count_observers
end
end
-
+
class ObserverTest < ActiveModel::TestCase
def setup
ObservedModel.observers = :foo_observer
- FooObserver.models = nil
+ FooObserver.instance_eval do
+ alias_method :original_observed_classes, :observed_classes
+ end
+ end
+
+ def teardown
+ FooObserver.instance_eval do
+ alias_method :observed_classes, :original_observed_classes
+ end
end
test "guesses implicit observable model name" do
- assert_equal 'Foo', FooObserver.observed_class_name
+ assert_equal Foo, FooObserver.observed_class
end
test "tracks implicit observable models" do
@@ -80,7 +88,7 @@ class ObserverTest < ActiveModel::TestCase
assert instance.send(:observed_classes).include?(Foo), "Foo not in #{instance.send(:observed_classes).inspect}"
assert !instance.send(:observed_classes).include?(ObservedModel), "ObservedModel in #{instance.send(:observed_classes).inspect}"
end
-
+
test "tracks explicit observed model class" do
old_instance = FooObserver.new
assert !old_instance.send(:observed_classes).include?(ObservedModel), "ObservedModel in #{old_instance.send(:observed_classes).inspect}"
@@ -88,7 +96,7 @@ class ObserverTest < ActiveModel::TestCase
instance = FooObserver.new
assert instance.send(:observed_classes).include?(ObservedModel), "ObservedModel not in #{instance.send(:observed_classes).inspect}"
end
-
+
test "tracks explicit observed model as string" do
old_instance = FooObserver.new
assert !old_instance.send(:observed_classes).include?(ObservedModel), "ObservedModel in #{old_instance.send(:observed_classes).inspect}"
@@ -96,7 +104,7 @@ class ObserverTest < ActiveModel::TestCase
instance = FooObserver.new
assert instance.send(:observed_classes).include?(ObservedModel), "ObservedModel not in #{instance.send(:observed_classes).inspect}"
end
-
+
test "tracks explicit observed model as symbol" do
old_instance = FooObserver.new
assert !old_instance.send(:observed_classes).include?(ObservedModel), "ObservedModel in #{old_instance.send(:observed_classes).inspect}"
@@ -104,7 +112,7 @@ class ObserverTest < ActiveModel::TestCase
instance = FooObserver.new
assert instance.send(:observed_classes).include?(ObservedModel), "ObservedModel not in #{instance.send(:observed_classes).inspect}"
end
-
+
test "calls existing observer event" do
foo = Foo.new
FooObserver.instance.stub = stub
@@ -112,7 +120,7 @@ class ObserverTest < ActiveModel::TestCase
Foo.send(:changed)
Foo.send(:notify_observers, :on_spec, foo)
end
-
+
test "skips nonexistent observer event" do
foo = Foo.new
Foo.send(:changed)
diff --git a/activemodel/test/cases/validations/presence_validation_test.rb b/activemodel/test/cases/validations/presence_validation_test.rb
index f6bed4903a..aa5bdf1e62 100644
--- a/activemodel/test/cases/validations/presence_validation_test.rb
+++ b/activemodel/test/cases/validations/presence_validation_test.rb
@@ -31,15 +31,15 @@ class PresenceValidationTest < ActiveModel::TestCase
assert t.save
end
- def test_validates_presence_of_with_custom_message_using_quotes
- repair_validations(Developer) do
- Developer.validates_presence_of :non_existent, :message=> "This string contains 'single' and \"double\" quotes"
- d = Developer.new
- d.name = "Joe"
- assert !d.valid?
- assert_equal ["This string contains 'single' and \"double\" quotes"], d.errors[:non_existent]
- end
- end
+ # def test_validates_presence_of_with_custom_message_using_quotes
+ # repair_validations(Developer) do
+ # Developer.validates_presence_of :non_existent, :message=> "This string contains 'single' and \"double\" quotes"
+ # d = Developer.new
+ # d.name = "Joe"
+ # assert !d.valid?
+ # assert_equal ["This string contains 'single' and \"double\" quotes"], d.errors[:non_existent]
+ # end
+ # end
def test_validates_presence_of_for_ruby_class
repair_validations(Person) do