订单软删除

This commit is contained in:
liu
2026-08-12 09:42:48 +08:00
parent fa4bf6fe61
commit ce1f36b5b4
10 changed files with 127 additions and 6 deletions
+53
View File
@@ -250,4 +250,57 @@ class StoreOrderTest extends ProcurementTestCase
->assertJsonPath('success', false)
->assertJsonPath('msg', '周转框数量不能小于 0');
}
/** 软删除:仅已取消订单可由后台删除,删除后后台/小程序端均不可见 */
public function test_soft_delete_only_cancelled_orders(): void
{
$order = $this->makeOrderWithStatus(StoreOrderModel::STATUS_CANCELLED);
// 删除前小程序端可见
$this->getJson('/mini/order')->assertOk()->assertJsonPath('data.total', 1);
$this->actingAsSysUser();
$this->deleteJson("/order/store/{$order->id}")->assertOk()->assertJsonPath('success', true);
$this->assertNotNull($order->fresh()->deleted_at, '软删除应写入 deleted_at');
$this->assertNull(StoreOrderModel::find($order->id), '默认查询不可见软删除订单');
$this->assertNotNull(StoreOrderModel::withTrashed()->find($order->id), '数据仍保留在库中');
// 后台列表/详情不可见
$this->getJson('/order/store')->assertOk()->assertJsonPath('data.total', 0);
$this->getJson("/order/store/{$order->id}")->assertJsonPath('success', false);
// 小程序端历史订单同样不可见
$this->actingAsMiniUser(UserModel::where('store_id', $order->store_id)->first());
$this->getJson('/mini/order')->assertOk()->assertJsonPath('data.total', 0);
$this->getJson("/mini/order/{$order->id}")->assertJsonPath('success', false);
}
/** 软删除:非已取消订单拒绝删除 */
public function test_soft_delete_rejected_for_non_cancelled_orders(): void
{
foreach ([
StoreOrderModel::STATUS_PENDING,
StoreOrderModel::STATUS_SUMMARIZED,
StoreOrderModel::STATUS_DELIVERING,
StoreOrderModel::STATUS_DISTRIBUTION,
StoreOrderModel::STATUS_COMPLETED,
] as $status) {
$order = $this->makeOrderWithStatus($status);
$this->actingAsSysUser();
$this->deleteJson("/order/store/{$order->id}")
->assertOk()->assertJsonPath('success', false);
$this->assertNull($order->fresh()->deleted_at, '非已取消订单不得删除');
}
}
/** 软删除:重复删除返回订单不存在 */
public function test_soft_delete_twice_rejected(): void
{
$order = $this->makeOrderWithStatus(StoreOrderModel::STATUS_CANCELLED);
$this->actingAsSysUser();
$this->deleteJson("/order/store/{$order->id}")->assertOk()->assertJsonPath('success', true);
$this->deleteJson("/order/store/{$order->id}")->assertJsonPath('success', false);
}
}