rules(); $rules['spare_part_id'] = 'required'; return $rules; } public function test_empty_data_fails(): void { $validator = Validator::make([], $this->rulesWithoutExists()); $this->assertTrue($validator->fails()); } public function test_missing_spare_part_id_fails(): void { $data = [ 'status' => 'ordered', 'ordered_quantity' => 1, ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('spare_part_id', $validator->errors()->toArray()); } public function test_missing_status_fails(): void { $data = [ 'spare_part_id' => 1, 'ordered_quantity' => 1, ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('status', $validator->errors()->toArray()); } public function test_invalid_status_value_fails(): void { $data = [ 'spare_part_id' => 1, 'status' => 'invalid_status', 'ordered_quantity' => 1, ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('status', $validator->errors()->toArray()); } public function test_status_ordered_passes(): void { $data = [ 'spare_part_id' => 1, 'status' => 'ordered', 'ordered_quantity' => 1, ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $errors = $validator->errors()->toArray(); $this->assertArrayNotHasKey('status', $errors); } public function test_status_in_stock_passes(): void { $data = [ 'spare_part_id' => 1, 'status' => 'in_stock', 'ordered_quantity' => 1, ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $errors = $validator->errors()->toArray(); $this->assertArrayNotHasKey('status', $errors); } public function test_status_shipped_passes(): void { $data = [ 'spare_part_id' => 1, 'status' => 'shipped', 'ordered_quantity' => 1, ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $errors = $validator->errors()->toArray(); $this->assertArrayNotHasKey('status', $errors); } public function test_missing_ordered_quantity_fails(): void { $data = [ 'spare_part_id' => 1, 'status' => 'ordered', ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('ordered_quantity', $validator->errors()->toArray()); } public function test_ordered_quantity_zero_fails_min_rule(): void { $data = [ 'spare_part_id' => 1, 'status' => 'ordered', 'ordered_quantity' => 0, ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('ordered_quantity', $validator->errors()->toArray()); } public function test_ordered_quantity_must_be_integer(): void { $data = [ 'spare_part_id' => 1, 'status' => 'ordered', 'ordered_quantity' => 'ten', ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('ordered_quantity', $validator->errors()->toArray()); } public function test_valid_minimal_data_passes(): void { $data = [ 'spare_part_id' => 1, 'status' => 'ordered', 'ordered_quantity' => 5, ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $this->assertFalse($validator->fails()); } public function test_valid_full_data_passes(): void { $data = [ 'spare_part_id' => 1, 'order_number' => 'PO-2026-001', 'source_text' => 'Рекламация', 'sourceable_id' => 42, 'sourceable_type' => 'App\\Models\\Reclamation', 'status' => 'in_stock', 'ordered_quantity' => 10, 'with_documents' => true, 'note' => 'Срочно', ]; $validator = Validator::make($data, $this->rulesWithoutExists()); $this->assertFalse($validator->fails()); } }