%PDF- %PDF-
Direktori : /var/www/pjc/vendor/cknow/laravel-money/tests/ |
Current File : /var/www/pjc/vendor/cknow/laravel-money/tests/MoneyCastTest.php |
<?php namespace Cknow\Money\Tests; use Cknow\Money\Money; use Cknow\Money\Tests\Database\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\DB; use InvalidArgumentException; use Money\Exception\ParserException; use Money\Money as BaseMoney; use stdClass; /** * The money cast test. */ class MoneyCastTest extends TestCase { use RefreshDatabase; /** * Setup the test environment. * * @return void */ protected function setUp(): void { parent::setUp(); $this->loadMigrationsFrom(__DIR__.'/Database/Migrations'); Money::setCurrencies(config('money.currencies')); } public function testCastsMoneyWhenRetrievingCastedValues() { DB::table('users')->insert([ 'money' => '1234.56', 'wage' => 50000, 'debits' => null, 'credits' => 12.00, 'currency' => 'AUD', ]); $user = User::findOrFail(1); static::assertInstanceOf(Money::class, $user->money); static::assertInstanceOf(Money::class, $user->wage); static::assertNull($user->debits); static::assertInstanceOf(Money::class, $user->credits); static::assertSame('123456', $user->money->getAmount()); static::assertSame('USD', $user->money->getCurrency()->getCode()); static::assertSame('50000', $user->wage->getAmount()); static::assertSame('EUR', $user->wage->getCurrency()->getCode()); $user->debits = 100.99; $user->credits = '$99'; static::assertSame('10099', $user->debits->getAmount()); static::assertSame('AUD', $user->debits->getCurrency()->getCode()); static::assertSame('9900', $user->credits->getAmount()); static::assertSame('USD', $user->credits->getCurrency()->getCode()); $user->save(); static::assertSame(1, $user->id); $this->assertDatabaseHas('users', [ 'id' => 1, 'money' => '$1,234.56', 'wage' => 50000, 'debits' => 100.99, 'credits' => 99, 'currency' => 'AUD', ]); } public function testCastsMoneyWhenSettingCastedValues() { $user = new User([ 'money' => 0, 'wage' => '65000.00', 'debits' => null, 'currency' => 'CAD', ]); static::assertSame('0', $user->money->getAmount()); static::assertSame('USD', $user->money->getCurrency()->getCode()); static::assertSame('6500000', $user->wage->getAmount()); static::assertSame('EUR', $user->wage->getCurrency()->getCode()); static::assertNull($user->debits); $user->money = new BaseMoney(10000, $user->money->getCurrency()); static::assertSame('10000', $user->money->getAmount()); $user->money = 100; $user->wage = 70500.19; $user->debits = '¥213860'; static::assertSame('100', $user->money->getAmount()); static::assertSame('USD', $user->money->getCurrency()->getCode()); static::assertSame('7050019', $user->wage->getAmount()); static::assertSame('EUR', $user->wage->getCurrency()->getCode()); static::assertSame('213860', $user->debits->getAmount()); static::assertSame('JPY', $user->debits->getCurrency()->getCode()); static::assertSame('JPY', $user->currency); $user->money = '100,000.22'; $user->debits = 'Ƀ0.00012345'; static::assertSame('10000022', $user->money->getAmount()); static::assertSame('USD', $user->money->getCurrency()->getCode()); static::assertSame('12345', $user->debits->getAmount()); static::assertSame('XBT', $user->debits->getCurrency()->getCode()); static::assertSame('XBT', $user->currency); $user->save(); static::assertSame(1, $user->id); $this->assertDatabaseHas('users', [ 'id' => 1, 'money' => '$100,000.22', 'wage' => 7050019, 'debits' => 0.00012345, 'currency' => 'XBT', ]); } public function testFailsToSetInvalidMoney() { $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Invalid data provided for Cknow\Money\Tests\Database\Models\User::$money'); new User(['money' => new stdClass()]); } public function testFailsToParseInvalidMoney() { $this->expectException(ParserException::class); $this->expectExceptionMessage('Unable to parse abc'); new User(['money' => 'abc']); } }