create(['categoria' => 'talleres']); $op = OrdenProduccion::factory()->create(['cantidad_total' => 100]); $conf = Confeccion::create([ 'proveedor_id' => $proveedor->id, 'orden_produccion_id' => $op->id, 'cantidad_enviada' => 100, ]); // Primera recepción 60 Recepcion::create([ 'referencia_type' => Confeccion::class, 'referencia_id' => $conf->id, 'cantidad' => 60, 'fecha_recepcion' => now(), ]); $conf->refresh(); $this->assertEquals(60, $conf->cantidad_recibida); $this->assertEquals('parcial', $conf->estado); // Segunda recepción 40 Recepcion::create([ 'referencia_type' => Confeccion::class, 'referencia_id' => $conf->id, 'cantidad' => 40, 'fecha_recepcion' => now(), ]); $conf->refresh(); $this->assertEquals(100, $conf->cantidad_recibida); $this->assertEquals('completo', $conf->estado); // Debería haber 2 traslados creados (uno por cada recepción) $count = TrasladoPrenda::where('referencia_type', Confeccion::class) ->where('referencia_id', $conf->id) ->count(); $this->assertEquals(2, $count); // Crear recepción con faltantes y comprobar traslado creado Recepcion::create([ 'referencia_type' => Confeccion::class, 'referencia_id' => $conf->id, 'cantidad' => 50, 'prendas_defectuosas' => 5, 'fecha_recepcion' => now(), ]); $ultimoTraslado = TrasladoPrenda::where('referencia_type', Confeccion::class) ->where('referencia_id', $conf->id) ->latest('id') ->first(); $this->assertNotNull($ultimoTraslado); $this->assertEquals(45, $ultimoTraslado->cantidad_recibida); $this->assertEquals(5, $ultimoTraslado->prendas_defectuosas); } /** @test */ public function it_prevents_recepcion_exceeding_cantidad_enviada() { $this->expectException(\Illuminate\Validation\ValidationException::class); $proveedor = Proveedor::factory()->create(['categoria' => 'talleres']); $op = OrdenProduccion::factory()->create(['cantidad_total' => 100]); $conf = Confeccion::create([ 'proveedor_id' => $proveedor->id, 'orden_produccion_id' => $op->id, 'cantidad_enviada' => 100, ]); // Recepción primera 100 Recepcion::create([ 'referencia_type' => Confeccion::class, 'referencia_id' => $conf->id, 'cantidad' => 100, 'fecha_recepcion' => now(), ]); // Esta segunda debería fallar Recepcion::create([ 'referencia_type' => Confeccion::class, 'referencia_id' => $conf->id, 'cantidad' => 1, 'fecha_recepcion' => now(), ]); } }