Skip to content

Commit f251306

Browse files
committed
Fix: fix reasons for test failing
1 parent 71929bc commit f251306

File tree

4 files changed

+54
-20
lines changed

4 files changed

+54
-20
lines changed

config/inbox.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55
'public' => env('INBOX_PUBLIC', false),
66
'store' => [
77
'driver' => env('INBOX_STORE_DRIVER', 'file'),
8+
'resolvers' => [
9+
// 'custom' => fn() => new \App\CustomMessageStore,
10+
],
811
'file' => [
912
'path' => env('INBOX_FILE_PATH', storage_path('app/inbox')),
1013
],
1114
],
15+
1216
'retention' => [
1317
'seconds' => (int) env('INBOX_RETENTION', 60 * 60 * 24),
1418
],

src/StoreManager.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,32 @@ class StoreManager
99
{
1010
public function create(): MessageStore
1111
{
12-
$driver = config('mailbox-for-laravel.storage_driver', 'file');
13-
$options = config('mailbox-for-laravel.storage', []);
12+
$driver = config('inbox.store.driver', 'file');
13+
$resolvers = config('inbox.store.resolvers', []);
1414

15-
$resolvers = config('mailbox-for-laravel.storage_resolvers', []);
16-
if (isset($resolvers[$driver]) && is_callable($resolvers[$driver])) {
17-
return $resolvers[$driver]($options);
15+
// Check for a custom resolver first, if available and it should implement MessageStore
16+
$customStore = $this->resolveCustomStore($driver, $resolvers);
17+
if ($customStore !== null) {
18+
return $customStore;
1819
}
1920

2021
return match ($driver) {
21-
'file' => new FileStorage($options['path'] ?? config('mailbox-for-laravel.storage_path')),
22+
'file' => new FileStorage(config('inbox.store.file.path')),
2223
default => throw new \InvalidArgumentException("Unsupported storage driver [{$driver}]"),
2324
};
2425
}
26+
27+
private function resolveCustomStore($driver, $resolvers): ?MessageStore
28+
{
29+
if (!isset($resolvers[$driver]) || !is_callable($resolvers[$driver])) {
30+
return null;
31+
}
32+
33+
$store = $resolvers[$driver]();
34+
if (!$store instanceof MessageStore) {
35+
return null;
36+
}
37+
38+
return $store;
39+
}
2540
}

tests/Unit/Contracts/MessageStoreContractTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
<?php
22

33
use Redberry\MailboxForLaravel\Contracts\MessageStore;
4-
use ReflectionClass;
54

65
describe(MessageStore::class, function () {
7-
it('defines required methods: store, retrieve, keys, delete, purgeOlderThan', function () {
6+
it('defines required methods: store, retrieve, keys, update, delete, purgeOlderThan, clear', function () {
87
$methods = array_map(
98
fn ($m) => $m->getName(),
109
(new ReflectionClass(MessageStore::class))->getMethods()
@@ -15,7 +14,9 @@
1514
'retrieve',
1615
'keys',
1716
'delete',
17+
'update',
1818
'purgeOlderThan',
19+
'clear',
1920
]);
2021
});
2122

tests/Unit/StoreManagerTest.php

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,22 @@
66

77
describe(StoreManager::class, function () {
88
it('creates a file-based MessageStore when driver=file', function () {
9-
config(['mailbox-for-laravel.storage_driver' => 'file']);
9+
config(['inbox.store.driver' => 'file']);
1010

1111
$store = (new StoreManager)->create();
1212

1313
expect($store)->toBeInstanceOf(FileStorage::class);
1414
});
1515

1616
it('throws when an unknown driver is configured', function () {
17-
config(['mailbox-for-laravel.storage_driver' => 'foo']);
17+
config(['inbox.store.driver' => 'foo']);
1818

19-
expect(fn () => (new StoreManager)->create())
19+
expect(fn() => (new StoreManager)->create())
2020
->toThrow(InvalidArgumentException::class);
2121
});
2222

2323
it('accepts a custom driver resolver via config', function () {
24-
$custom = new class implements MessageStore
25-
{
24+
$custom = new class implements MessageStore {
2625
public array $stored = [];
2726

2827
public function store(string $key, array $value): void
@@ -45,29 +44,44 @@ public function delete(string $key): void
4544
unset($this->stored[$key]);
4645
}
4746

47+
public function update(string $key, array $value): ?array
48+
{
49+
if (!isset($this->stored[$key])) {
50+
return null;
51+
}
52+
$this->stored[$key] = array_merge($this->stored[$key], $value);
53+
return $this->stored[$key];
54+
}
55+
4856
public function purgeOlderThan(int $seconds): void
4957
{
5058
$this->stored = [];
5159
}
60+
61+
public function clear(): bool
62+
{
63+
$this->stored = [];
64+
return true;
65+
}
5266
};
5367

54-
config([
55-
'mailbox-for-laravel.storage_driver' => 'memory',
56-
'mailbox-for-laravel.storage_resolvers' => [
57-
'memory' => fn () => $custom,
58-
],
68+
69+
Config::set('inbox.store.driver', 'memory');
70+
Config::set('inbox.store.resolvers', [
71+
'memory' => fn () => $custom,
5972
]);
6073

6174
$store = (new StoreManager)->create();
75+
6276
expect($store)->toBe($custom);
6377
});
6478

6579
it('passes configuration options to store implementations', function () {
6680
$tmp = sys_get_temp_dir().'/mailbox-tests';
6781
@mkdir($tmp, 0777, true);
6882
config([
69-
'mailbox-for-laravel.storage_driver' => 'file',
70-
'mailbox-for-laravel.storage' => ['path' => $tmp],
83+
'inbox.store.driver' => 'file',
84+
'inbox.store.file' => ['path' => $tmp],
7185
]);
7286

7387
$store = (new StoreManager)->create();

0 commit comments

Comments
 (0)