rules()); $this->assertTrue($validator->fails()); } public function test_missing_product_id_fails(): void { $data = [ 'quantity' => 2, ]; $request = new StoreMafOrderRequest(); $validator = Validator::make($data, $request->rules()); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('product_id', $validator->errors()->toArray()); } public function test_missing_quantity_fails(): void { $data = [ 'product_id' => 1, ]; $rules = (new StoreMafOrderRequest())->rules(); // Remove exists rule to isolate required check without DB $rules['product_id'] = 'required'; $validator = Validator::make($data, $rules); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('quantity', $validator->errors()->toArray()); } public function test_quantity_below_min_fails(): void { $data = [ 'product_id' => 1, 'quantity' => 0, ]; $rules = (new StoreMafOrderRequest())->rules(); $rules['product_id'] = 'required'; $validator = Validator::make($data, $rules); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('quantity', $validator->errors()->toArray()); } public function test_quantity_must_be_integer(): void { $data = [ 'product_id' => 1, 'quantity' => 'abc', ]; $rules = (new StoreMafOrderRequest())->rules(); $rules['product_id'] = 'required'; $validator = Validator::make($data, $rules); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('quantity', $validator->errors()->toArray()); } public function test_in_stock_below_zero_fails(): void { $data = [ 'product_id' => 1, 'quantity' => 2, 'in_stock' => -1, ]; $rules = (new StoreMafOrderRequest())->rules(); $rules['product_id'] = 'required'; $validator = Validator::make($data, $rules); $this->assertTrue($validator->fails()); $this->assertArrayHasKey('in_stock', $validator->errors()->toArray()); } public function test_valid_data_passes_required_and_type_rules(): void { $data = [ 'product_id' => 1, 'quantity' => 3, 'in_stock' => 0, 'order_number' => 'ORD-2026-001', ]; // Strip exists rules to test all other constraints without DB $rules = (new StoreMafOrderRequest())->rules(); $rules['product_id'] = 'required'; $validator = Validator::make($data, $rules); $this->assertFalse($validator->fails()); } public function test_optional_order_number_accepts_null(): void { $data = [ 'product_id' => 1, 'quantity' => 1, 'order_number' => null, ]; $rules = (new StoreMafOrderRequest())->rules(); $rules['product_id'] = 'required'; $validator = Validator::make($data, $rules); $errors = $validator->errors()->toArray(); $this->assertArrayNotHasKey('order_number', $errors); } }