StoreMafOrderRequestTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace Tests\Unit\Requests;
  3. use App\Http\Requests\StoreMafOrderRequest;
  4. use Illuminate\Support\Facades\Validator;
  5. use Tests\TestCase;
  6. class StoreMafOrderRequestTest extends TestCase
  7. {
  8. public function test_empty_data_fails_because_product_id_and_quantity_are_required(): void
  9. {
  10. $request = new StoreMafOrderRequest();
  11. $validator = Validator::make([], $request->rules());
  12. $this->assertTrue($validator->fails());
  13. }
  14. public function test_missing_product_id_fails(): void
  15. {
  16. $data = [
  17. 'quantity' => 2,
  18. ];
  19. $request = new StoreMafOrderRequest();
  20. $validator = Validator::make($data, $request->rules());
  21. $this->assertTrue($validator->fails());
  22. $this->assertArrayHasKey('product_id', $validator->errors()->toArray());
  23. }
  24. public function test_missing_quantity_fails(): void
  25. {
  26. $data = [
  27. 'product_id' => 1,
  28. ];
  29. $rules = (new StoreMafOrderRequest())->rules();
  30. // Remove exists rule to isolate required check without DB
  31. $rules['product_id'] = 'required';
  32. $validator = Validator::make($data, $rules);
  33. $this->assertTrue($validator->fails());
  34. $this->assertArrayHasKey('quantity', $validator->errors()->toArray());
  35. }
  36. public function test_quantity_below_min_fails(): void
  37. {
  38. $data = [
  39. 'product_id' => 1,
  40. 'quantity' => 0,
  41. ];
  42. $rules = (new StoreMafOrderRequest())->rules();
  43. $rules['product_id'] = 'required';
  44. $validator = Validator::make($data, $rules);
  45. $this->assertTrue($validator->fails());
  46. $this->assertArrayHasKey('quantity', $validator->errors()->toArray());
  47. }
  48. public function test_quantity_must_be_integer(): void
  49. {
  50. $data = [
  51. 'product_id' => 1,
  52. 'quantity' => 'abc',
  53. ];
  54. $rules = (new StoreMafOrderRequest())->rules();
  55. $rules['product_id'] = 'required';
  56. $validator = Validator::make($data, $rules);
  57. $this->assertTrue($validator->fails());
  58. $this->assertArrayHasKey('quantity', $validator->errors()->toArray());
  59. }
  60. public function test_in_stock_below_zero_fails(): void
  61. {
  62. $data = [
  63. 'product_id' => 1,
  64. 'quantity' => 2,
  65. 'in_stock' => -1,
  66. ];
  67. $rules = (new StoreMafOrderRequest())->rules();
  68. $rules['product_id'] = 'required';
  69. $validator = Validator::make($data, $rules);
  70. $this->assertTrue($validator->fails());
  71. $this->assertArrayHasKey('in_stock', $validator->errors()->toArray());
  72. }
  73. public function test_valid_data_passes_required_and_type_rules(): void
  74. {
  75. $data = [
  76. 'product_id' => 1,
  77. 'quantity' => 3,
  78. 'in_stock' => 0,
  79. 'order_number' => 'ORD-2026-001',
  80. ];
  81. // Strip exists rules to test all other constraints without DB
  82. $rules = (new StoreMafOrderRequest())->rules();
  83. $rules['product_id'] = 'required';
  84. $validator = Validator::make($data, $rules);
  85. $this->assertFalse($validator->fails());
  86. }
  87. public function test_optional_order_number_accepts_null(): void
  88. {
  89. $data = [
  90. 'product_id' => 1,
  91. 'quantity' => 1,
  92. 'order_number' => null,
  93. ];
  94. $rules = (new StoreMafOrderRequest())->rules();
  95. $rules['product_id'] = 'required';
  96. $validator = Validator::make($data, $rules);
  97. $errors = $validator->errors()->toArray();
  98. $this->assertArrayNotHasKey('order_number', $errors);
  99. }
  100. }