redis-model-extension 0.3.8 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/Gemfile +4 -1
  2. data/README.markdown +62 -27
  3. data/Rakefile +0 -6
  4. data/VERSION +1 -1
  5. data/lib/redis-model-extension/attributes.rb +38 -0
  6. data/lib/redis-model-extension/autoincrement_id.rb +38 -0
  7. data/lib/redis-model-extension/config.rb +67 -0
  8. data/lib/redis-model-extension/get_find.rb +146 -0
  9. data/lib/redis-model-extension/initialize.rb +179 -0
  10. data/lib/redis-model-extension/old_initialize.rb +103 -0
  11. data/lib/redis-model-extension/redis_key.rb +119 -0
  12. data/lib/redis-model-extension/save_destroy.rb +104 -0
  13. data/lib/redis-model-extension/store_keys.rb +34 -0
  14. data/lib/redis-model-extension/validation.rb +84 -0
  15. data/lib/redis-model-extension/value_transform.rb +51 -0
  16. data/lib/redis-model-extension.rb +52 -320
  17. data/lib/redis-model.rb +14 -0
  18. data/redis-model-extension.gemspec +40 -6
  19. data/test/helper.rb +17 -2
  20. data/test/models.rb +83 -0
  21. data/test/redis_model_old/test_redis_model_old_config.rb +218 -0
  22. data/test/redis_model_parts/test_attributes.rb +34 -0
  23. data/test/redis_model_parts/test_autoincrement_id.rb +86 -0
  24. data/test/redis_model_parts/test_dynamic_alias.rb +147 -0
  25. data/test/redis_model_parts/test_get_find.rb +111 -0
  26. data/test/redis_model_parts/test_hooks.rb +36 -0
  27. data/test/redis_model_parts/test_initialize.rb +46 -0
  28. data/test/redis_model_parts/test_redis_key.rb +119 -0
  29. data/test/redis_model_parts/test_save_destroy.rb +102 -0
  30. data/test/redis_model_parts/test_validation.rb +72 -0
  31. data/test/redis_model_parts/test_variable_types.rb +91 -0
  32. data/test/test_redis-model-extension.rb +38 -200
  33. data/test/test_string_to_bool.rb +30 -0
  34. metadata +90 -32
