AgentProfitCommissionProfileTest.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace Tests\Unit;
  3. use App\Models\Agent\AgentProfitCommissionProfile;
  4. use App\Models\Agent\AgentProfitCommissionAssignment;
  5. use PHPUnit\Framework\TestCase;
  6. class AgentProfitCommissionProfileTest extends TestCase
  7. {
  8. public function test_game_types_map_to_the_expected_profit_rates(): void
  9. {
  10. $profile = new AgentProfitCommissionProfile([
  11. 'live_rate' => '1', 'slot_rate' => '2', 'lottery_rate' => '3', 'sport_rate' => '4',
  12. 'esports_rate' => '5', 'fishing_rate' => '6', 'chess_rate' => '7',
  13. ]);
  14. $this->assertSame('1.0000', $profile->rateForGameType(1));
  15. $this->assertSame('2.0000', $profile->rateForGameType(2));
  16. $this->assertSame('3.0000', $profile->rateForGameType(3));
  17. $this->assertSame('4.0000', $profile->rateForGameType(4));
  18. $this->assertSame('5.0000', $profile->rateForGameType(5));
  19. $this->assertSame('6.0000', $profile->rateForGameType(6));
  20. $this->assertSame('7.0000', $profile->rateForGameType(7));
  21. $this->assertSame('0.0000', $profile->rateForGameType(99));
  22. }
  23. public function test_official_and_owned_profile_flags(): void
  24. {
  25. $official = new AgentProfitCommissionProfile(['name' => '官方']);
  26. $this->assertTrue($official->isOfficial());
  27. $this->assertFalse($official->isOwnedBy(5));
  28. $owned = new AgentProfitCommissionProfile(['name' => '自建']);
  29. $owned->owner_agent_id = 5;
  30. $this->assertFalse($owned->isOfficial());
  31. $this->assertTrue($owned->isOwnedBy(5));
  32. $this->assertFalse($owned->isOwnedBy(6));
  33. $this->assertFalse($owned->isOwnedBy(null));
  34. }
  35. public function test_historical_assignment_uses_its_rate_snapshot(): void
  36. {
  37. $assignment = new AgentProfitCommissionAssignment([
  38. 'live_rate' => '11', 'slot_rate' => '12', 'lottery_rate' => '13', 'sport_rate' => '14',
  39. 'esports_rate' => '15', 'fishing_rate' => '16', 'chess_rate' => '17',
  40. ]);
  41. $this->assertSame('11.0000', $assignment->rateForGameType(1));
  42. $this->assertSame('14.0000', $assignment->rateForGameType(4));
  43. $this->assertSame('17.0000', $assignment->rateForGameType(7));
  44. $this->assertSame('0.0000', $assignment->rateForGameType(99));
  45. }
  46. }