SharingThirdGameOrderPrecisionTest.php 1.3 KB

123456789101112131415161718192021222324252627282930
  1. <?php
  2. namespace Tests\Unit;
  3. use App\Services\ThirdGameBalanceService;
  4. use PHPUnit\Framework\TestCase;
  5. class SharingThirdGameOrderPrecisionTest extends TestCase
  6. {
  7. public function test_provider_decimal_strings_reach_order_persistence_without_float_conversion(): void
  8. {
  9. $method = new \ReflectionMethod(ThirdGameBalanceService::class, 'formatOrder');
  10. $method->setAccessible(true);
  11. $order = $method->invoke(new ThirdGameBalanceService(), [
  12. 'betAmount' => '99999999999999.1234567891', 'validAmount' => '0.0000000001', 'settledAmount' => '-0.1234567891',
  13. ]);
  14. $this->assertSame('99999999999999.1234567891', $order['bet_amount']);
  15. $this->assertSame('0.0000000001', $order['valid_amount']);
  16. $this->assertSame('-0.1234567891', $order['settled_amount']);
  17. }
  18. public function test_numeric_json_values_keep_their_original_type_and_invalid_strings_fail_closed(): void
  19. {
  20. $method = new \ReflectionMethod(ThirdGameBalanceService::class, 'formatOrder');
  21. $method->setAccessible(true);
  22. $order = $method->invoke(new ThirdGameBalanceService(), ['betAmount' => 100, 'validAmount' => 12.5, 'settledAmount' => '1e8']);
  23. $this->assertSame(100, $order['bet_amount']); $this->assertSame(12.5, $order['valid_amount']);
  24. $this->assertNull($order['settled_amount']);
  25. }
  26. }