OrderStatusUnitTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace Tests\Unit\OrderStatuses;
  3. use App\Shop\Orders\Order;
  4. use App\Shop\OrderStatuses\Exceptions\OrderStatusInvalidArgumentException;
  5. use App\Shop\OrderStatuses\Exceptions\OrderStatusNotFoundException;
  6. use App\Shop\OrderStatuses\OrderStatus;
  7. use App\Shop\OrderStatuses\Repositories\OrderStatusRepository;
  8. use Tests\TestCase;
  9. class OrderStatusUnitTest extends TestCase
  10. {
  11. /** @test */
  12. public function it_can_return_all_orders_on_a_specific_order_status()
  13. {
  14. $orderStatus = factory(OrderStatus::class)->create();
  15. $order = factory(Order::class)->create([
  16. 'order_status_id' => $orderStatus->id
  17. ]);
  18. $repo = new OrderStatusRepository($orderStatus);
  19. $collection = $repo->findOrders();
  20. $this->assertCount(1, $collection->all());
  21. $collection->each(function ($item) use ($order) {
  22. $this->assertEquals($item->reference, $order->reference);
  23. $this->assertEquals($item->courier_id, $order->courier_id);
  24. $this->assertEquals($item->customer_id, $order->customer_id);
  25. $this->assertEquals($item->address_id, $order->address_id);
  26. });
  27. }
  28. /** @test */
  29. public function it_errors_when_updating_the_order_status()
  30. {
  31. $this->expectException(OrderStatusInvalidArgumentException::class);
  32. $orderStatusRepo = new OrderStatusRepository($this->orderStatus);
  33. $orderStatusRepo->updateOrderStatus(['name' => null]);
  34. }
  35. /** @test */
  36. public function it_can_delete_the_order_status()
  37. {
  38. $os = factory(OrderStatus::class)->create();
  39. $orderStatusRepo = new OrderStatusRepository($os);
  40. $orderStatusRepo->deleteOrderStatus($os);
  41. $this->assertDatabaseMissing('order_statuses', $os->toArray());
  42. }
  43. /** @test */
  44. public function it_lists_all_the_order_statuses()
  45. {
  46. $create = [
  47. 'name' => $this->faker->name,
  48. 'color' => $this->faker->word
  49. ];
  50. $orderStatusRepo = new OrderStatusRepository(new OrderStatus);
  51. $orderStatusRepo->createOrderStatus($create);
  52. $orderStatusRepo = new OrderStatusRepository(new OrderStatus);
  53. $lists = $orderStatusRepo->listOrderStatuses();
  54. foreach ($lists as $list) {
  55. $this->assertDatabaseHas('order_statuses', ['name' => $list->name]);
  56. $this->assertDatabaseHas('order_statuses', ['color' => $list->color]);
  57. }
  58. }
  59. /** @test */
  60. public function it_errors_getting_not_existing_order_status()
  61. {
  62. $this->expectException(OrderStatusNotFoundException::class);
  63. $this->expectExceptionMessage('Order status not found.');
  64. $orderStatusRepo = new OrderStatusRepository(new OrderStatus);
  65. $orderStatusRepo->findOrderStatusById(999);
  66. }
  67. /** @test */
  68. public function it_can_get_the_order_status()
  69. {
  70. $create = [
  71. 'name' => $this->faker->name,
  72. 'color' => $this->faker->word
  73. ];
  74. $orderStatusRepo = new OrderStatusRepository(new OrderStatus);
  75. $orderStatus = $orderStatusRepo->createOrderStatus($create);
  76. $os = $orderStatusRepo->findOrderStatusById($orderStatus->id);
  77. $this->assertEquals($create['name'], $os->name);
  78. $this->assertEquals($create['color'], $os->color);
  79. }
  80. /** @test */
  81. public function it_can_update_the_order_status()
  82. {
  83. $orderStatusRepo = new OrderStatusRepository($this->orderStatus);
  84. $data = [
  85. 'name' => $this->faker->name,
  86. 'color' => $this->faker->word
  87. ];
  88. $updated = $orderStatusRepo->updateOrderStatus($data);
  89. $this->assertTrue($updated);
  90. $this->assertEquals($data['name'], $this->orderStatus->name);
  91. $this->assertEquals($data['color'], $this->orderStatus->color);
  92. }
  93. /** @test */
  94. public function it_errors_when_creating_the_order_status()
  95. {
  96. $this->expectException(OrderStatusInvalidArgumentException::class);
  97. $orderStatusRepo = new OrderStatusRepository(new OrderStatus);
  98. $orderStatusRepo->createOrderStatus([]);
  99. }
  100. /** @test */
  101. public function it_can_create_the_order_status()
  102. {
  103. $create = [
  104. 'name' => $this->faker->name,
  105. 'color' => $this->faker->word
  106. ];
  107. $orderStatusRepo = new OrderStatusRepository(new OrderStatus);
  108. $orderStatus = $orderStatusRepo->createOrderStatus($create);
  109. $this->assertEquals($create['name'], $orderStatus->name);
  110. $this->assertEquals($create['color'], $orderStatus->color);
  111. }
  112. }