StoreOrderRequestTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace Tests\Unit\Requests;
  3. use App\Http\Requests\Order\StoreOrderRequest;
  4. use Illuminate\Support\Facades\Validator;
  5. use Tests\TestCase;
  6. class StoreOrderRequestTest extends TestCase
  7. {
  8. public function test_empty_data_passes_because_all_fields_are_nullable(): void
  9. {
  10. $request = new StoreOrderRequest();
  11. $validator = Validator::make([], $request->rules());
  12. $this->assertFalse($validator->fails());
  13. }
  14. public function test_short_object_address_fails_min_length(): void
  15. {
  16. $data = [
  17. 'object_address' => 'ab',
  18. ];
  19. $request = new StoreOrderRequest();
  20. $validator = Validator::make($data, $request->rules());
  21. $this->assertTrue($validator->fails());
  22. $this->assertArrayHasKey('object_address', $validator->errors()->toArray());
  23. }
  24. public function test_object_address_with_min_length_passes(): void
  25. {
  26. $data = [
  27. 'object_address' => 'ул. Ленина, 1',
  28. ];
  29. $request = new StoreOrderRequest();
  30. $validator = Validator::make($data, $request->rules());
  31. $errors = $validator->errors()->toArray();
  32. $this->assertArrayNotHasKey('object_address', $errors);
  33. }
  34. public function test_invalid_installation_date_fails(): void
  35. {
  36. $data = [
  37. 'installation_date' => 'not-a-date',
  38. ];
  39. $request = new StoreOrderRequest();
  40. $validator = Validator::make($data, $request->rules());
  41. $this->assertTrue($validator->fails());
  42. $this->assertArrayHasKey('installation_date', $validator->errors()->toArray());
  43. }
  44. public function test_invalid_ready_date_fails(): void
  45. {
  46. $data = [
  47. 'ready_date' => 'not-a-date',
  48. ];
  49. $request = new StoreOrderRequest();
  50. $validator = Validator::make($data, $request->rules());
  51. $this->assertTrue($validator->fails());
  52. $this->assertArrayHasKey('ready_date', $validator->errors()->toArray());
  53. }
  54. public function test_valid_dates_pass(): void
  55. {
  56. $data = [
  57. 'installation_date' => '2026-06-01',
  58. 'ready_date' => '2026-07-15',
  59. ];
  60. $request = new StoreOrderRequest();
  61. $validator = Validator::make($data, $request->rules());
  62. $errors = $validator->errors()->toArray();
  63. $this->assertArrayNotHasKey('installation_date', $errors);
  64. $this->assertArrayNotHasKey('ready_date', $errors);
  65. }
  66. public function test_products_as_array_passes(): void
  67. {
  68. $data = [
  69. 'products' => [1, 2, 3],
  70. ];
  71. $request = new StoreOrderRequest();
  72. $validator = Validator::make($data, $request->rules());
  73. $errors = $validator->errors()->toArray();
  74. $this->assertArrayNotHasKey('products', $errors);
  75. }
  76. public function test_products_as_non_array_fails(): void
  77. {
  78. $data = [
  79. 'products' => 'not-an-array',
  80. ];
  81. $request = new StoreOrderRequest();
  82. $validator = Validator::make($data, $request->rules());
  83. $this->assertTrue($validator->fails());
  84. $this->assertArrayHasKey('products', $validator->errors()->toArray());
  85. }
  86. public function test_install_days_below_min_fails(): void
  87. {
  88. $data = [
  89. 'install_days' => 0,
  90. ];
  91. $request = new StoreOrderRequest();
  92. $validator = Validator::make($data, $request->rules());
  93. $this->assertTrue($validator->fails());
  94. $this->assertArrayHasKey('install_days', $validator->errors()->toArray());
  95. }
  96. public function test_install_days_at_min_passes(): void
  97. {
  98. $data = [
  99. 'install_days' => 1,
  100. ];
  101. $request = new StoreOrderRequest();
  102. $validator = Validator::make($data, $request->rules());
  103. $errors = $validator->errors()->toArray();
  104. $this->assertArrayNotHasKey('install_days', $errors);
  105. }
  106. public function test_nullable_string_fields_accept_null(): void
  107. {
  108. $data = [
  109. 'name' => null,
  110. 'comment' => null,
  111. 'tg_group_name' => null,
  112. 'tg_group_link' => null,
  113. ];
  114. $request = new StoreOrderRequest();
  115. $validator = Validator::make($data, $request->rules());
  116. $this->assertFalse($validator->fails());
  117. }
  118. }