spec/lib/zermelo/associations/unique_index_spec.rb in zermelo-1.1.0 vs spec/lib/zermelo/associations/unique_index_spec.rb in zermelo-1.2.0
- old
+ new
@@ -1,6 +1,62 @@
require 'spec_helper'
+require 'zermelo/records/redis'
require 'zermelo/associations/unique_index'
-describe Zermelo::Associations::UniqueIndex, :redis => true do
+describe Zermelo::Associations::UniqueIndex do
-end
\ No newline at end of file
+ context 'redis', :redis => true do
+
+ let(:redis) { Zermelo.redis }
+
+ module ZermeloExamples
+ class RedisUniqueIndex
+ include Zermelo::Records::Redis
+ define_attributes :name => :string
+ validates :name, :presence => true
+ unique_index_by :name
+ end
+ end
+
+ it 'adds an entry to a hash indexing an attribute' do
+ example = ZermeloExamples::RedisUniqueIndex.new(:id => '1',
+ :name => 'John Smith')
+ expect(example).to be_valid
+ expect(example.save).to be true
+
+ expect(redis.exists('redis_unique_index::indices:by_name')).to be true
+ expect(redis.hgetall('redis_unique_index::indices:by_name')).to eq('string:John%20Smith' => '1')
+ end
+
+ it 'removes an entry from a hash indexing an attribute' do
+ example = ZermeloExamples::RedisUniqueIndex.new(:id => '1',
+ :name => 'John Smith')
+ example.save
+
+ example_2 = ZermeloExamples::RedisUniqueIndex.new(:id => '2',
+ :name => 'Roger Wilco')
+ example_2.save
+
+ expect(redis.hgetall('redis_unique_index::indices:by_name')).to eq('string:John%20Smith' => '1',
+ 'string:Roger%20Wilco' => '2')
+
+ example.destroy
+
+ expect(redis.hgetall('redis_unique_index::indices:by_name')).to eq({'string:Roger%20Wilco' => '2'})
+ end
+
+ it 'changes an entry in a hash indexing an attribute' do
+ example = ZermeloExamples::RedisUniqueIndex.new(:id => '1',
+ :name => 'John Smith')
+ example.save
+
+ expect(redis.hgetall('redis_unique_index::indices:by_name')).to eq('string:John%20Smith' => '1')
+
+ example.name = 'Jane Jones'
+ example.save
+
+ expect(redis.hgetall('redis_unique_index::indices:by_name')).to eq('string:Jane%20Jones' => '1')
+ end
+
+ end
+
+end