DolibarrAccountCreatorTest.php 7.7 KB

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