Skip to content

Commit

Permalink
Merge pull request BedrockStreaming#29 from charrisbc/add-setnx-support
Browse files Browse the repository at this point in the history
Adds setnx support and some accompanying tests.
  • Loading branch information
fabdsp committed Jun 19, 2014
2 parents bc1aeec + beb991d commit e93791b
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ Redis command | Description
**DECRBY** *key* *decrement* | Decrements the integer value of a key by `decrement` value
**SET** *key* *value* | Sets the string value of a key
**SETEX** *key* *seconds* *value* | Sets the value and expiration of a key
**SETNX** *key* *value* | Sets key to hold value if key does not exist
**SADD** *key* *member* | Adds one member to a set
**SISMEMBER** *key* *member* | Determines if a member is in a set
**SMEMBERS** *key* | Gets all the members in a set
Expand Down
11 changes: 10 additions & 1 deletion src/M6Web/Component/RedisMock/RedisMock.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@ public function setex($key, $seconds, $value)
return $this->set($key, $value, $seconds);
}

public function setnx($key, $value)
{
if (!$this->get($key)) {
$this->set($key, $value);
return $this->returnPipedInfo(1);
}
return $this->returnPipedInfo(0);
}

public function ttl($key)
{
if (!array_key_exists($key, $this->data) || $this->deleteOnTtlExpired($key)) {
Expand Down Expand Up @@ -871,4 +880,4 @@ protected function deleteOnTtlExpired($key)

return false;
}
}
}
28 changes: 27 additions & 1 deletion tests/units/RedisMock.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,31 @@ public function testSetGetDelExists()
$this->assert
->boolean($redisMock->exists('test'))
->isFalse();

//setnx
$this->assert
->integer($redisMock->setnx('test-setnx', 'lala'))
->isEqualTo(1)
->integer($redisMock->setnx('test-setnx', 'lala2'))
->isEqualTo(0)
->integer($redisMock->del('test-setnx'))
->isEqualTo(1)
->integer($redisMock->setnx('test-setnx', 'lala'))
->isEqualTo(1)
->string($redisMock->type('test-setnx'))
->isEqualTo('string');

//setnx with expire
$this->assert
->integer($redisMock->setnx("test-setnx-expire", "lala"))
->isEqualTo(1)
->integer($redisMock->expire("test-setnx-expire", 1))
->isEqualTo(1);
sleep(2);
$this->assert
->integer($redisMock->setnx("test-setnx-expire", "lala"))
->isEqualTo(1);

}

public function testExpireTtl()
Expand Down Expand Up @@ -1176,6 +1201,7 @@ public function testPipeline()
->lpop('test')
->rpop('test')
->expire('test', 1)
->setnx("test123", "somethingelse")
->execute()
)
->isInstanceOf('M6Web\Component\RedisMock\RedisMock');
Expand Down Expand Up @@ -1344,4 +1370,4 @@ public function testLrange()
->isEmpty()
;
}
}
}

0 comments on commit e93791b

Please sign in to comment.