|
4 | 4 |
|
5 | 5 | namespace Bavix\Wallet\Test\Units\Domain; |
6 | 6 |
|
| 7 | +use Bavix\Wallet\Services\AtomicServiceInterface; |
| 8 | +use Bavix\Wallet\Test\Infra\Factories\BuyerFactory; |
7 | 9 | use Bavix\Wallet\Test\Infra\Factories\UserMultiFactory; |
| 10 | +use Bavix\Wallet\Test\Infra\Models\Buyer; |
8 | 11 | use Bavix\Wallet\Test\Infra\Models\UserMulti; |
9 | 12 | use Bavix\Wallet\Test\Infra\TestCase; |
10 | 13 |
|
@@ -60,4 +63,28 @@ public function testCreditLimitBalanceZero(): void |
60 | 63 | self::assertNotNull($transaction); |
61 | 64 | self::assertSame(-10000, $wallet->balanceInt); |
62 | 65 | } |
| 66 | + |
| 67 | + public function testFrozenBalance(): void |
| 68 | + { |
| 69 | + /** @var Buyer $user */ |
| 70 | + $user = BuyerFactory::new()->create(); |
| 71 | + |
| 72 | + self::assertFalse($user->relationLoaded('wallet')); |
| 73 | + self::assertEquals(0, $user->wallet->balanceInt); |
| 74 | + |
| 75 | + app(AtomicServiceInterface::class)->block($user, function () use ($user) { |
| 76 | + $user->deposit(1000); |
| 77 | + |
| 78 | + $meta = $user->wallet->meta ?? []; |
| 79 | + $meta['credit'] = ($meta['credit'] ?? 0) - 1000; |
| 80 | + |
| 81 | + $user->wallet->meta = $meta; |
| 82 | + $user->wallet->saveOrFail(); |
| 83 | + }); |
| 84 | + |
| 85 | + self::assertEquals(1000, $user->wallet->balanceInt); |
| 86 | + self::assertEquals(-1000.0, (float) $user->wallet->getCreditAttribute()); |
| 87 | + |
| 88 | + self::assertFalse($user->canWithdraw(1)); |
| 89 | + } |
63 | 90 | } |
0 commit comments