🔀 合并小程序登录与接单门槛放开:接单认证门槛默认关闭
This commit is contained in:
+7
-7
@@ -39,12 +39,12 @@ import org.springframework.stereotype.Component;
|
||||
* 判据是生效快照指针,不是「最新提交状态」展示缓存——重新提交认证会把展示缓存
|
||||
* 变成「审核中」,照它判定会让司机一提交就接不了单。生效快照只在审核通过时切换。
|
||||
* <p>
|
||||
* 两个开关默认开启,可关掉以回退到不校验认证的行为:
|
||||
* 两个开关默认关闭,接单不校验认证;显式置 true 恢复拦截:
|
||||
* <pre>
|
||||
* transport:
|
||||
* certification:
|
||||
* vehicle-gate-enabled: false
|
||||
* driver-gate-enabled: false
|
||||
* vehicle-gate-enabled: true
|
||||
* driver-gate-enabled: true
|
||||
* </pre>
|
||||
*
|
||||
* @author Chill
|
||||
@@ -57,14 +57,14 @@ public class CertificationGate {
|
||||
/**
|
||||
* 车辆认证门槛开关
|
||||
*/
|
||||
@Value("${transport.certification.vehicle-gate-enabled:true}")
|
||||
private boolean vehicleGateEnabled = true;
|
||||
@Value("${transport.certification.vehicle-gate-enabled:false}")
|
||||
private boolean vehicleGateEnabled = false;
|
||||
|
||||
/**
|
||||
* 司机认证门槛开关
|
||||
*/
|
||||
@Value("${transport.certification.driver-gate-enabled:true}")
|
||||
private boolean driverGateEnabled = true;
|
||||
@Value("${transport.certification.driver-gate-enabled:false}")
|
||||
private boolean driverGateEnabled = false;
|
||||
|
||||
/**
|
||||
* 判定车辆是否可用
|
||||
|
||||
+39
-9
@@ -11,6 +11,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
/**
|
||||
* 认证可用性门槛测试。
|
||||
* <p>
|
||||
* 开关默认关闭:未认证的司机与车辆都可接单;只有显式置 true 才按生效快照校验。
|
||||
* <p>
|
||||
* 关键场景:已认证的车被重新提交认证后仍可接单——判定必须走生效快照,
|
||||
* 而重新提交会把「最新提交状态」变成「审核中」。
|
||||
*/
|
||||
@@ -26,14 +28,33 @@ class CertificationGateTest {
|
||||
// ------------------------------------------------------------ 开关
|
||||
|
||||
@Test
|
||||
@DisplayName("门槛默认开启")
|
||||
void enabledByDefault() {
|
||||
assertTrue(gate.isVehicleGateEnabled());
|
||||
assertTrue(gate.isDriverGateEnabled());
|
||||
@DisplayName("门槛默认关闭")
|
||||
void disabledByDefault() {
|
||||
assertFalse(gate.isVehicleGateEnabled());
|
||||
assertFalse(gate.isDriverGateEnabled());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("关闭后不因未认证而拦截(便于快速回退)")
|
||||
@DisplayName("默认关闭:未认证的司机与车辆都不拦")
|
||||
void disabledByDefaultLetsUncertifiedThrough() {
|
||||
assertTrue(gate.isVehicleAvailable(Boolean.TRUE, null));
|
||||
assertTrue(gate.isDriverAvailable(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("显式置 true:未认证的司机与车辆重新被拒")
|
||||
void explicitlyEnabledRejectsUncertified() {
|
||||
gate.setVehicleGateEnabled(true);
|
||||
gate.setDriverGateEnabled(true);
|
||||
|
||||
assertFalse(gate.isDriverAvailable(null));
|
||||
assertFalse(gate.isVehicleAvailable(Boolean.TRUE, null));
|
||||
assertTrue(gate.driverUnavailableReason().contains("认证"));
|
||||
assertTrue(gate.vehicleUnavailableReason(Boolean.TRUE, null).contains("认证"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("显式关闭后不因未认证而拦截(配置回退路径)")
|
||||
void disabledLetsEveryoneThrough() {
|
||||
gate.setVehicleGateEnabled(false);
|
||||
gate.setDriverGateEnabled(false);
|
||||
@@ -45,28 +66,32 @@ class CertificationGateTest {
|
||||
// ------------------------------------------------------------ 车辆
|
||||
|
||||
@Test
|
||||
@DisplayName("车辆:有生效快照即可用(核心:重新提交不影响可用性)")
|
||||
@DisplayName("车辆:开启门槛时有生效快照即可用(核心:重新提交不影响可用性)")
|
||||
void vehicleWithEffectiveSnapshotIsAvailable() {
|
||||
gate.setVehicleGateEnabled(true);
|
||||
assertTrue(gate.isVehicleAvailable(Boolean.TRUE, 7001L));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("车辆:重新提交后【状态变成审核中】但仍有生效快照 → 仍可用")
|
||||
void resubmittedVehicleStaysAvailable() {
|
||||
gate.setVehicleGateEnabled(true);
|
||||
// 展示缓存变成「审核中」,但 effective_cert_record_id 仍指着上一次通过的记录。
|
||||
assertTrue(gate.isVehicleAvailable(Boolean.TRUE, 7001L),
|
||||
"已认证的车重新提交后必须仍可接单,否则司机一提交就停工");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("车辆:从未认证(无生效快照)被拒绝")
|
||||
@DisplayName("车辆:开启门槛时从未认证(无生效快照)被拒绝")
|
||||
void vehicleWithoutEffectiveSnapshotIsRejected() {
|
||||
gate.setVehicleGateEnabled(true);
|
||||
assertFalse(gate.isVehicleAvailable(Boolean.TRUE, null));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("车辆:停用状态优先于认证——停用的车即便有生效快照也不可用")
|
||||
void disabledVehicleIsRejectedEvenIfCertified() {
|
||||
gate.setVehicleGateEnabled(true);
|
||||
assertFalse(gate.isVehicleAvailable(Boolean.FALSE, 7001L),
|
||||
"启用/停用是运营状态,认证门槛只叠加不覆盖");
|
||||
assertFalse(gate.isVehicleAvailable(null, 7001L));
|
||||
@@ -75,20 +100,23 @@ class CertificationGateTest {
|
||||
// ------------------------------------------------------------ 司机
|
||||
|
||||
@Test
|
||||
@DisplayName("司机:有生效快照即可用")
|
||||
@DisplayName("司机:开启门槛时有生效快照即可用")
|
||||
void driverWithEffectiveSnapshotIsAvailable() {
|
||||
gate.setDriverGateEnabled(true);
|
||||
assertTrue(gate.isDriverAvailable(9001L));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("司机:从未认证被拒绝")
|
||||
@DisplayName("司机:开启门槛时从未认证被拒绝")
|
||||
void driverWithoutEffectiveSnapshotIsRejected() {
|
||||
gate.setDriverGateEnabled(true);
|
||||
assertFalse(gate.isDriverAvailable(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("司机门槛可单独关闭")
|
||||
void driverGateCanBeDisabledIndependently() {
|
||||
gate.setVehicleGateEnabled(true);
|
||||
gate.setDriverGateEnabled(false);
|
||||
assertTrue(gate.isDriverAvailable(null), "司机门槛关闭时不应拦截");
|
||||
assertFalse(gate.isVehicleAvailable(Boolean.TRUE, null), "车辆门槛不受影响");
|
||||
@@ -99,6 +127,7 @@ class CertificationGateTest {
|
||||
@Test
|
||||
@DisplayName("停用与未认证分开报:前者让人去启用车辆,后者才让人去认证")
|
||||
void unavailableReasonsDistinguishDisabledFromUncertified() {
|
||||
gate.setVehicleGateEnabled(true);
|
||||
String disabled = gate.vehicleUnavailableReason(Boolean.FALSE, 7001L);
|
||||
assertTrue(disabled.contains("停用"), disabled);
|
||||
assertFalse(disabled.contains("认证审核"), "已认证的车被停用,不该报成认证没通过");
|
||||
@@ -111,6 +140,7 @@ class CertificationGateTest {
|
||||
@Test
|
||||
@DisplayName("可用时没有原因;两种不可用文案都不泄露内部字段名")
|
||||
void availableHasNoReasonAndTextIsReadable() {
|
||||
gate.setVehicleGateEnabled(true);
|
||||
assertNull(gate.vehicleUnavailableReason(Boolean.TRUE, 7001L));
|
||||
assertFalse(gate.vehicleUnavailableReason(Boolean.TRUE, null).contains("effective_cert_record_id"));
|
||||
assertFalse(gate.vehicleUnavailableReason(Boolean.FALSE, null).contains("effective_cert_record_id"));
|
||||
|
||||
Reference in New Issue
Block a user