购物车悬浮
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\CartModel;
|
||||
use App\Models\CustomerLevelModel;
|
||||
use App\Models\ProductModel;
|
||||
use App\Models\StoreModel;
|
||||
@@ -103,4 +104,85 @@ class MiniProductTest extends ProcurementTestCase
|
||||
$this->assertNotNull($row);
|
||||
$this->assertNull($row['price']);
|
||||
}
|
||||
|
||||
/** 商品列表:登录门店附加购物车行ID与数量,响应附悬浮球汇总 */
|
||||
public function test_product_list_appends_cart_quantity_and_summary(): void
|
||||
{
|
||||
[$store, $product] = $this->makeStoreWithProduct('5.00');
|
||||
$extra = ProductModel::factory()->create(['status' => ProductModel::STATUS_ON, 'cost_price' => '3.00']);
|
||||
$this->actingAsMiniStore($store);
|
||||
|
||||
$this->postJson('/mini/cart', ['product_id' => $product->id, 'quantity' => 2]);
|
||||
$this->postJson('/mini/cart', ['product_id' => $extra->id, 'quantity' => 1]);
|
||||
$cartId = CartModel::where('product_id', $product->id)->first()->id;
|
||||
|
||||
$data = $this->getJson('/mini/product/list')->assertOk()->json('data');
|
||||
$row = collect($data['data'])->firstWhere('id', $product->id);
|
||||
$this->assertSame($cartId, $row['cart_id'], '在购物车的商品应附购物车行ID');
|
||||
$this->assertSame('2.00', $row['cart_quantity']);
|
||||
|
||||
// 不在购物车的商品:cart_id=0、cart_quantity='0.00'
|
||||
$other = ProductModel::factory()->create(['status' => ProductModel::STATUS_ON, 'cost_price' => '1.00']);
|
||||
$otherRow = collect($this->getJson('/mini/product/list')->json('data.data'))->firstWhere('id', $other->id);
|
||||
$this->assertSame(0, $otherRow['cart_id']);
|
||||
$this->assertSame('0.00', $otherRow['cart_quantity']);
|
||||
|
||||
// 悬浮球汇总:2 种商品、总数量 3、总金额 5×2+3×1=13
|
||||
$this->assertSame(2, $data['cart']['total_count']);
|
||||
$this->assertSame('3.00', $data['cart']['total_quantity']);
|
||||
$this->assertSame('13.00', $data['cart']['total_amount']);
|
||||
}
|
||||
|
||||
/** 商品列表/详情:未登录时购物车字段为零值结构 */
|
||||
public function test_product_list_guest_sees_zero_cart_fields(): void
|
||||
{
|
||||
[, $product] = $this->makeStoreWithProduct();
|
||||
|
||||
$data = $this->getJson('/mini/product/list')->assertOk()->json('data');
|
||||
$row = collect($data['data'])->firstWhere('id', $product->id);
|
||||
$this->assertSame(0, $row['cart_id']);
|
||||
$this->assertSame('0.00', $row['cart_quantity']);
|
||||
$this->assertSame(
|
||||
['total_count' => 0, 'total_quantity' => '0.00', 'total_amount' => '0.00'],
|
||||
$data['cart']
|
||||
);
|
||||
|
||||
$detail = $this->getJson("/mini/product/{$product->id}")->assertOk()->json('data');
|
||||
$this->assertSame(0, $detail['cart_id']);
|
||||
$this->assertSame('0.00', $detail['cart_quantity']);
|
||||
}
|
||||
|
||||
/** 商品详情:登录门店附加购物车行ID与数量 */
|
||||
public function test_product_detail_appends_cart_quantity(): void
|
||||
{
|
||||
[$store, $product] = $this->makeStoreWithProduct();
|
||||
$this->actingAsMiniStore($store);
|
||||
$this->postJson('/mini/cart', ['product_id' => $product->id, 'quantity' => 4]);
|
||||
$cartId = CartModel::first()->id;
|
||||
|
||||
$data = $this->getJson("/mini/product/{$product->id}")->assertOk()->json('data');
|
||||
$this->assertSame($cartId, $data['cart_id']);
|
||||
$this->assertSame('4.00', $data['cart_quantity']);
|
||||
}
|
||||
|
||||
/** 首页:登录门店附购物车悬浮球汇总,未登录为零值结构 */
|
||||
public function test_home_appends_cart_summary(): void
|
||||
{
|
||||
[$store, $product] = $this->makeStoreWithProduct('5.00');
|
||||
|
||||
// 未登录:零值结构
|
||||
$guest = $this->getJson('/mini/home')->assertOk()->json('data');
|
||||
$this->assertSame(
|
||||
['total_count' => 0, 'total_quantity' => '0.00', 'total_amount' => '0.00'],
|
||||
$guest['cart']
|
||||
);
|
||||
|
||||
// 登录:汇总跟随购物车
|
||||
$this->actingAsMiniStore($store);
|
||||
$this->postJson('/mini/cart', ['product_id' => $product->id, 'quantity' => 3]);
|
||||
$data = $this->getJson('/mini/home')->assertOk()->json('data');
|
||||
$this->assertSame(1, $data['cart']['total_count']);
|
||||
$this->assertSame('3.00', $data['cart']['total_quantity']);
|
||||
$this->assertSame('15.00', $data['cart']['total_amount']);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user