-
Notifications
You must be signed in to change notification settings - Fork 2
/
FileSystemMetadataJournalTest.phpt
99 lines (77 loc) · 3.11 KB
/
FileSystemMetadataJournalTest.phpt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
declare(strict_types = 1);
namespace NepadaTests\FileUploadControl\Storage\Metadata;
use Nepada\FileUploadControl\Storage\FileUploadId;
use Nepada\FileUploadControl\Storage\Metadata\FileSystemMetadataJournal;
use Nepada\FileUploadControl\Storage\Metadata\FileUploadMetadata;
use Nepada\FileUploadControl\Storage\Metadata\FileUploadMetadataAlreadyExistsException;
use Nepada\FileUploadControl\Storage\Metadata\FileUploadMetadataNotFoundException;
use Nepada\FileUploadControl\Utils\NetteFileSystem;
use Nepada\FileUploadControl\Utils\NetteFinder;
use NepadaTests\Environment;
use NepadaTests\TestCase;
use Nette;
use Nette\Utils\Random;
use Tester\Assert;
require_once __DIR__ . '/../../../bootstrap.php';
/**
* @testCase
*/
class FileSystemMetadataJournalTest extends TestCase
{
public function testJournal(): void
{
$journal = $this->createJournal();
$id1 = FileUploadId::fromString('1');
$id2 = FileUploadId::fromString('2');
$id3 = FileUploadId::fromString('3');
$id4 = FileUploadId::fromString('4');
$metadata1 = FileUploadMetadata::fromArray(['size' => 1, 'name' => 'foo']);
$metadata23 = FileUploadMetadata::fromArray(['size' => 2, 'name' => 'foo']);
Assert::same([], $journal->list(), 'journal is initially empty');
$journal->save($id1, $metadata1);
// write with conflicting ID fails
Assert::exception(
function () use ($journal, $id1, $metadata1): void {
$journal->save($id1, $metadata1);
},
FileUploadMetadataAlreadyExistsException::class,
"File upload metadata '1' already exists.",
);
sleep(1);
$journal->save($id3, $metadata23);
// write with the same metadata under different id succeeds
sleep(1);
$journal->save($id2, $metadata23);
Assert::equal([$id1, $id3, $id2], $journal->list(), 'listing stored items');
// delete non-existent id succeeds
$journal->delete($id4);
// reading non-existent id fails
Assert::exception(
function () use ($journal, $id4): void {
$journal->load($id4);
},
FileUploadMetadataNotFoundException::class,
'File upload metadata \'4\' not found.',
);
$journal->delete($id2);
Assert::equal([$id1, $id3], $journal->list(), 'listing stored items');
Assert::equal($metadata1, $journal->load($id1));
Assert::equal($metadata23, $journal->load($id3));
$journal->destroy();
// accessing journal after it was destroyed ends with error
Assert::exception(
function () use ($journal): void {
$journal->list();
},
\Throwable::class,
);
}
private function createJournal(): FileSystemMetadataJournal
{
$directory = Environment::getTempDir() . '/' . Random::generate();
Nette\Utils\FileSystem::createDir($directory);
return new FileSystemMetadataJournal(new NetteFileSystem(), new NetteFinder(), $directory);
}
}
(new FileSystemMetadataJournalTest())->run();