redis-model-extension 0.3.8 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+