function testInc() { $scope = __FUNCTION__; Redis::config(array('format' => $scope)); // simplest call $expected = array('bar' => 1); $this->assertEqual($expected, Stats::inc('foo', 'bar')); $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:foo")); // simplest call $expected = array('bar' => 2); $this->assertEqual($expected, Stats::inc('foo', 'bar')); $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:foo")); // simple call, adding second field $expected = array('bar' => 2, 'baz' => 1); $this->assertEqual(array('baz' => 1), Stats::inc('foo', 'baz')); $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:foo")); // simple call, increment second value $expected = array('bar' => 2, 'baz' => 2); $this->assertEqual(array('baz' => 2), Stats::inc('foo', 'baz')); $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:foo")); // multiple at once as flat array // would be cool to have! // $expected = array('field1' => 1, 'field2' => 1); // $this->assertEqual($expected, Stats::inc('multiFlat', array('field1', 'field2'))); // $this->assertEqual($expected, $this->redis->hGetAll("$scope:stats:global:multiFlat")); // multiple at once $expected = array('field1' => 1, 'field2' => 1); $this->assertEqual($expected, Stats::inc('multi', array('field1' => 1, 'field2' => 1))); $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:multi")); // incrementing multiple at once $expected = array('field1' => 2, 'field2' => 3); $this->assertEqual($expected, Stats::inc('multi', array('field1' => 1, 'field2' => 2))); $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:multi")); // multiple at once, with plain bucket $expected = array('field1' => 1, 'field2' => 1); $this->assertEqual($expected, Stats::inc('withBucket', $expected, 'prefix')); $this->assertEqual(array(), $this->redis->hGetAll("{$scope}:stats:global:withBucket")); $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:prefix:withBucket")); // multiple buckets at once $data = array('field1' => 1, 'field2' => 1); $expected = array('prefix1' => $data, 'prefix2' => $data); $this->assertEqual($expected, Stats::inc('multiBucket', $data, array('prefix1', 'prefix2'))); $this->assertEqual(array(), $this->redis->hGetAll("{$scope}:stats:global:multiBucket")); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:prefix1:multiBucket")); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:prefix2:multiBucket")); // multiple at once, with one bucket in array $expected = array('field1' => 1, 'field2' => 1); $this->assertEqual($expected, Stats::inc('withBucketArray', $expected, array('user' => 'foo'))); $this->assertEqual(array(), $this->redis->hGetAll("{$scope}:stats:global:withBucketArray")); $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:user:foo:withBucketArray")); // multiple buckets as associated array $data = array('field1' => 1, 'field2' => 1); $expected = array('user:foo' => $data, 'year:2013' => $data); $this->assertEqual($expected, Stats::inc('multiBucketArray', $data, array('user' => 'foo', 'year' => '2013'))); $this->assertEqual(array(), $this->redis->hGetAll("{$scope}:stats:global:multiBucketArray")); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:user:foo:multiBucketArray")); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:year:2013:multiBucketArray")); // multiple buckets as associated array with global $data = array('field1' => 2, 'field2' => 2); $expected = array('global' => $data, 'prefix1' => $data, 'prefix2' => $data); $result = Stats::inc('multiBucketWithGlobal', $data, array('global', 'prefix1', 'prefix2')); $this->assertEqual($expected, $result); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:global:multiBucketWithGlobal")); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:prefix1:multiBucketWithGlobal")); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:prefix2:multiBucketWithGlobal")); $data = array('field1' => 3, 'field2' => 3); $expected = array('global' => $data, 'user:foo' => $data, 'year:2013' => $data); $result = Stats::inc('multiBucketArrayWithGlobal', $data, array('global', 'user' => 'foo', 'year' => '2013')); $this->assertEqual($expected, $result); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:global:multiBucketArrayWithGlobal")); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:user:foo:multiBucketArrayWithGlobal")); $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:year:2013:multiBucketArrayWithGlobal")); }