Skip to content

Commit 896e3a8

Browse files
committed
add getDynamicSlug
1 parent de6d893 commit 896e3a8

File tree

4 files changed

+102
-1
lines changed

4 files changed

+102
-1
lines changed

src/Traits/MorphOneWallet.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,14 @@ public function wallet(): MorphOne
3434
->where('slug', config('wallet.wallet.default.slug', 'default'))
3535
->withDefault(static function (WalletModel $wallet, object $holder) use ($castService) {
3636
$model = $castService->getModel($holder);
37+
38+
$slug = method_exists($model, 'getDynamicSlug')
39+
? $model->getDynamicSlug()
40+
: config('wallet.wallet.default.slug', 'default');
41+
3742
$wallet->forceFill(array_merge(config('wallet.wallet.creating', []), [
3843
'name' => config('wallet.wallet.default.name', 'Default Wallet'),
39-
'slug' => config('wallet.wallet.default.slug', 'default'),
44+
'slug' => $slug,
4045
'meta' => config('wallet.wallet.default.meta', []),
4146
'balance' => 0,
4247
]));
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Bavix\Wallet\Test\Infra\Factories;
6+
7+
use Bavix\Wallet\Test\Infra\Models\UserDynamic;
8+
use Illuminate\Database\Eloquent\Factories\Factory;
9+
10+
/**
11+
* @extends Factory<UserDynamic>
12+
*/
13+
final class UserDynamicFactory extends Factory
14+
{
15+
protected $model = UserDynamic::class;
16+
17+
public function definition(): array
18+
{
19+
return [
20+
'name' => fake()
21+
->name,
22+
'email' => fake()
23+
->unique()
24+
->safeEmail,
25+
];
26+
}
27+
}

tests/Infra/Models/UserDynamic.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Bavix\Wallet\Test\Infra\Models;
6+
7+
use Bavix\Wallet\Interfaces\Wallet;
8+
use Bavix\Wallet\Traits\HasWallet;
9+
use Illuminate\Database\Eloquent\Model;
10+
11+
/**
12+
* @property string $name
13+
* @property string $email
14+
*
15+
* @method int getKey()
16+
*/
17+
final class UserDynamic extends Model implements Wallet
18+
{
19+
use HasWallet;
20+
21+
/**
22+
* @var string[]
23+
*/
24+
protected $fillable = ['name', 'email'];
25+
26+
public function getTable(): string
27+
{
28+
return 'users';
29+
}
30+
31+
public function getDynamicSlug(): string
32+
{
33+
return 'default-' . $this->email;
34+
}
35+
}

tests/Units/Domain/WalletTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@
1212
use Bavix\Wallet\Internal\Service\DatabaseServiceInterface;
1313
use Bavix\Wallet\Models\Transaction;
1414
use Bavix\Wallet\Services\RegulatorServiceInterface;
15+
use Bavix\Wallet\Test\Infra\Factories\UserDynamicFactory;
1516
use Bavix\Wallet\Test\Infra\Factories\UserFactory;
1617
use Bavix\Wallet\Test\Infra\Models\User;
18+
use Bavix\Wallet\Test\Infra\Models\UserDynamic;
19+
use Bavix\Wallet\Test\Infra\PackageModels\Wallet;
1720
use Bavix\Wallet\Test\Infra\TestCase;
1821
use Illuminate\Database\Eloquent\Collection;
1922
use RuntimeException;
@@ -280,6 +283,37 @@ public function testRecalculate(): void
280283
self::assertSame(0, $user->balanceInt);
281284
}
282285

286+
public function testDefaultWalletCustomize(): void
287+
{
288+
/** @var User $user */
289+
$user = UserFactory::new()->create();
290+
291+
self::assertFalse($user->wallet->exists);
292+
293+
$user->wallet->meta = [
294+
'internal' => 1,
295+
];
296+
297+
self::assertNotNull($user->deposit(100));
298+
self::assertSame(100, $user->balanceInt);
299+
300+
$wallet = Wallet::query()->find($user->wallet->getKey());
301+
302+
self::assertNotNull($wallet);
303+
self::assertSame(1, $wallet->meta['internal'] ?? 0);
304+
}
305+
306+
public function testGetDynamicSlug(): void
307+
{
308+
/** @var UserDynamic $user */
309+
$user = UserDynamicFactory::new()->create();
310+
311+
self::assertNotNull($user->deposit(100));
312+
self::assertSame(100, $user->balanceInt);
313+
314+
self::assertSame('default-' . $user->email, $user->wallet->slug);
315+
}
316+
283317
public function testCrash(): void
284318
{
285319
/** @var User $user */

0 commit comments

Comments
 (0)