Sha256: a542dde33c3cf9598bb986c1b0742ed234bd2a76a0ebf2fa2d56a403449aa1ec

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

# encoding: utf-8
require 'redis-copy'
require_relative '../spec_helper.rb'

shared_examples_for RedisCopy::KeyEmitter do
  let(:emitter_klass) { described_class }
  let(:redis) { Redis.new(REDIS_OPTIONS) }
  let(:ui) { double.as_null_object }
  let(:instance) { emitter_klass.new(redis, ui)}
  let(:key_count) { 1 }
  let(:keys) { key_count.times.map{|i| i.to_s(16) } }

  before(:each) do
    unless emitter_klass.compatible?(redis)
      pending "#{emitter_klass} not supported in your environment"
    end
    key_count.times.each_slice(50) do |keys|
      kv = keys.map{|x| x.to_s(16)}.zip(keys)
      redis.mset(*kv.flatten)
    end
    ui.stub(:debug).with(anything)
  end
  after(:each) { redis.flushdb }

  context '#keys' do
    let(:key_count) { 64 }
    context 'the result' do
      subject { instance.keys }
      its(:to_a) { should =~ keys }
    end
  end
end

describe RedisCopy::KeyEmitter::Keys do
  it_should_behave_like RedisCopy::KeyEmitter do
    context '#keys' do
      context 'the supplied ui' do
        it 'should get a debug message' do
          ui.should_receive(:debug).
            with(/#{redis.client.id} KEYS \*/).
            exactly(:once)
          instance.keys
        end
        context 'when source has > 10,000 keys' do
          let(:key_count) { 10_001 }
          it 'should ask for confirmation' do
            ui.should_receive(:confirm?) do |confirmation|
              confirmation.should match /\b10,001/
            end
            instance.keys
          end
        end
        context 'when source has <= 10,000 keys' do
          let(:key_count) { 1_000 }
          it 'should not ask for confirmation' do
            ui.should_not_receive(:confirm?)
            instance.keys
          end
        end
      end
    end
  end
end

describe RedisCopy::KeyEmitter::Scan do
  it_should_behave_like RedisCopy::KeyEmitter
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
redis-copy-0.0.6 spec/redis-copy/key-emitter_spec.rb