DolibarrAccountCreatorTest.php 7.6 KB

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