Skip to content

Commit 9bab49e

Browse files
authored
Merge pull request #14 from RedberryProducts/fix/test-cases-fail-reasons
Fix/test cases fail reasons
2 parents 71929bc + 4da4632 commit 9bab49e

File tree

5 files changed

+54
-20
lines changed

5 files changed

+54
-20
lines changed

.github/workflows/run-tests.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ jobs:
2929
testbench: 10.*
3030
- laravel: 11.*
3131
testbench: 9.*
32-
- laravel: 10.*
33-
testbench: ^8.22
34-
32+
3533

3634
name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}
3735

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', storage_path('mailbox'))),
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: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
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

1919
expect(fn () => (new StoreManager)->create())
2020
->toThrow(InvalidArgumentException::class);
@@ -45,29 +45,45 @@ public function delete(string $key): void
4545
unset($this->stored[$key]);
4646
}
4747

48+
public function update(string $key, array $value): ?array
49+
{
50+
if (! isset($this->stored[$key])) {
51+
return null;
52+
}
53+
$this->stored[$key] = array_merge($this->stored[$key], $value);
54+
55+
return $this->stored[$key];
56+
}
57+
4858
public function purgeOlderThan(int $seconds): void
4959
{
5060
$this->stored = [];
5161
}
62+
63+
public function clear(): bool
64+
{
65+
$this->stored = [];
66+
67+
return true;
68+
}
5269
};
5370

54-
config([
55-
'mailbox-for-laravel.storage_driver' => 'memory',
56-
'mailbox-for-laravel.storage_resolvers' => [
57-
'memory' => fn () => $custom,
58-
],
71+
Config::set('inbox.store.driver', 'memory');
72+
Config::set('inbox.store.resolvers', [
73+
'memory' => fn () => $custom,
5974
]);
6075

6176
$store = (new StoreManager)->create();
77+
6278
expect($store)->toBe($custom);
6379
});
6480

6581
it('passes configuration options to store implementations', function () {
6682
$tmp = sys_get_temp_dir().'/mailbox-tests';
6783
@mkdir($tmp, 0777, true);
6884
config([
69-
'mailbox-for-laravel.storage_driver' => 'file',
70-
'mailbox-for-laravel.storage' => ['path' => $tmp],
85+
'inbox.store.driver' => 'file',
86+
'inbox.store.file' => ['path' => $tmp],
7187
]);
7288

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

0 commit comments

Comments
 (0)