You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
3.4 KiB
146 lines
3.4 KiB
$:.unshift File.join(File.dirname(__FILE__), "..", "app")
|
|
|
|
require 'test/unit'
|
|
require 'mocha'
|
|
|
|
require 'ds_admin'
|
|
|
|
class ModelStub
|
|
include DsAdmin::Model
|
|
|
|
attr_accessor :data
|
|
|
|
def initialize(args = {})
|
|
return if args.empty?
|
|
super(args)
|
|
|
|
@data = args[:data]
|
|
end
|
|
end
|
|
|
|
class ModelTest < Test::Unit::TestCase
|
|
# def setup
|
|
# end
|
|
|
|
# def teardown
|
|
# end
|
|
|
|
def test_initialize
|
|
model = ModelStub.new
|
|
assert_instance_of(ModelStub, model)
|
|
assert_kind_of(DsAdmin::Model, model)
|
|
|
|
model = ModelStub.new({:data => 'data'})
|
|
assert_instance_of(ModelStub, model)
|
|
assert_kind_of(DsAdmin::Model, model)
|
|
assert_equal('data', model.data)
|
|
assert_nil(model.id)
|
|
end
|
|
|
|
def test_config_key
|
|
assert_equal(:ModelStub, ModelStub.new.config_key)
|
|
end
|
|
|
|
def test_to_h
|
|
model_hash = ModelStub.new({:data => 'data'}).to_h
|
|
assert_instance_of(Hash, model_hash)
|
|
assert_equal('data', model_hash[:data])
|
|
end
|
|
|
|
def test_all_and_each
|
|
model = ModelStub.new
|
|
|
|
storage_config_mock = mock(:model= => model)
|
|
|
|
storage_mock = mock(:config => storage_config_mock)
|
|
storage_mock.extend(Enumerable).
|
|
expects(:each).multiple_yields(
|
|
[{:id => 1, :data => 'data1'}],
|
|
[{:id => 2, :data => 'data2'}])
|
|
|
|
DsAdmin::Model.storage = storage_mock
|
|
all = model.all
|
|
|
|
assert_nil(model.id)
|
|
assert_nil(model.data)
|
|
assert_instance_of(Array, all)
|
|
assert_instance_of(ModelStub, all[0])
|
|
assert_instance_of(ModelStub, all[1])
|
|
assert_equal(1, all[0].id)
|
|
assert_equal('data1', all[0].data)
|
|
assert_equal(2, all[1].id)
|
|
assert_equal('data2', all[1].data)
|
|
|
|
found = Array.new
|
|
ids = Array.new
|
|
all.each do |a|
|
|
assert_instance_of(ModelStub, a)
|
|
found << a.data
|
|
ids << a.id
|
|
end
|
|
|
|
assert_equal([1, 2], ids)
|
|
assert_equal(['data1', 'data2'], found)
|
|
end
|
|
|
|
def test_load
|
|
model = ModelStub.new
|
|
|
|
storage_config_mock = mock
|
|
storage_config_mock.expects(:model=).twice.returns(model)
|
|
|
|
storage_mock = mock().extend(Enumerable)
|
|
storage_mock.expects(:config).twice.returns(storage_config_mock)
|
|
storage_mock.expects(:each).twice.multiple_yields(
|
|
[{:id => 1, :data => 'data1'}],
|
|
[{:id => 2, :data => 'data2'}])
|
|
|
|
DsAdmin::Model.storage = storage_mock
|
|
loaded = model.load(2)
|
|
|
|
assert_instance_of(ModelStub, model)
|
|
assert_instance_of(ModelStub, loaded)
|
|
assert_not_equal(model, loaded)
|
|
assert_nil(model.data)
|
|
assert_equal('data2', loaded.data)
|
|
|
|
assert_raise RuntimeError do
|
|
loaded = model.load(3)
|
|
end
|
|
end
|
|
|
|
def test_load!
|
|
model = ModelStub.new
|
|
|
|
storage_config_mock = mock
|
|
storage_config_mock.expects(:model=).twice.returns(model)
|
|
|
|
storage_mock = mock().extend(Enumerable)
|
|
storage_mock.expects(:config).twice.returns(storage_config_mock)
|
|
storage_mock.expects(:each).twice.multiple_yields(
|
|
[{:id => 1, :data => 'data1'}],
|
|
[{:id => 2, :data => 'data2'}])
|
|
|
|
DsAdmin::Model.storage = storage_mock
|
|
model.load!(1)
|
|
|
|
assert_instance_of(ModelStub, model)
|
|
assert_equal('data1', model.data)
|
|
|
|
assert_raise RuntimeError do
|
|
model.load!(3)
|
|
end
|
|
end
|
|
|
|
def test_save_stores_new_id
|
|
model = ModelStub.new({:data => 'data'})
|
|
|
|
storage_mock = mock()
|
|
storage_mock.expects(:write).returns(3)
|
|
|
|
DsAdmin::Model.storage = storage_mock
|
|
model.save
|
|
|
|
assert_equal(3, model.id)
|
|
end
|
|
end
|