Skip to content

Commit ec42a11

Browse files
author
Greg Bowler
committed
test: initial tests
1 parent a131a27 commit ec42a11

File tree

3 files changed

+60
-2
lines changed

3 files changed

+60
-2
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/.idea/
2+
/vendor/
3+
.phpunit.result.cache

src/Cache.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
namespace Gt\FileCache;
3+
4+
class Cache {
5+
public function __construct(
6+
private string $path = "cache"
7+
) {
8+
if(!is_dir($path)) {
9+
mkdir($path, 0775, true);
10+
}
11+
}
12+
13+
public function get(string $name, callable $callback):mixed {
14+
$fileName = $this->path . "/$name";
15+
if(file_exists($fileName)) {
16+
return unserialize(file_get_contents($fileName));
17+
}
18+
19+
$value = $callback();
20+
file_put_contents($fileName, serialize($value));
21+
return $value;
22+
}
23+
}

test/phpunit/CacheTest.php

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,42 @@
11
<?php
22
namespace Gt\FileCache\Test;
33

4+
use Gt\FileCache\Cache;
45
use PHPUnit\Framework\TestCase;
56

67
class CacheTest extends TestCase {
7-
public function test():void {
8-
self::assertTrue(true);
8+
public function testGet_expectedValueReturned():void {
9+
$sut = new Cache(sys_get_temp_dir() . "/phpgt-filecache");
10+
$value = "test-value";
11+
$result = $sut->get("test", fn() => $value);
12+
self::assertSame($value, $result);
13+
}
14+
15+
public function testGet_expectedValueReturnedOnMultipleCalls():void {
16+
$sut = new Cache(sys_get_temp_dir() . "/phpgt-filecache");
17+
$value = "test-value";
18+
$result = $sut->get("test", fn() => $value);
19+
self::assertSame($value, $result);
20+
$result = $sut->get("test", fn() => $value);
21+
self::assertSame($value, $result);
22+
}
23+
24+
public function testGet_multipleCallsDoesNotCallbackMultipleTimes():void {
25+
$sut = new Cache(sys_get_temp_dir() . "/phpgt/filecache");
26+
$name = uniqid("test-");
27+
$value = "test-value-123";
28+
$count = 0;
29+
30+
$callback = function()use($value, &$count):string {
31+
$count++;
32+
return $value;
33+
};
34+
$result = $sut->get($name, $callback);
35+
self::assertSame($value, $result);
36+
self::assertSame(1, $count);
37+
38+
$result = $sut->get($name, $callback);
39+
self::assertSame($value, $result);
40+
self::assertSame(1, $count);
941
}
1042
}

0 commit comments

Comments
 (0)