DolibarrAccountCreatorTest.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php /** @noinspection PhpUnhandledExceptionInspection */
  2. namespace App\Tests\Service\Dolibarr;
  3. use App\ApiResources\Dolibarr\DolibarrAccount;
  4. use App\ApiResources\Dolibarr\DolibarrBill;
  5. use App\ApiResources\Dolibarr\DolibarrContract;
  6. use App\Service\Dolibarr\DolibarrAccountCreator;
  7. use App\Service\Dolibarr\DolibarrApiService;
  8. use PHPUnit\Framework\TestCase;
  9. class DolibarrAccountCreatorTest extends TestCase
  10. {
  11. private DolibarrApiService $dolibarrApiService;
  12. public function setUp(): void {
  13. $this->dolibarrApiService = $this->getMockBuilder(DolibarrApiService::class)
  14. ->disableOriginalConstructor()
  15. ->getMock();
  16. }
  17. public function testGetDolibarrAccount(): void
  18. {
  19. $dolibarrAccountCreator = $this->getMockBuilder(DolibarrAccountCreator::class)
  20. ->setConstructorArgs([$this->dolibarrApiService])
  21. ->setMethodsExcept(['getDolibarrAccount'])
  22. ->getMock();
  23. $organizationId = 1;
  24. $socId = 123;
  25. // Create dolibarr account
  26. $accountData = [1]; // dummy non-null data
  27. $this->dolibarrApiService->expects(self::once())->method('getSociety')->with($organizationId)->willReturn($accountData);
  28. $dolibarrAccount = $this->getMockBuilder(DolibarrAccount::class)->getMock();
  29. $dolibarrAccount->method('getSocId')->willReturn($socId);
  30. $dolibarrAccountCreator
  31. ->expects(self::once())
  32. ->method('createDolibarrAccount')
  33. ->with($organizationId, $accountData)
  34. ->willReturn($dolibarrAccount);
  35. // Get active contract and services
  36. $contractData = [1]; // dummy non-null data
  37. $this->dolibarrApiService->expects(self::once())->method('getActiveContract')->with($socId)->willReturn($contractData);
  38. $dolibarrContract = $this->getMockBuilder(DolibarrContract::class)->getMock();
  39. $dolibarrAccountCreator
  40. ->expects(self::once())
  41. ->method('createDolibarrContract')
  42. ->with($contractData)
  43. ->willReturn($dolibarrContract);
  44. $dolibarrAccount->expects(self::once())->method('setContract')->with($dolibarrContract);
  45. // get bills
  46. $billsData = [[10], [20]]; // dummy non-empty data
  47. $dolibarrBill1 = $this->getMockBuilder(DolibarrBill::class)->getMock();
  48. $dolibarrBill2 = $this->getMockBuilder(DolibarrBill::class)->getMock();
  49. $this->dolibarrApiService->expects(self::once())->method('getBills')->with($socId)->willReturn($billsData);
  50. $dolibarrAccountCreator
  51. ->expects(self::exactly(2))
  52. ->method('createDolibarrBill')
  53. ->willReturnMap([
  54. [[10], $dolibarrBill1],
  55. [[20], $dolibarrBill2]
  56. ]);
  57. $dolibarrAccount->expects(self::exactly(2))->method('addBill')->withConsecutive([$dolibarrBill1], [$dolibarrBill2]);
  58. $result = $dolibarrAccountCreator->getDolibarrAccount(1);
  59. $this->assertEquals($dolibarrAccount, $result);
  60. }
  61. public function testCreateDolibarrAccount(): void
  62. {
  63. $dolibarrAccountCreator = $this->getMockBuilder(DolibarrAccountCreator::class)
  64. ->setConstructorArgs([$this->dolibarrApiService])
  65. ->setMethodsExcept(['createDolibarrAccount'])
  66. ->getMock();
  67. $organizationId = 1;
  68. $accountData = ['id' => '2', 'code_client' => 'C2', 'array_options' => []];
  69. $dolibarrAccount = $dolibarrAccountCreator->createDolibarrAccount($organizationId, $accountData);
  70. $this->assertEquals(1, $dolibarrAccount->getOrganizationId());
  71. $this->assertEquals(2, $dolibarrAccount->getSocId());
  72. $this->assertEquals("C2", $dolibarrAccount->getClientNumber());
  73. $this->assertEquals(null, $dolibarrAccount->getProduct());
  74. }
  75. public function testCreateDolibarrAccountWithProduct(): void
  76. {
  77. $dolibarrAccountCreator = $this->getMockBuilder(DolibarrAccountCreator::class)
  78. ->setConstructorArgs([$this->dolibarrApiService])
  79. ->setMethodsExcept(['createDolibarrAccount'])
  80. ->getMock();
  81. $organizationId = 1;
  82. $accountData = ['id' => '2', 'code_client' => 'C2', 'array_options' => ['options_2iopen_software_used' => 1]];
  83. $dolibarrAccount = $dolibarrAccountCreator->createDolibarrAccount($organizationId, $accountData);
  84. $this->assertEquals('PRODUCT_ARTIST', $dolibarrAccount->getProduct());
  85. }
  86. public function testCreateDolibarrContract(): void
  87. {
  88. $dolibarrAccountCreator = $this->getMockBuilder(DolibarrAccountCreator::class)
  89. ->setConstructorArgs([$this->dolibarrApiService])
  90. ->setMethodsExcept(['createDolibarrContract'])
  91. ->getMock();
  92. $contractData = [
  93. 'ref' => 'foo',
  94. 'socid' => 123,
  95. 'lines' => [[1], [2]]
  96. ];
  97. $dolibarrAccountCreator
  98. ->expects(self::exactly(2))
  99. ->method('createDolibarrContractLine')
  100. ->withConsecutive([[1]], [[2]]);
  101. $dolibarrContract = $dolibarrAccountCreator->createDolibarrContract($contractData);
  102. $this->assertEquals('foo', $dolibarrContract->getRef());
  103. $this->assertEquals(123, $dolibarrContract->getSocId());
  104. }
  105. public function testCreateDolibarrContractLine() {
  106. $dolibarrAccountCreator = $this->getMockBuilder(DolibarrAccountCreator::class)
  107. ->setConstructorArgs([$this->dolibarrApiService])
  108. ->setMethodsExcept(['createDolibarrContractLine'])
  109. ->getMock();
  110. $lineData = [
  111. 'id'=> '1',
  112. 'fk_contrat' => '123',
  113. 'product_ref' => 'foo',
  114. 'product_label' => 'bar',
  115. 'date_start' => '1577836800',
  116. 'date_end' => '1609372800'
  117. ];
  118. $dolibarrContractLine = $dolibarrAccountCreator->createDolibarrContractLine($lineData);
  119. $this->assertEquals(1, $dolibarrContractLine->getId());
  120. $this->assertEquals(123, $dolibarrContractLine->getContractId());
  121. $this->assertEquals('foo', $dolibarrContractLine->getServiceRef());
  122. $this->assertEquals('bar', $dolibarrContractLine->getServiceLabel());
  123. $this->assertEquals('2020-01-01T00:00:00+00:00', $dolibarrContractLine->getDateStart()->format('c'));
  124. $this->assertEquals('2020-12-31T00:00:00+00:00', $dolibarrContractLine->getDateEnd()->format('c'));
  125. }
  126. public function testCreateDolibarrBill() {
  127. $dolibarrAccountCreator = $this->getMockBuilder(DolibarrAccountCreator::class)
  128. ->setConstructorArgs([$this->dolibarrApiService])
  129. ->setMethodsExcept(['createDolibarrBill'])
  130. ->getMock();
  131. $billData = [
  132. 'id' => '1',
  133. 'ref' => 'foo',
  134. 'total_ht' => '100.0',
  135. 'total_ttc' => '120.0',
  136. 'date' => '1577836800',
  137. 'paye' => '0'
  138. ];
  139. $dolibarrBill = $dolibarrAccountCreator->createDolibarrBill($billData);
  140. $this->assertEquals(1, $dolibarrBill->getId());
  141. $this->assertEquals('foo', $dolibarrBill->getRef());
  142. $this->assertEquals(100.0, $dolibarrBill->getTaxExcludedAmount());
  143. $this->assertEquals(120.0, $dolibarrBill->getTaxIncludedAmount());
  144. $this->assertEquals(false, $dolibarrBill->getPaid());
  145. }
  146. }