/tests/Unit/Admin/Order/OrderSearchControllerTest.php

https://github.com/ladybirdweb/agorainvoicing · PHP · 167 lines · 142 code · 15 blank · 10 comment · 0 complexity · 6238c9f7cba7bc5d56fdff767701d6f7 MD5 · raw file

  1. <?php
  2. namespace Tests\Unit\Admin\Order;
  3. use App\Http\Controllers\Order\OrderSearchController;
  4. use App\Model\Order\Order;
  5. use App\Model\Product\Product;
  6. use App\Model\Product\Subscription;
  7. use Tests\DBTestCase;
  8. class OrderSearchControllerTest extends DBTestCase
  9. {
  10. private $classObject;
  11. public function setUp(): void
  12. {
  13. parent::setUp();
  14. $this->classObject = new OrderSearchController();
  15. }
  16. /** @group orderFilter */
  17. public function test_getBaseQueryForOrders_givesRequiredColumnsWhenCalled()
  18. {
  19. $this->getLoggedInUser('admin');
  20. $product = Product::create(['name'=>'Helpdesk']);
  21. $order = Order::create(['client'=> $this->user->id, 'order_status' => 'executed', 'product'=> $product->id]);
  22. $subscription = Subscription::create(['order_id'=>$order->id, 'product_id'=> $product->id, 'version'=>'v3.0.0']);
  23. $query = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  24. $record = $query->first();
  25. $this->assertEquals($order->id, $record->id);
  26. $this->assertEquals($order->order_status, $record->order_status);
  27. $this->assertEquals($product->name, $record->product_name);
  28. $this->assertEquals($this->user->first_name.' '.$this->user->last_name, $record->client_name);
  29. $this->assertEquals($subscription->version, $record->product_version);
  30. $this->assertEquals($this->user->currency, $record->currency);
  31. }
  32. /** @group orderFilter */
  33. public function test_getSelectedVersionOrders_whenVersionFromIsNullAndVersionTillIsNull_shouldNotChangeTheQuery()
  34. {
  35. $this->getLoggedInUser('admin');
  36. $this->createOrder('v3.0.0');
  37. $this->createOrder('v3.1.0');
  38. $this->createOrder('v3.2.0');
  39. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  40. $query = $this->getPrivateMethod($this->classObject, 'getSelectedVersionOrders', [$baseQuery, null, null]);
  41. $this->assertEquals(3, $query->count());
  42. }
  43. /** @group orderFilter */
  44. public function test_getSelectedVersionOrders_whenVersionFromIsNullButVersionTillIsNotNull_shouldGiveResultWhichAreLessThanEqualPassedVersion()
  45. {
  46. $this->getLoggedInUser('admin');
  47. $this->createOrder('v3.0.0');
  48. $this->createOrder('v3.1.0');
  49. $this->createOrder('v3.2.0');
  50. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  51. $query = $this->getPrivateMethod($this->classObject, 'getSelectedVersionOrders', [$baseQuery, null, 'v3.1.0']);
  52. $records = $query->get();
  53. $this->assertEquals(2, $records->count());
  54. $this->assertEquals('v3.0.0', $records[0]->product_version);
  55. $this->assertEquals('v3.1.0', $records[1]->product_version);
  56. }
  57. /** @group orderFilter */
  58. public function test_getSelectedVersionOrders_whenVersionFromIsNotNullButVersionTillIsNull_shouldGiveResultWhichAreGreaterThanEqualToPassedVersion()
  59. {
  60. $this->getLoggedInUser('admin');
  61. $this->createOrder('v3.0.0');
  62. $this->createOrder('v3.1.0');
  63. $this->createOrder('v3.2.0');
  64. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  65. $query = $this->getPrivateMethod($this->classObject, 'getSelectedVersionOrders', [$baseQuery, 'v3.1.0', null]);
  66. $records = $query->get();
  67. $this->assertEquals(2, $records->count());
  68. $this->assertEquals('v3.1.0', $records[0]->product_version);
  69. $this->assertEquals('v3.2.0', $records[1]->product_version);
  70. }
  71. /** @group orderFilter */
  72. public function test_subFrom_whenSubscriptionFromIsNotNullButVersionTillIsNull_shouldGiveResultFromDatePassed()
  73. {
  74. $this->getLoggedInUser('admin');
  75. $this->createOrder('v3.0.0');
  76. $this->createOrder('v3.1.0');
  77. $this->createOrder('v3.2.0');
  78. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  79. $query = $this->getPrivateMethod($this->classObject, 'subFrom', ['19-05-2030', '05-01-2019', $baseQuery]);
  80. $records = $query->get();
  81. $this->assertEquals(3, $records->count());
  82. }
  83. /** @group orderFilter */
  84. public function test_subTill_whenSubscriptionFromIsNullButVersionTillIsNotNull_shouldGiveResultTillDatePassed()
  85. {
  86. $this->getLoggedInUser('admin');
  87. $this->createOrder('v3.0.0');
  88. $this->createOrder('v3.1.0');
  89. $this->createOrder('v3.2.0');
  90. $today = date('Y-m-d H:m:i');
  91. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  92. $query = $this->getPrivateMethod($this->classObject, 'subTill', [null, $today, $baseQuery]);
  93. $records = $query->get();
  94. $this->assertEquals(0, $records->count());
  95. }
  96. /** @group orderFilter */
  97. public function test_getSelectedVersionOrders_whenVersionFromIsNotNullAndVersionTillIsNotNull_shouldGiveIntersectionOfBoth()
  98. {
  99. $this->getLoggedInUser('admin');
  100. $this->createOrder('v3.0.0');
  101. $this->createOrder('v3.1.0');
  102. $this->createOrder('v3.2.0');
  103. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  104. $query = $this->getPrivateMethod($this->classObject, 'getSelectedVersionOrders', [$baseQuery, 'v3.1.0', 'v3.1.0']);
  105. $records = $query->get();
  106. $this->assertEquals(1, $records->count());
  107. $this->assertEquals('v3.1.0', $records[0]->product_version);
  108. }
  109. public function test_allInstallations_seachInstalledProducts_shouldGiveInstalledProduct()
  110. {
  111. $this->getLoggedInUser('admin');
  112. $this->createOrder('v3.0.0');
  113. $this->createOrder('v3.1.0');
  114. $this->createOrder('v3.2.0');
  115. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  116. $query = $this->getPrivateMethod($this->classObject, 'allInstallations', ['installed', $baseQuery]);
  117. $records = $query->get();
  118. $this->assertEquals(0, $records->count());
  119. }
  120. /** @group orderFilter */
  121. public function test_allInstallations_seachINotnstalledProducts_shouldGiveNotInstalledSubscripion()
  122. {
  123. $this->getLoggedInUser('admin');
  124. $this->createOrder('v3.0.0');
  125. $this->createOrder('v3.1.0');
  126. $this->createOrder('v3.2.0');
  127. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  128. $query = $this->getPrivateMethod($this->classObject, 'allInstallations', ['not_installed', $baseQuery]);
  129. $records = $query->get();
  130. $this->assertEquals(3, $records->count());
  131. }
  132. /** @group orderFilter */
  133. public function test_allInstallations_checkActiveInstallation_shouldGiveActiveInstallation()
  134. {
  135. $this->getLoggedInUser('admin');
  136. $this->createOrder('v3.0.0');
  137. $this->createOrder('v3.1.0');
  138. $this->createOrder('v3.2.0');
  139. $baseQuery = $this->getPrivateMethod($this->classObject, 'getBaseQueryForOrders');
  140. $query = $this->getPrivateMethod($this->classObject, 'allInstallations', ['paid_inactive_ins', $baseQuery]);
  141. $records = $query->get();
  142. $this->assertEquals(0, $records->count());
  143. }
  144. /** @group orderFilter */
  145. private function createOrder($version = 'v3.0.0')
  146. {
  147. $product = Product::create(['name'=>'Helpdesk'.$version]);
  148. $order = Order::create(['client'=> $this->user->id, 'order_status' => 'executed',
  149. 'product'=> $product->id, 'number'=> mt_rand(100000, 999999), ]);
  150. Subscription::create(['order_id'=>$order->id, 'product_id'=> $product->id, 'version'=>$version]);
  151. }
  152. }