Yard::weight() multiplizierte Gewicht und Menge ohne Cast. Beide Werte stammen aus Session- bzw. Request-Daten; ein fuehrend-numerischer String wie "2,5" loeste unter PHP 8 die ErrorException "A non-numeric value encountered" aus. Danach war die Position dauerhaft defekt, da reCalculateShippingPrice() bei jedem Aufruf erneut fehlschlug. Cart::update() setzt die Menge ohne Validierung (anders als setQuantity()). Eintrittspunkte waren das quantity-Feld im Shop-POST sowie das Textfeld fuer die Menge im Backoffice-Warenkorb. - Yard: neue cartItemWeight() mit explizitem int-Cast fuer Gewicht und Menge - CardController: nicht-numerische Mengen werden uebersprungen, Schutz gegen ein quantity-Feld, das kein Array ist - OrderController: nutzt das bereits vorhandene $qty (int) statt $data['qty'] roh Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
60 lines
1.8 KiB
PHP
60 lines
1.8 KiB
PHP
<?php
|
|
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
uses(TestCase::class, RefreshDatabase::class);
|
|
|
|
/**
|
|
* Menge und Gewicht stammen aus Session- bzw. Request-Daten. Landet dort ein
|
|
* nicht-numerischer String, warf die Gewichtsberechnung in PHP 8 eine
|
|
* ErrorException ("A non-numeric value encountered").
|
|
*/
|
|
describe('Yard Gewichtsberechnung', function () {
|
|
it('summiert Gewicht mal Menge', function () {
|
|
$yard = Yard::instance('test-cart-weight');
|
|
$yard->destroy();
|
|
|
|
$yard->add(1, 'A', 2, 10.0, false, false, ['weight' => 500]);
|
|
$yard->add(2, 'B', 1, 10.0, false, false, ['weight' => 250]);
|
|
|
|
expect($yard->weight())->toBe(1250);
|
|
|
|
$yard->destroy();
|
|
});
|
|
|
|
it('wirft keinen Fehler bei nicht-numerischer Menge im Warenkorb', function () {
|
|
$yard = Yard::instance('test-cart-weight');
|
|
$yard->destroy();
|
|
|
|
$cartItem = $yard->add(1, 'A', 1, 10.0, false, false, ['weight' => 500]);
|
|
$yard->update($cartItem->rowId, '2,5');
|
|
|
|
expect($yard->weight())->toBe(1000);
|
|
|
|
$yard->destroy();
|
|
});
|
|
|
|
it('wirft keinen Fehler bei nicht-numerischem Gewicht im Warenkorb', function () {
|
|
$yard = Yard::instance('test-cart-weight');
|
|
$yard->destroy();
|
|
|
|
$yard->add(1, 'A', 2, 10.0, false, false, ['weight' => '500 g']);
|
|
|
|
expect($yard->weight())->toBe(1000);
|
|
|
|
$yard->destroy();
|
|
});
|
|
|
|
it('berücksichtigt nur Artikel ohne kostenlosen Versand', function () {
|
|
$yard = Yard::instance('test-cart-weight');
|
|
$yard->destroy();
|
|
|
|
$yard->add(1, 'A', 2, 10.0, false, false, ['weight' => 500, 'no_free_shipping' => true]);
|
|
$yard->add(2, 'B', 2, 10.0, false, false, ['weight' => 500, 'no_free_shipping' => false]);
|
|
|
|
expect($yard->weightByFreeShipping())->toBe(1000);
|
|
|
|
$yard->destroy();
|
|
});
|
|
});
|