text: 'use strict';
  
  var assert = require('assert');
  var config = require('./lib/config');
  var helper = require('./helper');
  var redis = config.redis;
  
  describe('prefix key names', function () {
  
      helper.allTests(function (parser, ip, args) {
  
          describe('using ' + parser + ' and ' + ip, function () {
              var client = null;
  
              beforeEach(function (done) {
                  client = redis.createClient({
                      parser: parser,
                      prefix: 'test:prefix:'
                  });
                  client.on('ready', function () {
                      client.flushdb(function (err) {
                          done(err);
                      });
                  });
              });
  
              afterEach(function () {
                  client.end(true);
              });
  
              it('auto prefix set / get', function (done) {
                  client.set('key', 'value', function (err, reply) {
                      assert.strictEqual(reply, 'OK');
                  });
                  client.get('key', function (err, reply) {
                      assert.strictEqual(reply, 'value');
                  });
                  client.getrange('key', 1, -1, function (err, reply) {
                      assert.strictEqual(reply, 'alue');
                      assert.strictEqual(err, null);
                  });
                  client.exists('key', function (err, res) {
                      assert.strictEqual(res, 1);
                  });
                  client.exists('test:prefix:key', function (err, res) {
                      // The key will be prefixed itself
                      assert.strictEqual(res, 0);
                  });
                  client.mset('key2', 'value2', 'key3', 'value3');
                  client.keys('*', function (err, res) {
                      assert.strictEqual(res.length, 3);
                      assert(res.indexOf('test:prefix:key') !== -1);
                      assert(res.indexOf('test:prefix:key2') !== -1);
                      assert(res.indexOf('test:prefix:key3') !== -1);
                      done();
                  });
              });
  
              it('auto prefix set / get with .batch', function (done) {
                  var batch = client.batch();
                  batch.set('key', 'value', function (err, reply) {
                      assert.strictEqual(reply, 'OK');
                  });
                  batch.get('key', function (err, reply) {
                      assert.strictEqual(reply, 'value');
                  });
                  batch.getrange('key', 1, -1, function (err, reply) {
                      assert.strictEqual(reply, 'alue');
                      assert.strictEqual(err, null);
                  });
                  batch.exists('key', function (err, res) {
                      assert.strictEqual(res, 1);
                  });
                  batch.exists('test:prefix:key', function (err, res) {
                      // The key will be prefixed itself
                      assert.strictEqual(res, 0);
                  });
                  batch.mset('key2', 'value2', 'key3', 'value3');
                  batch.keys('*', function (err, res) {
                      assert.strictEqual(res.length, 3);
                      assert(res.indexOf('test:prefix:key') !== -1);
                      assert(res.indexOf('test:prefix:key2') !== -1);
                      assert(res.indexOf('test:prefix:key3') !== -1);
                  });
                  batch.exec(done);
              });
  
              it('auto prefix set / get with .multi', function (done) {
                  var multi = client.multi();
                  multi.set('key', 'value', function (err, reply) {
                      assert.strictEqual(reply, 'OK');
                  });
                  multi.get('key', function (err, reply) {
                      assert.strictEqual(reply, 'value');
                  });
                  multi.getrange('key', 1, -1, function (err, reply) {
                      assert.strictEqual(reply, 'alue');
                      assert.strictEqual(err, null);
                  });
                  multi.exists('key', function (err, res) {
                      assert.strictEqual(res, 1);
                  });
                  multi.exists('test:prefix:key', function (err, res) {
                      // The key will be prefixed itself
                      assert.strictEqual(res, 0);
                  });
                  multi.mset('key2', 'value2', 'key3', 'value3');
                  multi.keys('*', function (err, res) {
                      assert.strictEqual(res.length, 3);
                      assert(res.indexOf('test:prefix:key') !== -1);
                      assert(res.indexOf('test:prefix:key2') !== -1);
                      assert(res.indexOf('test:prefix:key3') !== -1);
                  });
                  multi.exec(done);
              });
  
          });
      });
  });
  