@@ -0,0 +1,218 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class RedisModelOldConfigTest < Test::Unit::TestCase
4
+ context "Old RedisModel config" do
5
+ setup do
6
+ RedisModelExtension::Database.redis.flushdb
7
+
8
+ @args = {"integer" => 12345, :string => "foo", :symbol => :bar, :boolean => true, :array => [1,2,3], :hash => {"foo"=>"bar", "test" => 2}}
9
+ @test_model = TestOldRedisModel.new(@args)
10
+ @test_model_partial = TestOldRedisModel.new(:integer => 12345, :string => "foo")
11
+ end
12
+
13
+ should "have same configuration" do
14
+ assert_equal TestOldRedisModel.conf, TestOldRedisModel::REDIS_MODEL_CONF, "Same configuration"
15
+ end
16
+
17
+ context "define methods" do
18
+ should "be accessible" do
19
+ assert @test_model.respond_to?(:integer)
20
+ assert @test_model.respond_to?(:boolean)
21
+ assert @test_model.respond_to?(:string)
22
+ assert @test_model.respond_to?(:symbol)
23
+ end
24
+
25
+ should "get valid arguments" do
26
+ assert_equal @test_model.integer, 12345
27
+ assert_equal @test_model.string, "foo"
28
+ assert_equal @test_model.symbol, :bar
29
+ assert_equal @test_model.boolean, true
30
+ assert_equal @test_model.array, [1,2,3]
31
+ assert_equal @test_model.hash, {"foo"=>"bar", "test" => 2}
32
+ end
33
+
34
+ should "return valid exists?" do
35
+ assert_equal @test_model.integer?, true
36
+ assert_equal @test_model.string?, true
37
+ assert_equal @test_model.symbol?, true
38
+ assert_equal @test_model.boolean?, true
39
+ assert_equal @test_model.array?, true
40
+ assert_equal @test_model.hash?, true
41
+
42
+ assert_equal @test_model_partial.integer?, true
43
+ assert_equal @test_model_partial.string?, true
44
+ assert_equal @test_model_partial.symbol?, false
45
+ assert_equal @test_model_partial.boolean?, false
46
+ assert_equal @test_model_partial.hash?, false
47
+ assert_equal @test_model_partial.array?, false
48
+ end
49
+
50
+ should "be assign new values" do
51
+ @test_model.integer = 54321
52
+ @test_model.string = "bar"
53
+ @test_model.symbol = :foo
54
+ @test_model.boolean = false
55
+ @test_model.array = [4,5,6]
56
+ @test_model.hash = {"bar" => "foo"}
57
+ assert_equal @test_model.integer, 54321
58
+ assert_equal @test_model.string, "bar"
59
+ assert_equal @test_model.symbol, :foo
60
+ assert_equal @test_model.boolean, false
61
+ assert_equal @test_model.array, [4,5,6]
62
+ assert_equal @test_model.hash, {"bar" => "foo"}
63
+ end
64
+ end
65
+
66
+ context "redis key" do
67
+ should "generate right key" do
68
+ assert_equal @test_model.redis_key, "#{TestOldRedisModel.to_s.underscore}:key:foo"
69
+ assert_equal TestOldRedisModel.generate_key(@args), "#{TestOldRedisModel.to_s.underscore}:key:foo"
70
+ end
71
+ should "generate right key alias" do
72
+ assert_equal @test_model.redis_alias_key(:token), "#{TestOldRedisModel.to_s.underscore}:alias:token:bar"
73
+ assert_equal TestOldRedisModel.generate_alias_key(:token, @args), "#{TestOldRedisModel.to_s.underscore}:alias:token:bar"
74
+ end
75
+ end
76
+
77
+ context "after initialize" do
78
+ should "clear input arguments" do
79
+ test_model = TestOldRedisModel.new(@args.merge({:foor => :bar, :not_in_fields => "foo"}))
80
+ assert_same_elements test_model.args, @args.symbolize_keys!
81
+ end
82
+ end
83
+
84
+ context "validation" do
85
+
86
+ should "return errors after valid?" do
87
+ test = TestOldRedisModel.new()
88
+ assert !test.valid?, "shouldn't be valid"
89
+ assert_equal test.errors.messages.size, 2, "should have 2 error (2 required field)"
90
+ end
91
+
92
+ should "not raise exeption on invalid initialize" do
93
+ assert_nothing_raised { TestOldRedisModel.new() }
94
+ end
95
+
96
+ should "return false on save" do
97
+ test_model = TestOldRedisModel.new()
98
+ assert !test_model.save, "return false on save"
99
+ assert test_model.errors.any?, "have any error"
100
+ end
101
+ end
102
+
103
+ context "updating" do
104
+ setup do
105
+ @new_args = {:integer => 123457, :string => "bar", :symbol => :foo, :boolean => false}
106
+ end
107
+
108
+ should "change attributes" do
109
+ @test_model.update @new_args
110
+ assert_equal @test_model.integer, @new_args[:integer]
111
+ assert_equal @test_model.string, @new_args[:string]
112
+ assert_equal @test_model.symbol, @new_args[:symbol]
113
+ assert_equal @test_model.boolean, @new_args[:boolean]
114
+ end
115
+
116
+ should "ignore unknown attributes and other normaly update" do
117
+ @test_model.update @new_args.merge(:unknown => "attribute")
118
+ assert_equal @test_model.integer, @new_args[:integer]
119
+ assert_equal @test_model.string, @new_args[:string]
120
+ assert_equal @test_model.symbol, @new_args[:symbol]
121
+ assert_equal @test_model.boolean, @new_args[:boolean]
122
+ end
123
+
124
+ end
125
+
126
+ context "saving" do
127
+ setup do
128
+ @test_model.save
129
+ end
130
+
131
+ should "be saved and then change of variable included in key should rename it in redis!" do
132
+ assert_equal RedisModelExtension::Database.redis.keys("*").size, 2 #including key and alias
133
+ @test_model.string = "change_of_strging"
134
+ @test_model.save
135
+ assert_equal RedisModelExtension::Database.redis.keys("*").size, 2 #including key and alias
136
+ end
137
+
138
+ should "have same elements after get" do
139
+ @getted_model = TestOldRedisModel.get(@args)
140
+ assert_equal @getted_model.integer, @test_model.integer
141
+ assert_equal @getted_model.string, @test_model.string
142
+ assert_equal @getted_model.symbol, @test_model.symbol
143
+ assert_equal @getted_model.boolean, @test_model.boolean
144
+ end
145
+
146
+ should "have same elements after get and to_arg" do
147
+ @getted_model = TestOldRedisModel.get(@args)
148
+ assert_same_elements @getted_model.to_arg.to_json.split(","), @args.to_json.split(",")
149
+ end
150
+
151
+ context "alias" do
152
+ should "be getted by alias" do
153
+ @getted_model = TestOldRedisModel.get_by_alias(:token ,@args)
154
+ assert_equal @getted_model.integer, @test_model.integer
155
+ assert_equal @getted_model.string, @test_model.string
156
+ assert_equal @getted_model.symbol, @test_model.symbol
157
+ assert_equal @getted_model.boolean, @test_model.boolean
158
+ end
159
+
160
+ should "be getted after change in alias" do
161
+ getted_model = TestOldRedisModel.get_by_alias(:token ,@args)
162
+ getted_model.symbol = "Test_token"
163
+ getted_model.save
164
+ assert_equal getted_model.integer, TestOldRedisModel.get_by_alias(:token ,:symbol => "Test_token").integer
165
+ end
166
+ end
167
+ end
168
+
169
+ context "without rejected nil values on save" do
170
+ setup do
171
+ class NilTestOldRedisModel
172
+ REDIS_MODEL_CONF = {
173
+ :fields => {
174
+ :integer => :to_i,
175
+ :string => :to_s,
176
+ },
177
+ :required => [:string],
178
+ :redis_key => [:string],
179
+ :redis_aliases => {},
180
+ :reject_nil_values => false
181
+ }
182
+ include RedisModel
183
+ initialize_redis_model_methods REDIS_MODEL_CONF
184
+ end
185
+ @args = {integer: 100, string: "test"}
186
+ @nil_test_model = NilTestOldRedisModel.new(@args)
187
+ end
188
+
189
+ should "save nil values" do
190
+ #on initialize
191
+ assert_equal @nil_test_model.integer, 100
192
+ assert_equal @nil_test_model.string, "test"
193
+ @nil_test_model.save
194
+
195
+ #after find
196
+ founded = NilTestOldRedisModel.get(@args)
197
+ assert_equal founded.integer, 100
198
+ assert_equal founded.string, "test"
199
+
200
+ #set integer to nil
201
+ founded.integer = nil
202
+ assert_equal founded.integer, nil
203
+ #perform save
204
+ founded.save
205
+
206
+ #after second find
207
+ founded = NilTestOldRedisModel.get(@args)
208
+ assert_equal founded.integer, nil
209
+ assert_equal founded.string, "test"
210
+
211
+ end
212
+
213
+ should "have same configuration" do
214
+ assert_equal NilTestOldRedisModel.conf, NilTestOldRedisModel::REDIS_MODEL_CONF, "Same configuration"
215
+ end
216
+ end
217
+ end
218
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class AttributesTest < Test::Unit::TestCase
4
+ context "Attributes" do
5
+ setup do
6
+ @time = Time.now
7
+ @args = {
8
+ "integer" => 12345,
9
+ :string => "foo",
10
+ :symbol => :bar,
11
+ :boolean => true,
12
+ :array => [1,2,3],
13
+ :hash => {"foo"=>"bar", "test" => 2},
14
+ :time => @time,
15
+ :date => Date.today,
16
+ :float => 12.32,
17
+ }
18
+ @test_model = TestRedisModel.new(@args)
19
+ end
20
+
21
+ context "after initialize" do
22
+ should "clear input arguments" do
23
+ test_model = TestRedisModel.new(@args.merge({:foor => :bar, :not_in_fields => "foo"}))
24
+ assert_same_elements test_model.args, @args.symbolize_keys
25
+ end
26
+ end
27
+
28
+ should "should create valid to_json" do
29
+ #keys in json are in different order, just spliting by separator (comma) and then validating
30
+ assert_same_elements @test_model.to_json.split(","), @args.to_json.split(",")
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,86 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class RedisModelAutoincrementTest < Test::Unit::TestCase
4
+ context "Autoincrement" do
5
+
6
+ setup do
7
+ RedisModelExtension::Database.redis.flushdb
8
+ @args = {
9
+ name: "Author",
10
+ email: "ondrej@bartas.cz"
11
+ }
12
+ end
13
+
14
+ context "without redis_key specified" do
15
+
16
+ should "have redis_key with id" do
17
+ assert_equal AutoincrementNotSet.redis_key_config, [:id]
18
+ assert AutoincrementNotSet.new.respond_to?(:id), "get method"
19
+ assert AutoincrementNotSet.new.respond_to?(:"id?"), "exists? method"
20
+ assert !AutoincrementNotSet.new.respond_to?(:"id="), "set method"
21
+ end
22
+
23
+ should "be valid?" do
24
+ assert AutoincrementNotSet.new(@args).valid?
25
+ end
26
+
27
+ end
28
+
29
+ context "with redis_key specified" do
30
+
31
+ should "have redis_key with id" do
32
+ assert_equal AutoincrementSetRedisKey.redis_key_config, [:id]
33
+ assert AutoincrementSetRedisKey.new.respond_to?(:id), "get method"
34
+ assert AutoincrementSetRedisKey.new.respond_to?(:"id?"), "exists? method"
35
+ assert !AutoincrementSetRedisKey.new.respond_to?(:"id="), "set method"
36
+ end
37
+
38
+ should "be valid?" do
39
+ assert AutoincrementSetRedisKey.new(@args).valid?
40
+ end
41
+
42
+ should "after save have id" do
43
+ saved_instance = AutoincrementSetRedisKey.new(@args)
44
+ saved_instance.save
45
+ assert_equal saved_instance.id, 1, "Should be first id 1"
46
+ end
47
+
48
+ should "be incremented" do
49
+ assert_equal AutoincrementSetRedisKey.create(@args).id, 1, "First should have id 1"
50
+ assert_equal AutoincrementSetRedisKey.create(@args).id, 2, "First should have id 2"
51
+ assert_equal AutoincrementSetRedisKey.create(@args).id, 3, "First should have id 3"
52
+ assert_equal AutoincrementSetRedisKey.create(@args).id, 4, "First should have id 4"
53
+ end
54
+
55
+ should "be getted by directly id" do
56
+ saved_instance = AutoincrementSetRedisKey.new(@args)
57
+ saved_instance.save
58
+ assert getted_instance = AutoincrementSetRedisKey.get(saved_instance.id), "should be getted by id: #{saved_instance.id}"
59
+ assert_same_elements getted_instance.to_arg.to_json.split(","), saved_instance.to_arg.to_json.split(",")
60
+ end
61
+
62
+ should "be founded by directly id" do
63
+ saved_instance = AutoincrementSetRedisKey.new(@args)
64
+ saved_instance.save
65
+ assert getted_instances = AutoincrementSetRedisKey.find(saved_instance.id), "should be getted by id: #{saved_instance.id}"
66
+ assert_equal getted_instances.size, 1, "should be array with one element"
67
+ getted_instance = getted_instances.first
68
+ assert_same_elements getted_instance.to_arg.to_json.split(","), saved_instance.to_arg.to_json.split(",")
69
+ end
70
+
71
+ should "not enable to set id unless id exists" do
72
+ assert_raises ArgumentError do
73
+ AutoincrementSetRedisKey.new(@args.merge(:id => 10))
74
+ end
75
+ saved_instance = AutoincrementSetRedisKey.new(@args)
76
+ saved_instance.save
77
+ assert_nothing_raised do
78
+ AutoincrementSetRedisKey.new(@args.merge(:id => saved_instance.id))
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+
85
+ end
86
+ end
@@ -0,0 +1,147 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class DynamicAliasTest < Test::Unit::TestCase
4
+ context "Dynamic alias" do
5
+ setup do
6
+ RedisModelExtension::Database.redis.flushdb
7
+ @args = {
8
+ :name => "Foo",
9
+ :items => {
10
+ :bar => "test",
11
+ :foobar => "test2",
12
+ },
13
+ :items_order => [:foobar, :bar],
14
+ }
15
+ @dynamic_alias = DynamicAlias.new(@args)
16
+ end
17
+
18
+ context "class" do
19
+ context "redis key" do
20
+
21
+ should "be merged alias key + custom key" do
22
+ assert_equal DynamicAlias.generate_alias_key(:items_with_name, @args), "dynamic_alias:alias:items_with_name:Foo:test2:test"
23
+ end
24
+
25
+ should "validate redis_alias_key" do
26
+ assert DynamicAlias.valid_alias_key?(:items_with_name, @args), "full valid args"
27
+ assert !DynamicAlias.valid_alias_key?(:items_with_name, :name => "Test"), "only main fields"
28
+ assert !DynamicAlias.valid_alias_key?(:items_with_name, :items_order => [:foobar]), "only fields order"
29
+ assert !DynamicAlias.valid_alias_key?(:items_with_name, :items_order => [:foobar], :items => {foobar: "test"}), "only fields order & items"
30
+ assert !DynamicAlias.valid_alias_key?(:items_with_name), "no args"
31
+ end
32
+
33
+ end
34
+ end
35
+
36
+ context "instance" do
37
+ context "redis key" do
38
+
39
+ should "return valid key" do
40
+ assert_equal DynamicAlias.new(@args).redis_alias_key(:items_with_name), "dynamic_alias:alias:items_with_name:Foo:test2:test"
41
+ end
42
+
43
+ should "validate key" do
44
+ dyn_alias = DynamicAlias.new(@args)
45
+ assert_equal dyn_alias.valid_alias_key?(:items_with_name), true
46
+ dyn_alias.items_order = nil
47
+ assert_equal dyn_alias.valid_alias_key?(:items_with_name), false
48
+ end
49
+
50
+ end
51
+ end
52
+
53
+ context "saving & destroy" do
54
+ setup do
55
+ @dynamic_alias.save
56
+ @redis_key = @dynamic_alias.redis_key
57
+ @redis_dynamic_alias_key = @dynamic_alias.redis_alias_key(:items_with_name)
58
+ end
59
+
60
+ should "be saved and then change of variable included in key should rename it in redis!" do
61
+ before = RedisModelExtension::Database.redis.keys("*").size
62
+ assert @dynamic_alias.alias_exists?(:items_with_name), "Dynamic alias should exists"
63
+ @dynamic_alias.name = "change_of_string"
64
+ @dynamic_alias.save
65
+ assert_equal RedisModelExtension::Database.redis.keys("*").size, before, "after update there should be same number of keys" #including key and alias
66
+ end
67
+
68
+ should "remove key and aliases" do
69
+ before = RedisModelExtension::Database.redis.keys("*").size
70
+ @dynamic_alias.destroy!
71
+ assert_equal RedisModelExtension::Database.redis.keys("*").size, before-2 #including key and alias
72
+ end
73
+
74
+ should "destroy!" do
75
+ pp RedisModelExtension::Database.redis.keys("*")
76
+ @dynamic_alias.destroy!
77
+ assert_equal @dynamic_alias.exists?, false, "Should not exists"
78
+ assert_equal DynamicAlias.exists?(@args.merge(:id => @dynamic_alias.id)), false, "Should not exist by class method"
79
+ end
80
+
81
+ end
82
+
83
+
84
+ context "find & get" do
85
+
86
+ setup do
87
+ @dynamic_alias.save
88
+ end
89
+
90
+ should "be getted by dynamic alias" do
91
+ @getted_model = DynamicAlias.get_by_alias(:items_with_name, @args)
92
+ assert_not_nil @getted_model, "Should return model"
93
+ assert_equal @getted_model.name, @dynamic_alias.name
94
+ assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
95
+ end
96
+
97
+ should "be getted by get_by_name_of_alias" do
98
+ @getted_model = DynamicAlias.get_by_items_with_name(@args)
99
+ assert_not_nil @getted_model, "Should return model"
100
+ assert_equal @getted_model.name, @dynamic_alias.name
101
+ assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
102
+ end
103
+
104
+ should "be find by dynamic alias" do
105
+ @getted_models = DynamicAlias.find_by_alias(:items_with_name, :items => {:bar => "test"})
106
+ assert_equal @getted_models.size, 1, "Should be only one with alias"
107
+
108
+ @getted_models = DynamicAlias.find_by_alias(:items_with_name, @args)
109
+ assert_equal @getted_models.size, 1, "Should be find by get by alias full args"
110
+
111
+ @getted_model = @getted_models.first
112
+ assert_equal @getted_model.name, @dynamic_alias.name
113
+ assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
114
+ end
115
+
116
+ should "be found by find_by_name_of_alias" do
117
+ @getted_models = DynamicAlias.find_by_items_with_name(:items => {:bar => "test"})
118
+ assert_equal @getted_models.size, 1, "Should be only one with alias"
119
+
120
+ @getted_models = DynamicAlias.find_by_items_with_name(@args)
121
+ assert_equal @getted_models.size, 1, "Should be find by get by alias full args"
122
+
123
+ @getted_model = @getted_models.first
124
+ assert_equal @getted_model.name, @dynamic_alias.name
125
+ assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
126
+ end
127
+
128
+ should "be find all by dynamic alias" do
129
+ @getted_models = DynamicAlias.find_by_alias(:items_with_name ,{})
130
+ assert_equal @getted_models.size, 1, "Should be only one with alias"
131
+ @getted_model = @getted_models.first
132
+ assert_equal @getted_model.name, @dynamic_alias.name
133
+ assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
134
+ end
135
+
136
+ should "be getted after change in alias" do
137
+ @getted_model = DynamicAlias.get_by_alias(:items_with_name ,@args)
138
+ assert_not_nil @getted_model, "Should return model"
139
+ @getted_model.items[:bar] = "Test_bar"
140
+ @getted_model.save
141
+
142
+ assert_equal DynamicAlias.get_by_alias(:items_with_name ,@getted_model.to_arg).name, @getted_model.name
143
+ end
144
+ end
145
+
146
+ end
147
+ end
@@ -0,0 +1,111 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class GetFindTest < Test::Unit::TestCase
4
+ context "Get & Find" do
5
+ setup do
6
+ RedisModelExtension::Database.redis.flushdb
7
+ @time = Time.now
8
+ @args = {
9
+ "integer" => 12345,
10
+ :string => "foo",
11
+ :symbol => :bar,
12
+ :boolean => true,
13
+ :array => [1,2,3],
14
+ :hash => {"foo"=>"bar", "test" => 2},
15
+ :time => @time,
16
+ :date => Date.today,
17
+ :float => 12.32
18
+ }
19
+ @test_model = TestRedisModel.new(@args)
20
+ @test_model.save
21
+ end
22
+
23
+ context "main object" do
24
+
25
+ should "be getted by redis_key" do
26
+ @getted_model = TestRedisModel.get_by_redis_key(@test_model.redis_key)
27
+ assert_equal @getted_model.integer, @test_model.integer
28
+ assert_equal @getted_model.string, @test_model.string
29
+ assert_equal @getted_model.symbol, @test_model.symbol
30
+ assert_equal @getted_model.boolean, @test_model.boolean
31
+ end
32
+
33
+ should "return nil on triyng to get model by redis key without all valid variables (or nonexisting)" do
34
+ @test_model.string = nil
35
+ assert_nil TestRedisModel.get_by_redis_key(@test_model.redis_key)
36
+ end
37
+
38
+ should "be find by all" do
39
+ @getted_models = TestRedisModel.all
40
+ assert_equal @getted_models.size, 1, "Should be only one"
41
+ end
42
+
43
+ should "be find by args" do
44
+ @getted_models = TestRedisModel.find(:string => @args[:string])
45
+ assert_equal @getted_models.size, 1, "Should be only one"
46
+ end
47
+
48
+ should "be find by args zero" do
49
+ @getted_models = TestRedisModel.find(:string => "nonexisting string")
50
+ assert_equal @getted_models, [], "Should be empty array"
51
+ end
52
+
53
+ end
54
+
55
+ context "alias" do
56
+ should "exists" do
57
+ assert @test_model.alias_exists?(:token)
58
+ end
59
+
60
+ should "be getted by alias" do
61
+ @getted_model = TestRedisModel.get_by_alias(:token, @args)
62
+ assert_equal @getted_model.integer, @test_model.integer
63
+ assert_equal @getted_model.string, @test_model.string
64
+ assert_equal @getted_model.symbol, @test_model.symbol
65
+ assert_equal @getted_model.boolean, @test_model.boolean
66
+ end
67
+
68
+ should "be find by alias" do
69
+ @getted_models = TestRedisModel.find_by_alias(:token, :symbol => :bar)
70
+ assert_equal @getted_models.size, 1, "Should be only one with alias"
71
+ @getted_model = @getted_models.first
72
+ assert_equal @getted_model.integer, @test_model.integer
73
+ assert_equal @getted_model.string, @test_model.string
74
+ assert_equal @getted_model.symbol, @test_model.symbol
75
+ assert_equal @getted_model.boolean, @test_model.boolean
76
+ end
77
+
78
+ should "be find by find_by_alias_name" do
79
+ @getted_models = TestRedisModel.find_by_token(:symbol => :bar)
80
+ assert_equal @getted_models.size, 1, "Should be only one with alias"
81
+ @getted_model = @getted_models.first
82
+ assert_equal @getted_model.integer, @test_model.integer
83
+ end
84
+
85
+ should "be find all by alias" do
86
+ @getted_models = TestRedisModel.find_by_alias(:token ,{})
87
+ assert_equal @getted_models.size, 1, "Should be only one with alias"
88
+ @getted_model = @getted_models.first
89
+ assert_equal @getted_model.integer, @test_model.integer
90
+ assert_equal @getted_model.string, @test_model.string
91
+ assert_equal @getted_model.symbol, @test_model.symbol
92
+ assert_equal @getted_model.boolean, @test_model.boolean
93
+ end
94
+
95
+ should "be find all by find_by_name_of_alais" do
96
+ @getted_models = TestRedisModel.find_by_token({})
97
+ assert_equal @getted_models.size, 1, "Should be only one with alias"
98
+ @getted_model = @getted_models.first
99
+ assert_equal @getted_model.integer, @test_model.integer
100
+ end
101
+
102
+ should "be getted after change in alias" do
103
+ getted_model = TestRedisModel.get_by_alias(:token ,@args)
104
+ getted_model.symbol = "Test_token"
105
+ getted_model.save
106
+ assert_equal getted_model.integer, TestRedisModel.get_by_alias(:token ,:symbol => "Test_token").integer
107
+ end
108
+ end
109
+
110
+ end
111
+ end
@@ -0,0 +1,36 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class HooksTest < Test::Unit::TestCase
4
+ context "Hooks" do
5
+
6
+ should "fire before_create hooks" do
7
+ WithCallbacks.any_instance.expects(:before_create_method)
8
+
9
+ WithCallbacks.create name: 'Callbacks'
10
+ end
11
+
12
+ should "fire both before_create and before_save hooks if defined" do
13
+ WithCallbacks.any_instance.expects(:before_create_method)
14
+ WithCallbacks.any_instance.expects(:before_save_method)
15
+ WithCallbacks.any_instance.expects(:after_save_method)
16
+
17
+ WithCallbacks.create name: 'Callbacks'
18
+ end
19
+
20
+ should "fire before_save hooks" do
21
+ article = WithCallbacks.new name: 'Callbacks'
22
+ article.expects(:before_save_method)
23
+ article.expects(:after_save_method)
24
+ article.expects(:before_create_method)
25
+ article.save
26
+ end
27
+
28
+ should "fire before_destroy hooks" do
29
+ article = WithCallbacks.new name: 'Callbacks'
30
+ article.save
31
+ article.destroy
32
+
33
+ assert article.instance_variable_get(:@destroyed_flag), "should have destroyed flag"
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,46 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class VariableTypesTest < Test::Unit::TestCase
4
+ context "Definition & Types of variables" do
5
+ setup do
6
+ RedisModelExtension::Database.redis.flushdb
7
+
8
+ @test_model = TestRedisModel.new()
9
+ end
10
+
11
+ should "be have accessible fields" do
12
+ assert @test_model.respond_to?(:integer)
13
+ assert @test_model.respond_to?(:string)
14
+ assert @test_model.respond_to?(:boolean)
15
+ assert @test_model.respond_to?(:array)
16
+ assert @test_model.respond_to?(:hash)
17
+ assert @test_model.respond_to?(:time)
18
+ assert @test_model.respond_to?(:date)
19
+ assert @test_model.respond_to?(:float)
20
+ end
21
+
22
+ should "be have setable fields" do
23
+ assert @test_model.respond_to?(:"integer=")
24
+ assert @test_model.respond_to?(:"string=")
25
+ assert @test_model.respond_to?(:"boolean=")
26
+ assert @test_model.respond_to?(:"array=")
27
+ assert @test_model.respond_to?(:"hash=")
28
+ assert @test_model.respond_to?(:"time=")
29
+ assert @test_model.respond_to?(:"date=")
30
+ assert @test_model.respond_to?(:"float=")
31
+ end
32
+
33
+ should "be have field exist?" do
34
+ assert @test_model.respond_to?(:"integer?")
35
+ assert @test_model.respond_to?(:"string?")
36
+ assert @test_model.respond_to?(:"boolean?")
37
+ assert @test_model.respond_to?(:"array?")
38
+ assert @test_model.respond_to?(:"hash?")
39
+ assert @test_model.respond_to?(:"time?")
40
+ assert @test_model.respond_to?(:"date?")
41
+ assert @test_model.respond_to?(:"float?")
42
+ end
43
+
44
+ end
45
+ end
46
+